Le seguenti istruzioni utilizzano l'esempio di app di illuminazione dell'SDK Matter insieme a una scheda di sviluppo M5Stack ESP32.
Configurazione dell'ambiente di build
Innanzitutto, clona l'SDK Matter.
In questo esempio, controlliamo il commit minimo supportato per la release 5 di Matter di Google Home:
mkdir otaprepcd otaprepgit 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 workflow GitHub di ESP32 per determinare quale immagine Docker è più adatta alla nostra build:
cat .github/workflows/examples-esp32.yaml | grep chip-build | head -n 1image: connectedhomeip/chip-build-esp32:0.5.99Eseguiamo 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/bashArresta e avvia il container Docker Matter
Ogni volta che esegui un comando docker run, crei un nuovo container con l'immagine specificata. In questo modo, i dati precedenti, salvati in un'istanza del container precedente, vengono persi. A volte è proprio questo l'effetto desiderato, perché ti consente di iniziare con una nuova installazione. Tuttavia, in questo esempio, molto probabilmente vorrai salvare il tuo lavoro e la configurazione dell'ambiente tra una sessione e l'altra.
user@host> docker stop container_name
Quando è tutto pronto per eseguire nuovamente l'operazione, 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 altre sessioni di terminale nel 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 /workspacegit submodule update --init --recursivesource ./scripts/activate.shsource /opt/espressif/esp-idf/export.shCrea e flasha
L'attività successiva consiste nel creare l'immagine e aggiornare il kit di sviluppo per ricevere l'aggiornamento firmware OTA Matter.
Per farlo, devi creare un'immagine.
Innanzitutto, configura la build utilizzando l'utilità menuconfig dell'IDF ESP.
cd examples/lighting-app/esp32
idf.py menuconfigNel menu interattivo, configura le seguenti impostazioni:
Component config --->CHIP Device Layer --->Device Identification Options --->Imposta
Vendor IDsul VID assegnato da Connectivity Standards Alliance (Alliance).Imposta
Product IDsul PID impostato nell'integrazione Matter in Google Home Developer Console.
Attiva il flag OTA Requestor:
Component config -->CHIP Core -->System options --->Attiva il flag OTA Requestor
[*] Enable OTA RequestorPremi ESC due volte per tornare al menu di livello superiore.
Attiva il flag di creazione dell'immagine 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 KconfigImposta
Project version (NEW)su1.0Premi S per salvare la configurazione, premi Invio due volte, quindi Q per uscire da
menuconfig.
Configura i certificati di test
Segui i passaggi descritti in Crea certificati di test dei dispositivi Matter per creare certificati CD, DAC e PAI.
Crea il tuo dispositivo
Ora esegui la build e il flashing del dispositivo:
idf.py build
idf.py -p /dev/ttyUSB0 erase_flash
idf.py -p /dev/ttyUSB0 flashCrea e carica 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 menuconfigNel 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 Invio due volte, quindi premi q per uscire da
menuconfig.
Crea e recupera l'immagine. L'esempio mostra sia la posizione dell'immagine per l'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.binL'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 su Developer Console seguendo le istruzioni per il caricamento OTA.
Commissiona a Google Home e osserva l'OTA
Assicurati che il dispositivo sia connesso alla macchina Linux host tramite USB. L'esempio seguente mostra l'utilizzo di GNU screen per leggere i log del dispositivo:
screen -L /dev/ttyUSB0 115200In questo modo, l'output del dispositivo viene visualizzato 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 reset rosso sul lato del dispositivo per visualizzare i log dall'avvio.
Nell'output del dispositivo, dovresti vedere il VID e il PID impostati in precedenza, nonché un URL dell'immagine del codice QR che utilizzerai per commissionare 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 l'hub sia online in casa tua.
Esegui il provisioning del dispositivo con Google Home app (GHA) utilizzando il codice QR dal link visualizzato nel file di log.
Lascia che il dispositivo funzioni senza interruzioni per diversi minuti dopo la messa in servizio.
Dovresti osservare l'output del log relativo a OTA Requestor, al download dell'immagine OTA e a OTAImageProcessor.
Dopo aver installato l'immagine, osserva che il tempo di compilazione dell'immagine corrisponde a quello dell'immagine caricata nella console ed è 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.0L'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 della sezione Crea e carica l'immagine OTA senza caricare una nuova immagine.
Questa volta, reimposta le versioni su 1.
Esegui menuconfig e, nelle opzioni del menu interattivo:
Component config -->CHIP Device Layer --->Device Identification OptionsImposta
Version Stringsuv1.0.Imposta
Device Software Version Numbersu1.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 buildFlash it:
idf.py -p /dev/ttyUSB0 erase_flashidf.py -p /dev/ttyUSB0 flashRipeti i passaggi descritti in Commissiona a Google Home e osserva l'OTA, se necessario.
Convalida l'aggiornamento software OTA
La versione software del dispositivo può essere controllata tramite l'app Google Home (GHA). Una volta commissionato un dispositivo, segui queste procedure:
- Tieni premuto il riquadro del dispositivo nella schermata principale di GHA
- Tocca l'icona in alto a destra.
- Tocca Informazioni tecniche.
- Controlla il campo Versione software.