OTA di test su Espressif ESP32

Le seguenti istruzioni utilizzano il app illuminazione dell'SDK Matter insieme a un file M5Stack ESP32 di sviluppo.

Configurazione dell'ambiente di build

Innanzitutto, clona l'SDK Matter.

In questo esempio, viene mostrato l'impegno minimo supportato per Matter versione 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

Successivamente, controlliamo la versione utilizzata nel flusso di lavoro GitHub di 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 SDK Matter nel contenitore e per fornire accesso all'SDK 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

arresta e avvia il container Docker Matter

Ogni volta che esegui un comando docker run, devi creare un nuovo container con dell'immagine specificata. Quando esegui questa operazione, i dati precedenti, che sono stati salvati su un l'istanza di container precedente viene persa. A volte è opportuno perché ti consente di iniziare con una nuova installazione. Ma in questo Ad esempio, potresti voler salvare la configurazione di lavoro e dell'ambiente tra una sessione e l'altra.

user@host> docker stop container_name

Quando vuoi eseguirlo di nuovo, avvia il container e apri un terminale finestra:

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

Puoi aprire altre sessioni del terminale per il tuo 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'SDK Matter e l'IDF ESP:

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

Creazione e flash

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

Per farlo, devi creare un'immagine.

Innanzitutto, 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 su Matter integrazione in Google Home Developer Console.

Attiva il flag del richiedente OTA:

  1. Component config -->

  2. CHIP Core -->

  3. System options --->

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

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

Attiva il flag di creazione di immagini 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, quindi Q per esci menuconfig.

Configura i certificati di test

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

Crea il tuo 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

Crea e carica l'immagine OTA

Ora modifica di nuovo le impostazioni di compilazione per creare un'immagine OTA. Utilizza la 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, quindi premi q per uscire da menuconfig.

Crea e recupera l'immagine. L'esempio seguente mostra sia la posizione dell'immagine per OTA e dell'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 sia disponibile sull'host del container.

Carica l'immagine OTA su Developer Console seguendo le Istruzioni per il caricamento per agenzie di viaggi online.

Commissione a Google Home e osserva l'OTA

Assicurati che il dispositivo sia collegato al computer Linux host con USB. La L'esempio seguente mostra l'utilizzo di GNU screen per leggere i log del dispositivo:

screen -L /dev/ttyUSB0 115200

L'output del dispositivo viene visualizzato sul terminale e viene scritto lo stesso output nel file di log di schermata 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 rosso di ripristino sul lato del dispositivo per visualizzare i log dall'avvio.

Nell'output del dispositivo, dovresti vedere anche il VID e il PID impostati in precedenza. come URL all'immagine del codice QR che userai per mettere in servizio il 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 a casa tua.

Mettere in servizio il dispositivo con il Google Home app (GHA) usando il codice QR di sul link visualizzato nel file di log.

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

Dopo aver installato l'immagine, osserva che il tempo di compilazione corrisponde a quella caricata nella console e che è successiva alla di compilazione indicata al primo avvio. Esecuzione di grep con il seguente pattern in modalità regex su screenlog.0 può illustrare l'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

Dopo l'esecuzione iniziale, puoi ripetere i passaggi nella sezione Crea e carica un'immagine OTA senza caricarne una nuova. Questa volta reimposta le versioni su 1.

Esegui menuconfig e le 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 dalla tua casa nell'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 a Google Home e osserva le OTA, se necessario.

Convalidare l'aggiornamento software OTA

La versione software del dispositivo può essere controllata utilizzando l'app Google Home (GHA). Dopo la messa in servizio di un dispositivo, segui queste procedure:

  1. Tieni premuto a lungo il riquadro del dispositivo sulla 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