Espressif ESP32에서 OTA 테스트

다음 안내에서는 조명 앱 M5Stack ESP32 및 Matter SDK의 예 개발 보드입니다.

빌드 환경 설정

먼저 Matter SDK를 클론합니다.

이 예에서는 Google Home의 최소 지원 약정을 확인하여 Matter 출시 5:

$ mkdir otaprep
$ cd otaprep
git clone https://github.com/project-chip/connectedhomeip.git
cd connectedhomeip
git fetch origin v1.0-branch
git checkout FETCH_HEAD
git submodule update --init --recursive
source ./scripts/activate.sh

그런 다음 ESP32 GitHub 워크플로에서 사용된 버전을 확인하여 우리 빌드에 가장 적합한 Docker 이미지를 선택합니다.

$ cat .github/workflows/examples-esp32.yaml | grep chip-build | head -n 1
            image: connectedhomeip/chip-build-esp32:0.5.99

Docker 이미지에서 컨테이너를 실행하고 플래그를 전달하여 이미지를 Matter SDK를 설치하고 ESP32 기기입니다.

$ docker run --name container_name -it --user $(id -u):$(id -g) --mount source=$(pwd),target=/workspace,type=bind --device=/dev/ttyUSB0 connectedhomeip/chip-build-esp32:0.5.99 /bin/bash

Matter Docker 컨테이너 중지 및 시작

docker run 명령어를 실행할 때마다 다음이 포함된 새 컨테이너가 생성됩니다. 지정할 수 있습니다 이렇게 하면 이전 컨테이너 인스턴스는 손실됩니다 때로는 이것이 새 설치를 시작할 수 있기 때문입니다. 그러나 여기서는 예를 들어 작업 및 환경 구성을 세션 간

user@host> docker stop container_name

다시 실행할 준비가 되면 컨테이너를 시작하고 터미널을 엽니다. 기간:

user@host> docker start container_name
user@host> docker exec -it container_name /bin/bash

다음을 사용하여 컨테이너에 대한 추가 터미널 세션을 열 수 있습니다.

user@host> docker exec -it container_name /bin/bash

또는 다음을 사용하여 루트 세션을 시작합니다.

user@host> docker exec -u 0 -it container_name /bin/bash

SDK 초기화

컨테이너에서 Matter SDK 및 ESP IDF를 초기화합니다.

cd /workspace
git submodule update --init --recursive
source ./scripts/activate.sh
source /opt/espressif/esp-idf/export.sh

빌드 및 플래시

다음 작업은 이미지를 빌드하고 개발 키트를 플래시하여 Matter OTA 펌웨어 업데이트

이렇게 하려면 이미지를 만들어야 합니다.

먼저 ESP IDF의 menuconfig 유틸리티를 사용하여 빌드를 구성합니다.

cd examples/lighting-app/esp32
idf.py menuconfig

대화형 메뉴에서 다음 설정을 구성합니다.

  1. Component config --->

  2. CHIP Device Layer --->

  3. Device Identification Options --->

  4. Vendor IDConnectivity Standards Alliance (Alliance)에서 할당한 VID로 설정합니다.

  5. Product IDMatter에서 설정한 PID로 설정합니다. Google Home Developer Console에 통합되어 있습니다.

OTA 요청자 플래그를 사용 설정합니다.

  1. Component config -->

  2. CHIP Core -->

  3. System options --->

  4. OTA 요청자 플래그 [*] Enable OTA Requestor 사용 설정

  5. ESC를 두 번 눌러 최상위 메뉴로 돌아갑니다.

Matter OTA 이미지 생성 플래그를 사용 설정합니다.

  1. Component config -->

  2. CHIP Device Layer --->

  3. Matter OTA Image --->

  4. [*] Generate OTA IMAGE

버전 번호를 설정합니다.

  1. Application manager --->

  2. [*] Get the project version from Kconfig 선택

  3. Project version (NEW)1.0로 설정합니다.

  4. s를 눌러 구성을 저장하고 Enter 키를 두 번 누른 후 q를 눌러 확인합니다. menuconfig 종료

테스트 인증서 설정

다음의 단계를 따르세요. 만들려는 Matter 기기 테스트 인증서를 만듭니다. CD, DAC, PAI 인증서

나만의 기기 만들기

이제 빌드를 실행하고 기기를 플래시합니다.

idf.py build
idf.py -p /dev/ttyUSB0 erase_flash
idf.py -p /dev/ttyUSB0 flash

OTA 이미지 생성 및 업로드

이제 빌드 설정을 다시 변경하여 OTA 이미지를 만듭니다. 사용 버전 번호가 올라갑니다

menuconfig을 실행합니다.

idf.py menuconfig

대화형 메뉴에서 다음을 업데이트합니다.

  1. Application manager --->
  2. [*] Get the project version from Kconfig 선택
  3. Project version (NEW)2.0로 설정합니다.
  4. s를 눌러 구성을 저장하고 Enter 키를 두 번 누른 후 키를 누릅니다. q를 사용하여 menuconfig를 종료합니다.

이미지를 빌드하고 가져옵니다. 아래 예는 다음 두 가지 위치를 보여줍니다. ota_image_tool.py로 파싱할 때 OTA 및 출력의 이미지.

