Premiers pas avec la maison connectée sur IP (CHIP)

1. Introduction

Matter est une nouvelle norme de la Connectivity Standards Alliance (anciennement Zigbee Alliance). Cette norme d'unification du secteur est une promesse de connectivité fiable et sécurisée, avec l'assurance que les appareils fonctionnent parfaitement ensemble, aujourd'hui et demain.

Cette norme vise à simplifier le développement pour les fabricants et à améliorer la compatibilité pour les consommateurs. Il est en cours de développement sur GitHub, dans le projet de maison connectée sur IP, qui repose sur la conviction partagée que les appareils connectés doivent être sécurisés, fiables et faciles à utiliser. Le projet repose sur le protocole IP (Internet Protocol) pour permettre la communication entre les appareils connectés, les applications mobiles et les services cloud, et pour définir un ensemble spécifique de technologies de mise en réseau basées sur les adresses IP pour la certification d'appareils.

Sauf indication contraire, le contenu de cet atelier de programmation est régi par une

licence Apache 2.0. Pour en savoir plus, consultez la licence Open Source Project CHIP.

Dans cet atelier de programmation, vous allez apprendre à configurer un appareil Wi-Fi à l'aide de la carte de développement ESP32, à y ajouter des fonctionnalités d'activation et de désactivation, et à les contrôler via une interface de ligne de commande.

Points abordés

  • Comment connecter et contrôler un appareil compatible CHIP.
  • Comment ajouter des fonctionnalités à un exemple d'application d'appareil.

Prérequis

  • Connaissances de base de Linux
  • Carte de développement ESP32
  • Machine Linux avec "git" installée

2. Premiers pas

Terminaux de port série

Vous devez savoir comment vous connecter à un port série via un terminal. Cet atelier de programmation utilise screen et offre un aperçu de l'utilisation, mais vous pouvez utiliser n'importe quel autre logiciel de terminal.

Machine Linux

Cet atelier de programmation a été conçu pour une utilisation sur une machine Linux 64 bits x86 pour l'exécution de l'outil CHIP et le flashage de toutes les cartes de développement. Toutes les étapes ont été testées sur Ubuntu 20.04.2.0 LTS.

Carte de développement ESP32

Cet atelier de programmation utilise l'une des cartes de développement ESP32 suivantes :

  • ESP32-DevkitC
  • ESP32-WROVER-KIT V4.1
  • Kit de développement IoT Core de base de la série M5Stack ESP32

Vous devrez connecter le kit de développement à votre machine Linux à l'aide d'un câble USB pour flasher un micrologiciel et accéder aux journaux de l'appareil.

3. Cloner le dépôt

Pour vérifier la version du code source compatible avec ce document, suivez ces étapes :

$ git clone git@github.com:project-chip/connectedhomeip.git
$ cd connectedhomeip
$ git checkout 1de2b73bb4123af5f184eac54d1b1d76985b4f62
$ git submodule update --init

Suivez ensuite les étapes décrites dans les sections "Prerequisites" (Conditions préalables) et "Build Preparation" (Préparation de la compilation) de la documentation sur la compilation sur GitHub pour votre plate-forme. Une fois que vous aurez terminé, lisez la suite.

Appliquer le correctif pour l'atelier de programmation

Avec ce correctif, nous supprimerons le rappel pour gérer la commande d'activation ou de désactivation de CHIP. Nous allons l'examiner plus tard et l'ajouter de nouveau par étapes.

$ git fetch origin ce1e0ab44c367bc9d5907115e09a4c45fc6d8c96
$ git cherry-pick ce1e0ab44c367bc9d5907115e09a4c45fc6d8c96

4. Compiler l'exemple de client CHIP

Pour pouvoir communiquer avec des appareils CHIP depuis votre machine hôte, vous devez compiler chip-tool pour votre hôte.

Suivez les instructions sur GitHub pour la compilation de chip-tool.

Une fois que vous disposerez de chip-tool, vous l'utiliserez pour effectuer des opérations comme activer ou désactiver les points de terminaison de l'appareil.

Consultez la documentation et le code source de chip-tool sur GitHub pour en savoir plus sur les différentes opérations de chip-tool.

5. Compiler l'exemple "All Clusters"

Après avoir configuré votre hôte et compilé chip-tool, vous pouvez compiler et exécuter l'exemple "All Clusters" pour ESP32.

Commencez par passer au répertoire d'exemple "All Clusters".

$ cd examples/all-clusters-app/esp32

Ensuite, suivez les instructions sur GitHub jusqu'à ce que vous soyez invité à exécuter cette commande :

$ idf make menuconfig

Lors de l'exécution de cette commande, vous pourrez voir l'éditeur de configuration pour l'exemple.

Configurer le type de carte

