Configuration de l'environnement de compilation
Commencez par cloner le Matter SDK.
Dans cet exemple, nous extrayons le commit minimal compatible pour la version 5 de Matter pour Google Home's Matter :
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
Ensuite, nous vérifions la version utilisée dans le workflow GitHub ESP32 pour déterminer l'image Docker la plus adaptée à notre compilation :
cat .github/workflows/examples-esp32.yaml | grep chip-build | head -n 1image: connectedhomeip/chip-build-esp32:0.5.99Nous exécutons un conteneur à partir de l'image Docker, en transmettant des indicateurs pour monter le Matter SDK dans le conteneur et 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/bashArrê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 ont été enregistrées sur une instance de conteneur précédente, sont perdues. Parfois, c'est ce que vous voulez, car cela vous permet de commencer par une nouvelle installation. Toutefois, dans cet exemple, vous souhaiterez probablement enregistrer votre travail et la configuration de l'environnement entre les sessions.
user@host> docker stop container_name
Lorsque vous êtes prêt à exécuter à nouveau, 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
Ou démarrez une session racine à l'aide de :
user@host> docker exec -u 0 -it container_name /bin/bash
Initialiser le SDK
Dans le conteneur, nous initialisons le Matter SDK et ESP IDF :
cd /workspacegit submodule update --init --recursivesource ./scripts/activate.shsource /opt/espressif/esp-idf/export.shCompiler et flasher
L'étape 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 d'ESP IDF.
cd examples/lighting-app/esp32
idf.py menuconfigDans le menu interactif, configurez les paramètres suivants :
Component config --->CHIP Device Layer --->Device Identification Options --->Définissez
Vendor IDsur le VID attribué par Connectivity Standards Alliance (Alliance).Définissez
Product IDsur le PID que vous avez défini sur l'intégration Matter dans la Google Home Developer Console.
Activez l'indicateur de demandeur OTA :
Component config -->CHIP Core -->System options --->Activez l'indicateur de demandeur OTA
[*] Enable OTA RequestorAppuyez 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électionnez
[*] Get the project version from KconfigDéfinissez
Project version (NEW)sur1.0Appuyez sur s pour enregistrer la configuration, puis deux fois sur Entrée et enfin 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 la compilation et flashez l'appareil :
idf.py build
idf.py -p /dev/ttyUSB0 erase_flash
idf.py -p /dev/ttyUSB0 flashCré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 menuconfigDans le menu interactif, mettez à jour les éléments suivants :
Application manager --->- Sélectionnez
[*] Get the project version from Kconfig - Définissez
Project version (NEW)sur2.0 - Appuyez sur s pour enregistrer la configuration, puis deux fois sur Entrée et enfin sur q pour quitter
menuconfig.
Créez et récupérez l'image. L'exemple montre à la fois l'emplacement de l'image pour OTA et la sortie lors de l'analyse avec ota_image_tool.py.
cd build && /workspace/src/app/ota_image_tool.py show ./chip-lighting-app-ota.binVoici le résultat :
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 Matter SDK est monté à partir de votre hôte de conteneur, l'image OTA est disponible sur votre hôte de conteneur.
Importez l'image OTA dans la Developer Console en suivant les instructions d'importation OTA.
Mettre en service Google Home et observer OTA
Assurez-vous que votre appareil est connecté à la machine Linux hôte via USB. L'exemple suivant montre l'utilisation de GNU screen pour lire les journaux de l'appareil :
screen -L /dev/ttyUSB0 115200Cela affiche la sortie de l'appareil dans votre terminal et écrit la même sortie dans le fichier journal d'é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 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 QR code 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 QR code 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 devriez observer la sortie du journal liée au demandeur OTA, au téléchargement de l'image OTA et à OTAImageProcessor.
Une fois l'image installée, vérifiez que le temps de compilation de l'image correspond à celui de l'image importée dans la console et qu'il est postérieur au temps de compilation signalé lors du premier démarrage. L'exécution de grep avec le modèle suivant en mode d'expression régulière sur screenlog.0 peut illustrer le processus OTA :
grep -E "(Compile time|OTA)" screenlog.0Voici le résultat :
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, redéfinissez les versions sur 1.
Exécutez menuconfig, puis dans les options du menu interactif :
Component config -->CHIP Device Layer --->Device Identification OptionsDéfinissez
Version Stringsurv1.0.Définissez
Device Software Version Numbersur1.Appuyez sur s pour enregistrer la configuration, puis sur q pour quitter
menuconfig.
Supprimez l'appareil de votre maison dans le GHA.
Créez l'image, si elle n'est pas déjà créée :
idf.py buildFlashez-la :
idf.py -p /dev/ttyUSB0 erase_flashidf.py -p /dev/ttyUSB0 flashRépétez les étapes de la section Mettre en service Google Home et observer OTA si nécessaire.
Valider la mise à jour logicielle OTA
La version du logiciel de l'appareil peut être vérifiée à l'aide de l'application Google Home (AGH). Une fois l'appareil mis en service, procédez comme suit :
- Appuyez de manière prolongée sur la tuile de l'appareil sur l'écran principal GHA.
- Appuyez sur l'icône en haut à droite.
- Appuyez sur Fiche technique.
- Cochez le champ Version du logiciel.