Le seguenti istruzioni utilizzano l'esempio dell'app di illuminazione dell'SDK Matter insieme a una scheda di sviluppo M5Stack ESP32.
Configurazione dell'ambiente di build
Per prima cosa, clona l'SDK Matter.
In questo esempio, analizziamo il commit minimo supportato per la release 5 di Google Home di 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
Successivamente, verifichiamo la versione utilizzata nel flusso di lavoro GitHub ESP32 per determinare quale immagine Docker sia 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'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 Docker Matter
Ogni volta che esegui un comando docker run
, creerai un nuovo container con l'immagine specificata. Se esegui questa operazione, i vecchi dati, 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. Tuttavia, in questo esempio è molto probabile che tu voglia salvare la configurazione di lavoro e dell'ambiente tra una sessione e l'altra.
user@host> docker stop container_name
Quando vuoi tornare a eseguire il container, 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 terminale 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, inizializzamo 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 consiste nel creare l'immagine e flashare il kit di sviluppo per ricevere l'aggiornamento del firmware OTA Matter.
A questo scopo, devi creare un'immagine.
Per prima cosa, configura la build utilizzando l'utilità menuconfig
dell'IDF ESP.
cd examples/lighting-app/esp32
idf.py menuconfig
Nel menu interattivo, configura le seguenti impostazioni:
Component config --->
CHIP Device Layer --->
Device Identification Options --->
Imposta il
Vendor ID
sul VID assegnato a Connectivity Standards Alliance (Alliance).Imposta
Product ID
sul PID che hai impostato nell'integrazione Matter in Google Home Developer Console.
Attiva il flag del richiedente OTA:
Component config -->
CHIP Core -->
System options --->
Attiva il flag del richiedente OTA
[*] Enable OTA Requestor
Premi due volte ESC per tornare al menu di primo livello.
Attiva il flag per la creazione di immagini OTA Matter:
Component config -->
CHIP Device Layer --->
Matter OTA Image --->
[*] Generate OTA IMAGE
Imposta il numero di versione:
Application manager --->
Seleziona
[*] Get the project version from Kconfig
Imposta
Project version (NEW)
su1.0
Premi S per salvare la configurazione, premi due volte Invio, quindi Q per uscire da
menuconfig
.
Configura i 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 Flash 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 modifica di nuovo le impostazioni della 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:
Application manager --->
- Seleziona
[*] Get the project version from Kconfig
- Imposta
Project version (NEW)
su2.0
- 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 la posizione dell'immagine per l'OTA e l'output durante l'analisi con il 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 è montato sull'host del container, l'immagine OTA è disponibile sul tuo host.
Carica l'immagine OTA su Developer Console seguendo le istruzioni per il caricamento OTA.
Commissione su Google Home e osservazione OTA
Assicurati che il dispositivo sia connesso alla macchina Linux host con USB. L'esempio seguente mostra l'utilizzo di GNU screen
per leggere i log del dispositivo:
screen -L /dev/ttyUSB0 115200
In questo modo viene visualizzato l'output del dispositivo nel terminale e lo stesso output nel file di log predefinito dello schermo 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 relativi all'avvio.
Nell'output del dispositivo, dovresti visualizzare il VID e il PID impostati 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 l'hub sia online in casa.
Commissioni sul dispositivo con Google Home app (GHA) utilizzando il codice QR del link riportato nel file di log.
Lascia il dispositivo in esecuzione senza interruzioni per diversi 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 l'ora di compilazione dell'immagine corrisponde a quella caricata nella console e supera l'ora di compilazione indicata al primo avvio. L'esecuzione di grep
con il seguente pattern in modalità regex su 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:
Component config -->
CHIP Device Layer --->
Device Identification Options
Imposta
Version String
suv1.0
.Imposta
Device Software Version Number
su1
.Premi S per salvare la configurazione, quindi Q per uscire da
menuconfig
.
Rimuovi il dispositivo da casa tua nel 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 l'OTA se necessario.
Convalida l'aggiornamento software OTA
La versione del software del dispositivo può essere verificata tramite l'app Google Home (GHA). Una volta commissionato un dispositivo, segui queste procedure:
- Premi a lungo il riquadro del dispositivo nella schermata principale di GHA
- Tocca l'icona in alto a destra.
- Tocca Informazioni tecniche
- Controlla il campo Versione software.