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ón → Tipo de dispositivo y selecciona la placa que usarás para la compilación.
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 Demo → Rendezvous Mode y configura el modo en Bypass:
Configura la contraseña y el SSID de la conexión Wi-Fi
En el menú de configuración, ve a Component config → CHIP Device Layer → WiFi Station Options y establece estas dos opciones para tu red Wi-Fi:
- SSID predeterminado de Wi-Fi
- Contraseña predeterminada de Wi-Fi
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
.
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:
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:
En la placa M5Stack, el comando anterior activará o desactivará una luz LED verde virtual en la parte superior izquierda de la pantalla:
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.