Tester la mise à jour OTA sur les marchés nordiques

Les instructions suivantes utilisent l'exemple d'application d'éclairage du SDK Matter et une carte de développement Nordic nRF52840.

Configuration de l'environnement

Ces instructions sont basées sur une installation basée sur Docker de la chaîne d'outils nRF Connect. Si vous préférez ne pas utiliser Docker, les instructions pour installer nRF Connect en mode natif sur un ordinateur hôte sont disponibles sur le site nordique.

Découvrez le SDK Matter

user@host> mkdir otaprep
user@host> cd otaprep
user@host> git clone https://github.com/project-chip/connectedhomeip.git
user@host> cd connectedhomeip/
user@host> git fetch origin v1.0-branch
user@host> git checkout FETCH_HEAD

Vérifiez la bonne image Docker à utiliser. Utilisez l'une des images créées pour l'intégration continue du SDK Matter.

user@host> cat .github/workflows/examples-nrfconnect.yaml | grep chip-build
            image: connectedhomeip/chip-build-nrf-platform:0.5.99

Connectez la carte nordique à l'ordinateur. Vérifiez l'énumération USB de son interface série:

Sous macOS:

user@host> ls /dev/tty.usbmodem*
/dev/tty.usbmodem0123456789000

Sous Linux, deux options s'offrent à vous:

user@host> ls /dev/tty*AC*
/dev/ttyACM0

ou

user@host> ls /dev/tty*USB*
/dev/ttyUSB0

Exécutez un conteneur à l'aide des informations recueillies à l'aide de la commande précédente. Transmettez les indicateurs permettant d'installer le dossier du SDK hôte Matter et l'interface série USB dans le conteneur.

user@host> docker run --name container_name -it --user $(id -u):$(id -g) --mount source=$(pwd),target=/workspace,type=bind connectedhomeip/chip-build-nrf-platform: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. Cette opération entraîne la perte de vos anciennes données, qui ont été enregistrées sur une instance de conteneur précédente. C'est parfois ce que vous voulez faire, car cela vous permet de démarrer avec une nouvelle installation. Toutefois, dans cet exemple, vous souhaiterez probablement enregistrer la configuration de votre travail et de votre environnement entre les sessions.

user@host> docker stop container_name

Lorsque vous êtes prêt à exécuter à nouveau le conteneur, 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, initialisez le SDK Matter et les variables d'environnement de la chaîne d'outils Nordic nRF52. L'initialisation du SDK Matter prend souvent plusieurs minutes.

$ cd /workspace
$ git submodule update --init --recursive
$ source ./scripts/bootstrap.sh
$ source ./scripts/activate.sh
$ export ZEPHYR_BASE=/opt/NordicSemiconductor/nrfconnect/zephyr
$ export GNUARMEMB_TOOLCHAIN_PATH="$PW_ARM_CIPD_INSTALL_DIR"
$ scripts/run_in_build_env.sh "python3 scripts/setup/nrfconnect/update_ncs.py --update --shallow"
$ source /opt/NordicSemiconductor/nrfconnect/zephyr/zephyr-env.sh

Compiler et Flasher

Configurez le VID et le PID de l'appareil:

$ cd examples/lighting-app/nrfconnect
$ west build -b nrf52840dk_nrf52840 -t menuconfig

Dans les options du menu interactif:

  1. Modules --->

  2. connectedhomeip --->

  3. [*] Connected Home over IP protocol stack --->

  4. Saisissez les valeurs Device vendor ID (VID) et Device product ID (PID) au format entier en base 10.

  5. Assurez-vous que l'option [*] Enable OTA requestor est sélectionnée.

  6. Appuyez sur s pour enregistrer la configuration, sur Entrée pour confirmer, 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'appareils Matter pour créer des certificats CD, DAC et PAI.

Compiler votre appareil

$ west build -b nrf52840dk_nrf52840

Flasher votre appareil

Cette opération s'effectue sur l'ordinateur hôte, et non dans le conteneur Docker.

Si vous ne disposez pas encore des outils de ligne de commande nRFConnect, téléchargez-les et installez-les.

user@host> nrfjprog --program build/zephyr/merged.hex --chiperase -f NRF52

Ouvrez une connexion de terminal à votre appareil, sur l'hôte ou sur le conteneur. Utilisez votre outil de terminal préféré, comme minicom ou GNU screen.

user@host> minicom -c on -D /dev/ttyACM0 115200

user@host> screen /dev/ttyACM0 115200

Créer et importer une image OTA

Une fois votre appareil flashé, modifiez à nouveau les paramètres de compilation pour créer une image OTA avec une version logicielle de l'appareil incrémenté.

Lancez Zephyr menuconfig:

$ west build -b nrf52840dk_nrf52840 -t menuconfig