cd build
/workspace/src/app/ota_image_tool.py show ./chip-lighting-app-ota.bin
Magic: 1beef11e
Total Size: 1243360
Header Size: 64
Header TLV:
  [0] Vendor Id: XXXXX (0x000)
  [1] Product Id: XXXXX (0x000)
  [2] Version: 2 (0x2)
  [3] Version String: v2.0
  [4] Payload Size: 1243280 (0x12f890)
  [8] Digest Type: 1 (0x1)
  [9] Digest: e367f4d71e2ccd554b9a399c864abbf2c039382ef1def1b986fb2f59a99923a8

Matter SDK는 컨테이너 호스트에서 마운트되므로 OTA 이미지를 컨테이너 호스트에서 사용할 수 있습니다.

다음 단계에 따라 OTA 이미지를 Developer Console에 업로드합니다. OTA 업로드 안내.

Google Home 커미션 및 OTA 관찰

기기가 USB를 통해 호스트 Linux 시스템에 연결되어 있는지 확인합니다. 이 다음 예는 GNU screen를 사용하여 기기 로그를 읽는 방법을 보여줍니다.

screen -L /dev/ttyUSB0 115200

그러면 기기의 출력이 터미널에 표시되고 screenlog.0라는 기본 화면 로그 파일에 동일한 출력을 생성합니다.

screenlog.0 파일을 다른 텍스트 편집기에서 열거나 cat, tail, more 또는 grep가 있는 다른 셸입니다.

기기 측면에 있는 빨간색 재설정 버튼을 눌러 부팅 로그를 확인합니다.

기기 출력에 앞서 설정한 VID 및 PID가 표시됩니다. 기기를 커미셔닝하는 데 사용할 QR 코드 이미지의 URL로 사용합니다.

[0;32mI (2388) chip[DIS]: Advertise commission parameter vendorID=XXXXX productID=XXXX discriminator=3840/15 cm=1[0m

[0;32mI (1928) chip[SVR]: SetupQRCode: [MT:E59-000000000000000][0m

https://project-chip.github.io/connectedhomeip/qrcode.html?data=MT%3AE59-000000000000000

집에서 Hub가 온라인 상태인지 확인하세요.

다음에서 QR 코드를 사용하여 Google Home app (GHA)에 기기 커미셔닝 로그 파일에 표시되는 링크를 클릭합니다.

커미셔닝 후 몇 분 동안 기기를 중단 없이 실행합니다. OTA 요청자, OTA 이미지 다운로드, 및 OTAImageProcessor.

이미지가 설치된 후 이미지의 컴파일 시간이 콘솔에 업로드된 파일과 일치하고 보고되었습니다. 다음을 사용하여 grep 실행: screenlog.0의 정규식 모드에서 다음 패턴을 사용하면 OTA를 process:

$ grep -E "(Compile time|OTA)" screenlog.0
I (76) boot:  1 otadata          OTA data         01 00 0000f000 00002000
I (91) boot:  3 ota_0            OTA app          00 10 00020000 00177000
I (99) boot:  4 ota_1            OTA app          00 11 001a0000 00177000
I (645) cpu_start: Compile time:     Oct 15 2022 06:21:59
I (135558) chip[SWU]: OTA Requestor received AnnounceOTAProvider
I (540658) chip[SWU]: OTA image downloaded to offset 0x1a0000
I (541348) OTAImageProcessor: Applying, Boot partition set offset:0x1a0000
I (76) boot:  1 otadata          OTA data         01 00 0000f000 00002000
I (91) boot:  3 ota_0            OTA app          00 10 00020000 00177000
I (99) boot:  4 ota_1            OTA app          00 11 001a0000 00177000
I (645) cpu_start: Compile time:     Oct 15 2022 07:35:31
I (76) boot:  1 otadata          OTA data         01 00 0000f000 00002000
I (91) boot:  3 ota_0            OTA app          00 10 00020000 00177000
I (99) boot:  4 ota_1            OTA app          00 11 001a0000 00177000
I (645) cpu_start: Compile time:     Oct 15 2022 07:35:31

초기 실행 후 이 섹션의 단계를 반복할 수 있습니다. 새 이미지를 업로드하지 않고 OTA 이미지를 생성하고 업로드합니다. 이번에는 버전을 1로 다시 설정합니다.

menuconfig를 실행하고 대화형 메뉴 옵션에서 다음을 실행합니다.

  1. Component config -->

  2. CHIP Device Layer --->

  3. Device Identification Options

  4. Version Stringv1.0로 설정합니다.

  5. Device Software Version Number1로 설정합니다.

  6. s를 눌러 구성을 저장한 다음 q를 눌러 menuconfig를 종료합니다.

GHA에서 홈에서 기기를 삭제합니다.

이미지를 아직 빌드하지 않은 경우 이미지를 빌드합니다.

idf.py build

플래시:

idf.py -p /dev/ttyUSB0 erase_flash
idf.py -p /dev/ttyUSB0 flash

필요에 따라 Google Home에 커밋하고 OTA를 관찰의 단계를 반복합니다.

OTA 소프트웨어 업데이트 유효성 검사

기기 소프트웨어 버전은 Google Home 앱 (GHA)을 사용하여 확인할 수 있습니다. 기기가 커미셔닝되면 다음 절차를 따르세요.

  1. GHA 기본 화면에서 기기 타일 길게 누르기
  2. 오른쪽 상단의 아이콘을 탭합니다.
  3. 기술 정보를 탭합니다.
  4. 소프트웨어 버전 필드를 확인합니다.

소프트웨어 버전 필드가 표시된 Google Home 앱 화면