Przetestuj OTA na Espressif ESP32

Poniższe instrukcje korzystają z aplikacja Oświetlenie przykład z pakietu SDK Matter z interfejsem M5Stack ESP32 platformy deweloperskiej.

Konfiguracja środowiska kompilacji

Najpierw skopiuj pakiet SDK Matter.

W tym przykładzie sprawdzamy minimalne obsługiwane zobowiązanie w przypadku Google Home: Matter, wersja 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

Następnie sprawdzamy wersję używaną w przepływie pracy GitHub ESP32, aby określić, który obraz Dockera najlepiej pasuje do naszej kompilacji:

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

Uruchamiamy kontener z obrazu Dockera, przekazując flagi umożliwiające Matter SDK w kontenerze i aby zapewnić dostęp do urządzenie 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

Zatrzymywanie i uruchamianie kontenera Dockera Matter

Każde uruchomienie polecenia docker run powoduje utworzenie nowego kontenera określonego obrazu. Stare dane, które zostały zapisane na poprzednia instancja kontenera zostanie utracona. Czasem tak właśnie chcesz ponieważ umożliwia rozpoczęcie od nowa instalacji. Ale w tym przykład, w którym najprawdopodobniej chcesz zapisać konfigurację miejsca pracy i środowiska między sesjami.

user@host> docker stop container_name

Gdy uznasz, że chcesz uruchomić ponownie, uruchom kontener i otwórz terminal okno:

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

Możesz otworzyć dodatkowe sesje terminala w kontenerze, używając:

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

Możesz też rozpocząć sesję główną za pomocą:

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

Inicjowanie pakietu SDK

W kontenerze inicjujemy pakiet SDK Matter i identyfikator ESP IDF:

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

Tworzenie i flashowanie

Kolejne zadanie to utworzenie obrazu i uruchomienie pakietu deweloperskiego, który otrzymasz. aktualizacji oprogramowania OTA Matter.

W tym celu musisz utworzyć obraz.

Najpierw skonfiguruj kompilację za pomocą narzędzia menuconfig z identyfikatora ESP IDF.

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

W interaktywnym menu skonfiguruj te ustawienia:

  1. Component config --->

  2. CHIP Device Layer --->

  3. Device Identification Options --->

  4. Ustaw Vendor ID na swój identyfikator VID przypisany do Connectivity Standards Alliance (Alliance).

  5. Ustaw Product ID na identyfikator PID ustawiony na urządzeniu Matter w Google Home Developer Console.

Włącz flagę żądania OTA:

  1. Component config -->

  2. CHIP Core -->

  3. System options --->

  4. Włącz flagę żądania OTA [*] Enable OTA Requestor

  5. Naciśnij dwukrotnie ESC, aby powrócić do menu najwyższego poziomu.

Włącz flagę tworzenia obrazu OTA Matter:

  1. Component config -->

  2. CHIP Device Layer --->

  3. Matter OTA Image --->

  4. [*] Generate OTA IMAGE

Ustaw numer wersji:

  1. Application manager --->

  2. Wybierz [*] Get the project version from Kconfig

  3. Ustaw Project version (NEW) na 1.0

  4. Naciśnij s, aby zapisać konfigurację, naciśnij dwukrotnie s, a następnie s, aby wpisać zamknij: menuconfig.

Konfigurowanie certyfikatów testowych

Wykonaj czynności opisane w Utwórz certyfikaty testowe urządzeń Matter, aby je utworzyć Certyfikaty CD, DAC i PAI.

Skompiluj urządzenie

Teraz uruchom kompilację i zainstaluj urządzenie:

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

Tworzenie i przesyłanie obrazu OTA

Teraz ponownie zmień ustawienia kompilacji, aby utworzyć obraz OTA. Użyj ten sam obraz, ale z zwiększonym numerem wersji.

Uruchom menuconfig.

idf.py menuconfig

