OTA di test su Espressif ESP32

Le istruzioni seguenti utilizzano l' app di illuminazione esempio dell'Matter SDK insieme a una scheda di sviluppo M5Stack ESP32.

Configurazione dell'ambiente di build

Innanzitutto, clona l'Matter SDK.

In questo esempio, estraiamo il commit minimo supportato per la release 5 di Matter di Google Home: Matter

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

Dopodiché, controlliamo la versione utilizzata nel flusso di lavoro GitHub ESP32 per determinare quale immagine Docker è più adatta alla nostra build:

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

Eseguiamo un container dall'immagine Docker, passando i flag per montare l' Matter SDK nel container e per fornire l'accesso al dispositivo 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

Arrestare e avviare il container Docker Matter

Ogni volta che esegui un comando docker run, crei un nuovo container con l'immagine specificata. In questo modo, i vecchi dati, salvati in un'istanza di container precedente, vengono persi. A volte è quello che vuoi che accada, perché ti consente di iniziare con una nuova installazione. Tuttavia, in questo esempio è molto probabile che tu voglia salvare il lavoro e la configurazione dell'ambiente tra le sessioni.

user@host> docker stop container_name

Quando è tutto pronto per eseguire di nuovo, avvia il container e apri una finestra del terminale:

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

Puoi aprire sessioni di terminale aggiuntive nel container con:

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

Oppure avvia una sessione root utilizzando:

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

Inizializzare l'SDK

Nel container, inizializziamo l'Matter SDK e ESP IDF:

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

Creare ed eseguire il flashing

L'attività successiva consiste nel creare l'immagine ed eseguire il flashing del kit di sviluppo per ricevere l'aggiornamento del firmware OTA Matter.

Per farlo, devi creare un'immagine.

Per prima cosa, configura la build utilizzando l'utilità menuconfig di ESP IDF.

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

Nel menu interattivo, configura le seguenti impostazioni:

  1. Component config --->

  2. CHIP Device Layer --->

  3. Device Identification Options --->

  4. Imposta Vendor ID sul VID assegnato da Connectivity Standards Alliance (Alliance).

  5. Imposta Product ID sul PID impostato nell'Matter integrazione nel Google Home Developer Console.

Abilita il flag del richiedente OTA:

  1. Component config -->

  2. CHIP Core -->

  3. System options --->

  4. Abilita il flag del richiedente OTA [*] Enable OTA Requestor

  5. Premi ESC due volte per tornare al menu di livello superiore.

Abilita il flag di creazione dell'immagine OTA Matter:

  1. Component config -->

  2. CHIP Device Layer --->

  3. Matter OTA Image --->

  4. [*] Generate OTA IMAGE

Imposta il numero di versione:

  1. Application manager --->

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

  3. Imposta Project version (NEW) su 1.0

  4. Premi s per salvare la configurazione, premi Invio due volte, poi q per uscire da menuconfig.

Configurare i certificati di test

Segui i passaggi descritti in Creare certificati di test dei dispositivi Matter per creare certificati CD, DAC e PAI.

Creare il dispositivo

Ora esegui la build ed esegui il flashing del dispositivo:

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

Creare e caricare l'immagine OTA

Ora modifica di nuovo le impostazioni di build per creare un'immagine OTA. Utilizza la stessa immagine, ma con un numero di versione incrementato.

Esegui menuconfig.

idf.py menuconfig

Nel menu interattivo, aggiorna quanto segue:

  1. Application manager --->
  2. Seleziona [*] Get the project version from Kconfig
  3. Imposta Project version (NEW) su 2.0
  4. Premi s per salvare la configurazione, premi Invio due volte, poi q per uscire da menuconfig.

Crea e recupera l'immagine. L'esempio mostra sia la posizione dell'immagine per OTA sia l'output durante l'analisi con ota_image_tool.py.

cd build && /workspace/src/app/ota_image_tool.py show ./chip-lighting-app-ota.bin

L'output è il seguente:

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

Poiché l'SDK Matter è montato dall'host del container, l'immagine OTA è disponibile sull'host del container.

Carica l'immagine OTA nel Developer Console seguendo le istruzioni per il caricamento OTA.

Eseguire il commissioning su Google Home e osservare OTA

Assicurati che il dispositivo sia collegato alla macchina Linux host tramite USB. L'esempio seguente mostra l'utilizzo di screen GNU per leggere i log del dispositivo:

screen -L /dev/ttyUSB0 115200

Viene visualizzato l'output del dispositivo nel terminale e lo stesso output viene scritto nel file di log dello schermo predefinito denominato screenlog.0.

Puoi aprire il file screenlog.0 in un altro editor di testo o visualizzarlo in un'altra shell con cat, tail, more o grep.

Premi il pulsante di ripristino rosso sul lato del dispositivo per visualizzare i log dall'avvio.

Nell'output del dispositivo, dovresti vedere il VID e il PID che hai impostato in precedenza, nonché un URL all'immagine del codice QR che utilizzerai per eseguire il commissioning del dispositivo.

[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

Assicurati che l'hub sia online in casa.

Esegui il commissioning del dispositivo con il Google Home app (GHA) utilizzando il codice QR del link visualizzato nel file di log.

Lascia che il dispositivo funzioni ininterrottamente per diversi minuti dopo il commissioning. Dovresti osservare l'output dei log relativi al richiedente OTA, al download dell'immagine OTA e a OTAImageProcessor.

Una volta installata l'immagine, verifica che il tempo di compilazione dell'immagine corrisponda a quello dell'immagine caricata nella console e sia successivo al tempo di compilazione segnalato al primo avvio. L'esecuzione di grep con il seguente pattern in modalità espressione regolare su screenlog.0 può illustrare il processo OTA:

grep -E "(Compile time|OTA)" screenlog.0

L'output è il seguente:

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

Dopo l'esecuzione iniziale, puoi ripetere i passaggi nella sezione Creare e caricare l'immagine OTA senza caricare una nuova immagine. Questa volta, imposta di nuovo le versioni su 1.

Esegui menuconfig e, nelle opzioni del menu interattivo:

  1. Component config -->

  2. CHIP Device Layer --->

  3. Device Identification Options

  4. Imposta Version String su v1.0.

  5. Imposta Device Software Version Number su 1.

  6. Premi s per salvare la configurazione, poi q per uscire da menuconfig.

Rimuovi il dispositivo dalla casa in GHA.

Crea l'immagine, se non è già stata creata:

idf.py build

Esegui il flashing:

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

Ripeti i passaggi descritti in Eseguire il commissioning su Google Home e osservare OTA in base alle esigenze.

Convalidare l'aggiornamento software OTA

La versione del software del dispositivo può essere controllata utilizzando l'app Google Home (GHA). Una volta eseguito il commissioning di un dispositivo, segui queste procedure:

  1. Tieni premuto il riquadro del dispositivo nella schermata principale di GHA
  2. Tocca l'icona in alto a destra
  3. Tocca Informazioni tecniche
  4. Controlla il campo Versione software

Schermata dell'app Google Home che mostra il campo della versione software