Accédez à Demo → Device Type (Démonstration → Type d'appareil), puis sélectionnez la carte pour laquelle vous voulez compiler.

35343b20891ccdfd.png

Désactiver le mode RendezVous

La désactivation du mode RendezVous permet à l'appareil de communiquer avec chip-tool via un canal non sécurisé. Dans le menu de configuration, accédez à Demo → Rendezvous Mode (Démonstration → Mode RendezVous), puis définissez le mode sur Bypass (Ignorer) :

9db9116fda290c03.png

Configurer le SSID et le mot de passe Wi-Fi

Dans le menu de configuration, accédez à Component config → CHIP Device Layer → WiFi Station Options (Configuration du composant → Couche de l'appareil CHIP → Options du routeur), puis définissez ces deux options pour votre réseau Wi-Fi :

  • SSID Wi-Fi par défaut
  • Mot de passe Wi-Fi par défaut

60b3fe446c502711.png

Compilation et flashage

Une fois ces paramètres de configuration en place, compilez et flashez l'exemple d'application.

Remplacez "USB0" par le TTY auquel votre carte de développement est attachée. Si plusieurs câbles série sont branchés sur votre machine hôte, elle peut avoir un TTY différent (par exemple /dev/ttyUSB1 ou /dev/ttyUSB2). Continuez à effectuer cette substitution partout où vous voyez USB0 dans ce document.

$ idf make
$ idf make erase_flash ESPPORT=/dev/ttyUSB0
$ idf make flash ESPPORT=/dev/ttyUSB0

Les étapes ci-dessus sont également disponibles dans le fichier README de l'exemple All Clusters de CHIP.

6. Activer la commande OnOff

Ouvrez DeviceCallbacks.cpp situé dans examples/all-clusters-app/esp32/main dans n'importe quel éditeur. Accédez ensuite à la fonction "DeviceCallbacks::PostAttributeChangeCallback()".

Lors de l'envoi d'une commande d'activation/désactivation à partir de chip-tool, l'appareil doit recevoir des événements ZCL_ON_OFF_CLUSTER_ID. Pour gérer ces événements, nous l'ajoutons au rappel d'événement qui gère différents clusterID.

void DeviceCallbacks::PostAttributeChangeCallback(...)
{
    ...

    switch (clusterId)
    {
    case ZCL_ON_OFF_CLUSTER_ID:
        break;

    default:
        ESP_LOGI(TAG, "Unhandled cluster ID: %d", clusterId);
        break;
    }
    ...
}

Chaque cluster accepte de nombreux attributs. Nous aimerions proposer une fonctionnalité d'activation et de désactivation simple. Ainsi, vérifiez la valeur attributeId de ZCL_ON_OFF_ATTRIBUTE_ID dans le code. Ce champ doit être vide.

void DeviceCallbacks::PostAttributeChangeCallback(...)
{
    ...

    switch (clusterId)
    {
    case ZCL_ON_OFF_CLUSTER_ID:
        if (attributeId == ZCL_ON_OFF_ATTRIBUTE_ID) {

        } else {
          ESP_LOGI(TAG, "Unhandled attribute ID: %d", attributeId);
        }
        break;

    default:
        ESP_LOGI(TAG, "Unhandled cluster ID: %d", clusterId);
        break;
    }

    ...
}

Ajoutez l'appel de fonction pour contrôler l'état de la LED sur le kit de développement si les valeurs clusterId et attributeId sont correctes.

void DeviceCallbacks::PostAttributeChangeCallback(...)
{
    ...

    switch (clusterId)
    {
    case ZCL_ON_OFF_CLUSTER_ID:
        if (attributeId == ZCL_ON_OFF_ATTRIBUTE_ID) {
          statusLED1.Set(*value);
        } else {
          ESP_LOGI(TAG, "Unhandled attribute ID: %d", attributeId);
        }
        break;

    default:
        ESP_LOGI(TAG, "Unhandled cluster ID: %d", clusterId);
        break;
    }

    ...
}

Enregistrez le fichier, puis compilez l'application et flashez à nouveau le kit de développement, en procédant de la même manière qu'à l'étape précédente Compilation et flashage.

$ idf make
$ idf make erase_flash ESPPORT=/dev/ttyUSB0
$ idf make flash ESPPORT=/dev/ttyUSB0

7. Exécuter l'exemple d'application

Connectez le câble USB de la carte ESP32 à la machine hôte, puis démarrez un terminal série. Nous vous recommandons d'utiliser le programme screen pour obtenir la sortie de série de l'ESP32 en exécutant cette commande :

$ screen /dev/ttyUSB0 115200

Une fois l'appareil démarré et connecté au Wi-Fi, il affiche son adresse IP dans la console série. Vous en aurez besoin pour interagir avec l'appareil à l'aide de chip-tool.

b8b3b97d230997e0.png

Dans le cas ci-dessus, l'adresse IP est 192.168.117.134 et l'appareil écoute sur le port 11097.

À l'aide de cette adresse IP et de ce port, établissez une connexion à l'appareil, en contournant l'étape d'association :

$ cd examples/chip-tool
$ ./out/debug/chip-tool pairing bypass 192.168.117.134 11097

Vous pouvez à présent activer le point de terminaison 1 à l'aide de la commande suivante :

$ ./out/debug/chip-tool onoff toggle 1

Pour activer/désactiver le signal sur GPIO2 dans l'ESP32 DevKitC, procédez comme suit :

2bc30b2e82b22153.png

Dans l'image ci-dessus, un voyant rouge 1,8 V/20 mA est branché sur GPIO2, avec une résistance de 75 Ohm en série.

Sur ESP32-WROVER-KIT, la commande ci-dessus active un voyant vert virtuel en haut à gauche de l'écran :

8f9ab6a82f525248.png

Sur la carte M5Stack, la commande ci-dessus active un voyant vert virtuel en haut à gauche de l'écran :

8067715c8175fee9.png

8. Félicitations

Vous avez réussi à contrôler le kit de développement avec CHIP. Bravo !

Dans cet atelier de programmation, vous avez appris à :

  • Activer la fonctionnalité OnOff de votre kit de développement.
  • Contrôler le kit de développement via l'outil de contrôleur CHIP.

En savoir plus

Voici quelques idées que vous pouvez mettre en pratique pour approfondir le sujet :

  • Modifiez le fichier ZAP pour étendre les capacités de cette fonctionnalité.
  • Ajoutez la fonctionnalité ZCL_IDENTIFY_CLUSTER_ID au fichier DeviceCallbacks.cpp.
  • La spécification définit la bibliothèque du cluster ZigBee.
  • Rendez-vous sur GitHub pour connaître les dernières actualités concernant Project CHIP et sur buildwithmatter.com pour connaître les dernières actualités concernant Matter.