Dans les options du menu interactif:

  1. Modules -->

  2. connectedhomeip -->

  3. Connected Home over IP protocol stack -->

  4. Remplacez Device Software Version par 2.

  5. Remplacez Device Software Version String par prerelease-2.

  6. Appuyez sur s pour enregistrer la configuration, sur Entrée pour confirmer, puis sur q pour quitter menuconfig.

Créez le nouveau fichier de bundle OTA Matter. La sortie est placée dans build/zephyr/zephyr.bin.

$ /workspace/src/app/ota_image_tool.py create -v hex_VID -p hex_PID -vn version_no -vs version_string path_to_binary -da digest_algorithm path_to_ota_file

Confirmez les propriétés du fichier de bundle OTA Matter généré:

/workspace/examples/lighting-app/nrfconnect# /workspace/src/app/ota_image_tool.py show firmware-ota-update-test.bin
Magic: 1beef11e
Total Size: 951784
Header Size: 72
Header TLV:
  [0] Vendor Id: XXXXX (0xXXXX)
  [1] Product Id: 32768 (0x8000)
  [2] Version: 2 (0x2)
  [3] Version String: prerelease-2
  [4] Payload Size: 951696 (0xe8590)
  [8] Digest Type: 1 (0x1)
  [9] Digest: 75f2e8b0c8e922b8bb3841504190bcdd83533e936a284c7254d29327d605c930

Comme le SDK Matter est installé à partir de votre hôte de conteneur, l'image OTA est également disponible sur l'hôte du conteneur. Importez l'image OTA dans le fichier Google Home Developer Console en suivant les instructions d'importation OTA.

Mettez l'appareil en service et observez le processus OTA.

Ouvrez une connexion de terminal à l'appareil, sur l'hôte ou sur le conteneur. Utilisez votre terminal de prédilection, tel que minicom ou GNU screen:

$ minicom -c on -D /dev/ttyACM0 115200

Appuyez sur le bouton de réinitialisation 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, ainsi que l'URL du code QR de mise en service:

I: nRF5 802154 radio initialized
I: 4 Sectors of 4096 bytes

(...)

I: 681 [SVR]Server Listening...
I: 684 [DL]Device Configuration:
I: 687 [DL]  Serial Number: 11223344556677889900
I: 692 [DL]  Vendor Id: XXXXX (0xXXXX)
I: 695 [DL]  Product Id: XXXXX (0xXXXX)
I: 699 [DL]  Hardware Version: 0
I: 702 [DL]  Setup Pin Code (0 for UNKNOWN/ERROR): 20202021
I: 708 [DL]  Setup Discriminator (0xFFFF for UNKNOWN/ERROR): 3840 (0xF00)
I: 714 [DL]  Manufacturing Date: (not set)
I: 718 [DL]  Device Type: 65535 (0xFFFF)
I: 723 [SVR]SetupQRCode: [MT:6FCJ142C00KA0648G00]
I: 727 [SVR]Copy/paste the below URL in a browser to see the QR Code:
I: 733 [SVR]https://project-chip.github.io/connectedhomeip/qrcode.html?data=MT%000000000000000000000
I: 742 [SVR]Manual pairing code: [30900112302]
I: 747 [DL]CHIP task running
I: 752 [DL]CHIPoBLE advertising started
I: 757 [DL]NFC Tag emulation started

Assurez-vous que votre Hub est en ligne et mettez l'appareil en service avec le Google Home app (GHA) à l'aide du code QR figurant dans le lien figurant dans le journal.

Laissez l'appareil consigner ses activités après la mise en service.

Le texte suivant devrait s'afficher dans le journal de l'appareil:

/* Hub OTA provider identification */
I: 69642 [SWU]OTA Requestor received AnnounceOTAProvider
D: 69647 [SWU]  FabricIndex: 1
D: 69649 [SWU]  ProviderNodeID: 0x00000000XXXXXXXX
D: 69654 [SWU]  VendorID: 0x6006
D: 69657 [SWU]  AnnouncementReason: 0
D: 69660 [SWU]  Endpoint: 2
...
D: 69799 [SWU]Establishing session to provider node ID 0x00000000FC843D94 on fabric index 1
...
D: 262265 [SWU]QueryImageResponse:
D: 262268 [SWU]  status: 0
D: 262271 [SWU]  imageURI: bdx://00000000FC843D94/37f09fd6-0000-0000-0000-000000000000
D: 262278 [SWU]  softwareVersion: 2
D: 262281 [SWU]  softwareVersionString: 2
D: 262285 [SWU]  updateToken: 36
D: 262288 [SWU]  userConsentNeeded: 0
D: 262292 [SWU]Update available from version 0 to 2
...
D: 262372 [SWU]Establishing session to provider node ID 0x00000000FC843D94 on fabric index 1
...
D: 262409 [SWU]BDX::SendMessage

Une fois l'image appliquée, l'appareil redémarre. Après le redémarrage, le temps de compilation de l'image doit correspondre à celui de celle importée dans Developer Console.

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 l'appareil mis en service, procédez comme suit:

  1. Appuyez 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 logicielle