Cómo comenzar a usar Hogar conectado mediante IP (CHIP)

1. Introducción

Matter es un nuevo estándar dentro de Connectivity Standards Alliance (antes llamado Zigbee Alliance). Este estándar unificador de la industria es una promesa de conectividad confiable y segura, un sello de aprobación que indica que los dispositivos funcionarán sin problemas en conjunto, hoy y mañana

El objetivo de este estándar es simplificar el desarrollo para los fabricantes y aumentar la compatibilidad para los consumidores. Se está desarrollando activamente en GitHub, en el proyecto Hogar conectado mediante IP, que se basa en la creencia compartida de que los dispositivos de casa inteligente deben ser seguros, confiables y fáciles de usar. El proyecto, que se basa en el protocolo de Internet (IP), tiene el objetivo de permitir la comunicación entre dispositivos de casa inteligente, apps para dispositivos móviles y servicios en la nube, y definir un conjunto específico de tecnologías de red basadas en IP a los efectos de la certificación de dispositivos.

A menos que se indique lo contrario, el contenido de este Codelab se rige por la

Licencia 2.0 de Apache. Consulta la Licencia de código abierto del proyecto CHIP a fin de obtener más información.

En este Codelab, te guiaremos para que configures un dispositivo Wi-Fi mediante la placa de desarrollo ESP32, le agregues funcionalidad de activación y desactivación, y lo controles con una interfaz de línea de comandos.

Qué aprenderás

  • Cómo conectar y controlar un dispositivo con CHIP habilitado
  • Cómo agregar más funcionalidades a un ejemplo de aplicación de dispositivo

Otros requisitos

  • Conocimientos básicos de Linux
  • Una placa de desarrollo ESP32
  • Una máquina Linux con "git" instalado

2. Introducción

Terminales de puerto en serie

Debes estar familiarizado con el modo de conexión a un puerto en serie a través de una terminal. Este Codelab utiliza screen y proporciona una descripción general de uso, pero se puede usar cualquier otro software de la terminal.

Máquina Linux

Este Codelab fue diseñado para usar una máquina con Linux de 64 bits basada en x86 a fin de ejecutar la herramienta de CHIP y escribir en la memoria flash todas las placas de desarrollo. Todos los pasos se probaron en Ubuntu 20.04.2.0 LTS.

Placa de desarrollo ESP32

En este codelab, se usa una de estas placas de desarrollo ESP32:

  • ESP32-DevkitC
  • ESP32-WROVER-KIT V4.1
  • Kit de desarrollo de IoT básico y principal de M5Stack ESP32 Series

Deberás conectar el kit de desarrollo a tu máquina Linux con un cable USB para escribir el firmware en la memoria flash y acceder a los registros del dispositivo.

3. Cómo clonar el repositorio

Si quieres consultar la versión del código fuente que es compatible con este documento, sigue estos pasos para clonar el repositorio:

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

Luego, sigue los pasos descritos en las secciones "Requisitos previos" y "Preparación de la compilación" de la Documentación de compilación en GitHub para tu plataforma. Cuando termines, continúa leyendo aquí.

Aplica el parche para el Codelab

Con este parche, quitaremos la devolución de llamada a fin de controlar el comando de activación/desactivación de CHIP. Más adelante, lo revisaremos y lo volveremos a agregar paso a paso.

$ git fetch origin ce1e0ab44c367bc9d5907115e09a4c45fc6d8c96
$ git cherry-pick ce1e0ab44c367bc9d5907115e09a4c45fc6d8c96

4. Cómo compilar el ejemplo del cliente CHIP

Para comunicarte con los dispositivos CHIP desde tu máquina anfitrión, deberás compilar chip-tool para el host.

Sigue las instrucciones de GitHub a fin de compilar chip-tool.

Si tienes chip-tool, la usarás para realizar operaciones, como activar y desactivar extremos de dispositivos.

Consulta la documentación y el código fuente de chip-tool en GitHub para obtener más información sobre las diferentes operaciones de chip-tool.

5. Cómo compilar el Ejemplo de todos los clústeres

Después de configurar el host y compilar chip-tool, puedes compilar y ejecutar el Ejemplo de todos los clústeres para la ESP32.

Primero, cambia al directorio del Ejemplo de todos los clústeres.

$ cd examples/all-clusters-app/esp32

Luego, sigue las instrucciones en GitHub hasta que se te solicite que ejecutes el siguiente comando:

$ idf make menuconfig

Cuando ejecutes este comando, verás el editor de configuración para el ejemplo.

Configura el tipo de placa

Ve a DemostraciónTipo de dispositivo y selecciona la placa que usarás para la compilación.

35343b20891ccdfd.png

Inhabilita el modo Rendezvous

