Test OTA su Espressif ESP32

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Le seguenti istruzioni utilizzano l'esempio dell'app di illuminazione da Matter SDK along with an M5Stack ESP32 development board.

Configura l'ambiente di creazione

Innanzitutto, clona l'SDK Matter.

In questo esempio, esaminiamo il commit minimo supportato per Matter Release 5 di Google Home:

$ 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

Adesso controlliamo la versione utilizzata nel flusso di lavoro di 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 flag per montare l'SDK Matter nel container e 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

Avvia e arresta il container Matter Docker

Ogni volta che esegui un comando docker run, devi creare un nuovo container con l'immagine specificata. In questo caso, i dati precedenti, salvati su un'istanza di container precedente, andranno persi. A volte questo è ciò che vuoi che accada, perché ti permette di iniziare con una nuova installazione. Ma in questo esempio è molto probabile che tu voglia salvare la tua configurazione di lavoro e di ambiente tra una sessione e l'altra.

user@host> docker stop container_name

Quando vuoi eseguire di nuovo l'esecuzione, 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 aggiuntive nel tuo container con:

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

In alternativa, avvia una sessione root utilizzando:

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

Inizializza l'SDK

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

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

Build e Flash

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

Per farlo, devi creare un'immagine.

Innanzitutto, configura la build usando l'utilità menuconfig dell'IDF ESP.

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 tuo VID assegnato agli annunci associati alla ricerca personalizzata.

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

Attiva il flag OTA richiedente:

  1. Component config -->

  2. CHIP Core -->

  3. System options --->

  4. Attiva il flag OTA richiedente [*] Enable OTA Requestor

  5. Premi due volte Esc per tornare al menu di primo livello.

Attiva il flag Matter Creazione di immagini OTA:

  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 due volte Invio, quindi Q per uscire da menuconfig.

Configura certificati di test

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

Crea il tuo dispositivo

Ora esegui la build e fai lampeggiare il dispositivo:

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

Crea e carica l'immagine OTA

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

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 due volte Invio, quindi premi Q per uscire da menuconfig.

Crea e recupera l'immagine. L'esempio seguente 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
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 viene montato dall'host del container, l'immagine OTA è disponibile su questo host.

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

Commissione a Google Home e osservazione OTA

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

screen -L /dev/ttyUSB0 115200

L'output viene visualizzato dal dispositivo al terminale e lo stesso viene scritto nel file di log predefinito della schermata denominato screenlog.0.

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

Premi il pulsante rosso di reset sul lato del dispositivo per visualizzare i log dell'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 la commissione 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 Hub sia online in casa.

Esegui la messa in servizio del dispositivo con il Google Home app (GHA) using the QR code from the link that appears in the log file.

Lascia il dispositivo in funzione per diversi minuti dopo la messa in servizio. Dovresti osservare l'output del log relativo al richiedente OTA, al download di immagini OTA e a OTAImageProcessor.

Una volta installata l'immagine, osserva che il tempo di compilazione dell'immagine corrisponde a quello della console caricata e che è successivo al tempo di compilazione segnalato al primo avvio. L'esecuzione di grep con il seguente pattern in modalità regex in screenlog.0 può illustrare il processo OTA:

$ 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

Dopo l'esecuzione iniziale, puoi ripetere i passaggi descritti nella sezione Creare e caricare un'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, quindi Q per uscire da menuconfig.

Rimuovi il dispositivo da casa tua 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 Commissione in Google Home e osserva OTA, se necessario.

Convalidare l'aggiornamento software OTA

La versione del software del dispositivo può essere verificata utilizzando l'app Google Home (GHA). Dopo aver commissionato un dispositivo, procedi nel seguente modo:

  1. Premi a lungo 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 con il campo della versione software