Tester l'OTA sur Espressif ESP32

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 la valeur minimale prise en charge pour 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

Ensuite, nous vérifions la version utilisée dans le workflow GitHub ESP32 pour déterminer quelle image Docker convient le mieux à 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 installer le SDK Matter dans le conteneur et donner 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 ont été enregistrées dans une instance de conteneur précédente, sont perdues. Parfois, c'est ce que vous voulez se passer, car cela vous permet de commencer par une nouvelle installation. Toutefois, dans cet exemple, vous souhaiterez probablement sauvegarder votre travail et la configuration de votre environnement entre les sessions.

user@host> docker stop container_name

Lorsque vous êtes prêt à exécuter à nouveau le projet, 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 de la commande suivante:

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

Initialiser le SDK

Dans le conteneur, nous initialisons le SDK Matter et ESP IDF:

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 OTA du micrologiciel 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:

  1. Component config --->

  2. CHIP Device Layer --->

  3. Device Identification Options --->

  4. Définissez Vendor ID sur l'ID vidéo que vous avez attribué à Connectivity Standards Alliance (Alliance).

  5. 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 du demandeur OTA:

  1. Component config -->

  2. CHIP Core -->

  3. System options --->

  4. Activer l'indicateur de requête OTA [*] Enable OTA Requestor

  5. Appuyez deux fois sur ESC pour revenir au menu principal.

Activez l'indicateur de création d'image OTA Matter:

  1. Component config -->

  2. CHIP Device Layer --->

  3. Matter OTA Image --->

  4. [*] Generate OTA IMAGE

Définissez le numéro de version:

  1. Application manager --->

  2. Sélectionner [*] Get the project version from Kconfig

  3. Définissez Project version (NEW) sur 1.0.

  4. Appuyez sur s pour enregistrer la configuration, deux fois sur Entrée, puis sur q pour quitter menuconfig.

Configurer des certificats de test

Suivez les étapes de la section Créer des certificats de test pour les appareils 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:

  1. Application manager --->
  2. Sélectionner [*] Get the project version from Kconfig
  3. Définissez Project version (NEW) sur 2.0.
  4. Appuyez sur s pour enregistrer la configuration, puis deux fois sur Entrée. Appuyez ensuite sur q pour quitter menuconfig.

Créez et récupérez l'image. L'exemple ci-dessous illustre à la fois l'emplacement de l'image pour l'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.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

Comme 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.

Commission à Google Home et observation de la mise en page de l'agence de voyages en ligne

Assurez-vous que votre appareil est connecté à l'ordinateur Linux hôte via un câble USB. L'exemple suivant montre comment utiliser GNU screen pour lire les journaux d'appareil:

screen -L /dev/ttyUSB0 115200

Le résultat de l'appareil s'affiche sur votre terminal et la même sortie est écrite dans le fichier 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 sur le côté de l'appareil pour afficher les journaux au 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 l'appareil en service.

[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 Nest Hub est connecté à Internet dans votre maison.

Mettez en service l'appareil avec le Google Home app (GHA) à l'aide du code QR disponible via le 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 liée au demandeur OTA, au téléchargement d'image OTA et à OTAImageProcessor.

Une fois l'image installée, notez que le temps de compilation de l'image correspond à celui importé dans la console, et qu'il est ultérieur à celui qui a été 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, reconfigurez les versions sur 1.

Exécutez menuconfig, puis dans les options du menu interactif:

  1. Component config -->

  2. CHIP Device Layer --->

  3. Device Identification Options

  4. Définissez Version String sur v1.0.

  5. Définissez Device Software Version Number sur 1.

  6. 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 ce n'est pas déjà fait:

idf.py build

Flash:

idf.py -p /dev/ttyUSB0 erase_flash
idf.py -p /dev/ttyUSB0 flash

Répétez les étapes de la section Mettre en service Google Home et vérifiez la mise en service OTA si nécessaire.

Valider la mise à jour logicielle OTA

Vous pouvez vérifier la version logicielle de l'appareil dans l'application Google Home. Une fois l'appareil mis en service, suivez les procédures ci-dessous:

  1. Appuyer de manière prolongée sur la tuile de l'appareil sur l'écran principal de GHA
  2. Appuyez sur l'icône en haut à droite.
  3. Appuyez sur Informations techniques.
  4. Vérifiez le champ Version logicielle.

Écran de l'application Google Home affichant le champ de la version du logiciel