Si inhabilitas el modo Rendezvous, el dispositivo podrá comunicarse con chip-tool a través de un canal no seguro. En el menú de configuración, navega a DemoRendezvous Mode y configura el modo en Bypass:

9db9116fda290c03.png

Configura la contraseña y el SSID de la conexión Wi-Fi

En el menú de configuración, ve a Component configCHIP Device LayerWiFi Station Options y establece estas dos opciones para tu red Wi-Fi:

  • SSID predeterminado de Wi-Fi
  • Contraseña predeterminada de Wi-Fi

60b3fe446c502711.png

Compilación y escritura en la memoria flash

Con esta configuración, compila y escribe la aplicación de ejemplo en la memoria flash.

Sustituye "USB0" a continuación por el TTY al que se encuentra adjunta tu placa de desarrollo. Si hay más de un cable serie conectado a tu máquina anfitrión, puede tener un TTY diferente (p. ej., /dev/ttyUSB1 o /dev/ttyUSB2). Sigue realizando esta sustitución en cualquier otro lugar donde veas USB0 en este documento.

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

Los pasos anteriores también están disponibles en el archivo readme del Ejemplo de todos los clústeres de CHIP.

6. Cómo habilitar el comando OnOff

Abre el archivo DeviceCallbacks.cpp, que se encuentra en examples/all-clusters-app/esp32/main, en cualquier editor. A continuación, navega a la función "DeviceCallbacks::PostAttributeChangeCallback()".

Cuando se envía un comando de activación o desactivación desde chip-tool, el dispositivo debería recibir eventos ZCL_ON_OFF_CLUSTER_ID. Para controlar estos eventos, los agregamos a la devolución de llamada de evento que controla diferentes clusterID.

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

    switch (clusterId)
    {
    case ZCL_ON_OFF_CLUSTER_ID:
        break;

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

Todos los clústeres admiten muchos atributos. Queremos una funcionalidad sencilla de activación y desactivación. Por lo tanto, verifica el attributeId de ZCL_ON_OFF_ATTRIBUTE_ID en el código. Debe estar vacío.

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;
    }

    ...
}

Agrega la llamada a función a fin de controlar el estado de la luz LED en el kit de desarrollo si clusterId y attributeId son correctos.

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;
    }

    ...
}

Guarda el archivo y, luego, compila la aplicación y vuelve a escribir el kit de desarrollo en la memoria flash mediante el mismo proceso indicado en Compilación y escritura en la memoria flash en el paso anterior:

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

7. Cómo ejecutar la aplicación de ejemplo

Conecta el cable USB de la placa ESP32 a tu máquina anfitrión y, luego, inicia una terminal en serie. Un buen programa que puedes usar es screen, y puedes ver el resultado de serie de la ESP32 si ejecutas el siguiente comando:

$ screen /dev/ttyUSB0 115200

Después de que se inicie el dispositivo y se conecte a Wi-Fi, este mostrará la dirección IP en la consola en serie. Lo necesitarás para interactuar con el dispositivo mediante chip-tool.

b8b3b97d230997e0.png

En el caso anterior, la dirección IP es 192.168.117.134, y el dispositivo está escuchando en el puerto 11097.

Con esta dirección IP y este puerto, establece una conexión con el dispositivo y omite el paso de vinculación:

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

Ahora puedes activar o desactivar el extremo 1 con el siguiente comando:

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

En el ESP32 DevKitC, esto activará o desactivará la señal en GPIO2:

2bc30b2e82b22153.png

En la imagen anterior, se muestra un LED rojo de 1.8 V / 20 mA conectado a GPIO2, con una resistencia de 75 Ohm en serie.

En el ESP32-WROVER-KIT, el comando anterior activará o desactivará una luz LED verde virtual en la parte superior izquierda de la pantalla:

8f9ab6a82f525248.png

En la placa M5Stack, el comando anterior activará o desactivará una luz LED verde virtual en la parte superior izquierda de la pantalla:

8067715c8175fee9.png

8. Felicitaciones

Controlaste con éxito el kit de desarrollo con CHIP. ¡Genial!

En este Codelab aprendiste a hacer lo siguiente:

  • Habilitar la funcionalidad OnOff en tu kit de desarrollo
  • Controlar el kit de desarrollo con la herramienta de control de CHIP

Más información

A continuación, te ofrecemos algunas ideas que puedes implementar para seguir experimentando:

  • Edita el archivo ZAP a fin de expandir las capacidades de la funcionalidad.
  • Agrega la funcionalidad de ZCL_IDENTIFY_CLUSTER_ID al archivo DeviceCallbacks.cpp.
  • La especificación define la biblioteca de clústeres ZigBee.
  • Consulta GitHub para conocer las novedades más recientes sobre el proyecto CHIP y buildwithmatter.com a fin de conocer las novedades de Matter.