W interaktywnym menu zaktualizuj te elementy:

  1. Application manager --->
  2. Wybierz [*] Get the project version from Kconfig
  3. Ustaw Project version (NEW) na 2.0
  4. Naciśnij s, aby zapisać konfigurację, naciśnij dwukrotnie s, a następnie naciśnij q, aby wyjść z menuconfig.

Skompiluj i pobierz obraz. Poniższy przykład pokazuje zarówno lokalizację, obrazu na potrzeby funkcji OTA oraz danych wyjściowych podczas analizowania za pomocą ota_image_tool.py.

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

Pakiet SDK Matter jest podłączony z hosta kontenera, obraz OTA jest dostępny na hoście kontenera.

Prześlij obraz OTA do Developer Console, wykonując instrukcje przesyłania OTA.

Komisję Google Home i obserwuj OTA.

Upewnij się, że urządzenie jest podłączone do hosta z systemem Linux przez USB. Poniższy przykład pokazuje wykorzystanie programu GNU screen do odczytu dzienników urządzenia:

screen -L /dev/ttyUSB0 115200

Spowoduje to wyświetlenie w terminalu danych wyjściowych urządzenia i zapisanie w domyślnym pliku dziennika ekranu o nazwie screenlog.0.

Możesz otworzyć plik screenlog.0 w innym edytorze tekstu lub wyświetlić go w kolejną powłokę z atrybutami cat, tail, more lub grep.

Naciśnij czerwony przycisk resetowania z boku urządzenia, aby wyświetlić logi z rozruchu.

W danych wyjściowych urządzenia powinny być także ustawione wcześniej ustawienia VID i PID. jako adres URL obrazu z kodem QR, którego użyjesz do zlecania urządzenia.

[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

Upewnij się, że Hub jest online w domu.

Przekieruj urządzenie za pomocą: Google Home app (GHA), używając kodu QR z link widoczny w pliku dziennika.

Po uruchomieniu urządzenie powinno działać bez przerw przez kilka minut. W dzienniku powinny pojawić się dane wyjściowe związane z żądaniem OTA, pobieraniem obrazów OTA, i OTAImageProcessor.

Po zainstalowaniu obrazu zwróć uwagę na czas kompilacji obrazu odpowiada temu, który został przesłany do konsoli, i jest późniejszy niż czas kompilacji zarejestrowany przy pierwszym uruchomieniu. Wykonuję polecenie grep z następujący wzorzec w trybie wyrażenia regularnego w witrynie screenlog.0 może ilustrować funkcję OTA proces:

$ 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

Po pierwszym uruchomieniu możesz powtórzyć kroki z sekcji Utwórz i prześlij obraz OTA bez przesyłania nowego obrazu. Tym razem ustaw wersje z powrotem na 1.

Uruchom menuconfig i w interaktywnym menu wykonaj te czynności:

  1. Component config -->

  2. CHIP Device Layer --->

  3. Device Identification Options

  4. Ustaw Version String na v1.0.

  5. Ustaw Device Software Version Number na 1.

  6. Naciśnij s, aby zapisać konfigurację, a następnie q, aby wyjść z menuconfig.

Usuń urządzenie z domu w aplikacji GHA.

Utwórz obraz, jeśli nie został jeszcze utworzony:

idf.py build

Flash-a:

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

W razie potrzeby powtórz czynności opisane w artykule Prowizja do Google Home i obserwuj OTA.

Sprawdzanie aktualizacji oprogramowania OTA

Wersję oprogramowania urządzenia można sprawdzić w aplikacji Google Home (GHA). Po oddaniu urządzenia do użytku wykonaj te czynności:

  1. Przytrzymaj kafelek urządzenia na ekranie głównym aplikacji GHA
  2. W prawym górnym rogu kliknij ikonę .
  3. Kliknij Informacje techniczne.
  4. Sprawdź pole Wersja oprogramowania

Ekran aplikacji Google Home z polem wersji oprogramowania