Les instructions suivantes utilisent l'exemple d'application d'éclairage du SDK Matter avec une carte de développement M5Stack ESP32.
Configuration de l'environnement de compilation
Commencez par cloner le SDK Matter.
Dans cet exemple, nous vérifions le commit minimal compatible avec la version 5 de Matter de 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
Nous vérifions ensuite la version utilisée dans le workflow GitHub ESP32 pour déterminer l'image Docker la plus adaptée à notre build:
$ cat .github/workflows/examples-esp32.yaml | grep chip-build | head -n 1
image: connectedhomeip/chip-build-esp32:0.5.99
Nous exécutons un conteneur à partir de l'image Docker, en transmettant des indicateurs pour monter le SDK Matter dans le conteneur et pour fournir un accès à l'appareil 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
Arrêter et démarrer le conteneur Docker Matter
Chaque fois que vous exécutez une commande docker run
, vous créez un conteneur avec l'image spécifiée. Dans ce cas, vos anciennes données, qui étaient enregistrées sur une instance de conteneur précédente, sont perdues. Parfois, c'est ce que vous souhaitez, car cela vous permet de démarrer avec une nouvelle installation. Toutefois, dans cet exemple, vous souhaitez probablement enregistrer votre travail et la configuration de votre environnement entre les sessions.
user@host> docker stop container_name
Lorsque vous êtes prêt à redémarrer, démarrez le conteneur et ouvrez une fenêtre de terminal:
user@host> docker start container_name
user@host> docker exec -it container_name /bin/bash
Vous pouvez ouvrir des sessions de terminal supplémentaires dans votre conteneur avec:
user@host> docker exec -it container_name /bin/bash
Vous pouvez également démarrer une session racine à l'aide des commandes suivantes:
user@host> docker exec -u 0 -it container_name /bin/bash
Initialiser le SDK
Dans le conteneur, nous initialiserons le SDK Matter et l'IDF ESP:
cd /workspace
git submodule update --init --recursive
source ./scripts/activate.sh
source /opt/espressif/esp-idf/export.sh
Compiler et flasher
La tâche suivante consiste à créer l'image et à flasher le kit de développement pour recevoir la mise à jour du micrologiciel OTA Matter.
Pour ce faire, vous devez créer une image.
Commencez par configurer la compilation à l'aide de l'utilitaire menuconfig
de l'IDF ESP.
cd examples/lighting-app/esp32
idf.py menuconfig
Dans le menu interactif, configurez les paramètres suivants:
Component config --->
CHIP Device Layer --->
Device Identification Options --->
Définissez
Vendor ID
sur le VID attribué par Connectivity Standards Alliance (Alliance).Définissez
Product ID
sur le PID que vous avez défini sur l'intégration Matter dans Google Home Developer Console.
Activez l'indicateur de demandeur OTA:
Component config -->
CHIP Core -->
System options --->
Activer l'indicateur de demandeur OTA
[*] Enable OTA Requestor
Appuyez deux fois sur ESC pour revenir au menu de premier niveau.
Activez l'indicateur de création d'image OTA Matter:
Component config -->
CHIP Device Layer --->
Matter OTA Image --->
[*] Generate OTA IMAGE
Définissez le numéro de version:
Application manager --->
Sélectionner
[*] Get the project version from Kconfig
Définissez
Project version (NEW)
sur1.0
Appuyez sur s pour enregistrer la configuration, appuyez deux fois sur Entrée, puis sur q pour quitter
menuconfig
.
Configurer des certificats de test
Suivez la procédure décrite dans Créer des certificats de test d'appareil Matter pour créer des certificats CD, DAC et PAI.
Créer votre appareil
Exécutez maintenant le build et flashez l'appareil:
idf.py build
idf.py -p /dev/ttyUSB0 erase_flash
idf.py -p /dev/ttyUSB0 flash
Créer et importer l'image OTA
Modifiez à nouveau les paramètres de compilation pour créer une image OTA. Utilisez la même image, mais avec un numéro de version incrémenté.
Exécutez menuconfig
.
idf.py menuconfig
Dans le menu interactif, mettez à jour les éléments suivants:
Application manager --->
- Sélectionner
[*] Get the project version from Kconfig
- Définissez
Project version (NEW)
sur2.0
- Appuyez sur s pour enregistrer la configuration, appuyez deux fois sur Entrée, puis sur q pour quitter
menuconfig
.
Créez et récupérez l'image. L'exemple ci-dessous montre à la fois l'emplacement de l'image pour l'OTA et le résultat lors de l'analyse avec 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
Étant donné que le SDK Matter est installé à partir de votre hôte de conteneur, l'image OTA est disponible sur votre hôte de conteneur.
Importez l'image OTA dans Developer Console en suivant les instructions d'importation OTA.
Commissionner Google Home et observer l'OTA
Assurez-vous que votre appareil est connecté à la machine Linux hôte via USB. L'exemple suivant montre comment utiliser GNU screen
pour lire les journaux de l'appareil:
screen -L /dev/ttyUSB0 115200
Cette commande affiche la sortie de l'appareil dans votre terminal et écrit la même sortie dans le fichier de journal de l'écran par défaut nommé screenlog.0
.
Vous pouvez ouvrir le fichier screenlog.0
dans un autre éditeur de texte ou l'afficher dans un autre shell avec cat
, tail
, more
ou grep
.
Appuyez sur le bouton de réinitialisation rouge situé sur le côté de l'appareil pour afficher les journaux de démarrage.
Dans la sortie de l'appareil, vous devriez voir le VID et le PID que vous avez définis précédemment, ainsi qu'une URL vers l'image du code QR que vous utiliserez pour mettre en service l'appareil.
[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
Assurez-vous que votre hub est en ligne dans votre maison.
Mettez en service l'appareil avec le Google Home app (GHA) à l'aide du code QR du lien qui s'affiche dans le fichier journal.
Laissez l'appareil fonctionner sans interruption pendant plusieurs minutes après la mise en service.
Vous devez observer la sortie du journal concernant l'appelant OTA, le téléchargement d'images OTA et OTAImageProcessor
.
Une fois l'image installée, vérifiez que le temps de compilation de l'image correspond à celui de celle importée dans la console et qu'il est postérieur au temps de compilation indiqué au premier démarrage. L'exécution de grep
avec le modèle suivant en mode expression régulière sur screenlog.0
peut illustrer le processus 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
Après l'exécution initiale, vous pouvez répéter les étapes de la section Créer et importer une image OTA sans importer de nouvelle image. Cette fois, rétablissez les versions sur 1
.
Exécutez menuconfig
, puis dans les options de menu interactives:
Component config -->
CHIP Device Layer --->
Device Identification Options
Définissez
Version String
surv1.0
.Définissez
Device Software Version Number
sur1
.Appuyez sur s pour enregistrer la configuration, puis sur q pour quitter
menuconfig
.
Supprimez l'appareil de votre maison dans GHA.
Compilez l'image, si ce n'est pas déjà fait:
idf.py build
Flashez-le:
idf.py -p /dev/ttyUSB0 erase_flash
idf.py -p /dev/ttyUSB0 flash
Répétez les étapes de la section Commissionner l'appareil auprès de Google Home et observer la mise à jour Over The Air si nécessaire.
Valider la mise à jour logicielle OTA
Vous pouvez vérifier la version logicielle de l'appareil à l'aide de l'application Google Home (GHA). Une fois un appareil mis en service, procédez comme suit:
- Appuyer de manière prolongée sur la tuile de l'appareil sur l'écran principal de GHA
- Appuyez sur l'icône en haut à droite.
- Appuyez sur Informations techniques.
- Vérifier le champ Version logicielle