En las siguientes instrucciones, se usa el app de iluminación ejemplo del SDK de Matter junto con un ESP32 de M5Stack de desarrollo de aplicaciones.
Configuración del entorno de compilación
Primero, clona el SDK de Matter.
En este ejemplo, revisamos la confirmación mínima admitida para el Matter versión 5:
$ 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
Luego, verificaremos la versión que se usa en el flujo de trabajo de ESP32 de GitHub para determinar qué imagen de Docker se adapta mejor a nuestra compilación:
$ cat .github/workflows/examples-esp32.yaml | grep chip-build | head -n 1
image: connectedhomeip/chip-build-esp32:0.5.99
Ejecutamos un contenedor a partir de la imagen de Docker y pasamos marcas para activar Matter en el contenedor y para proporcionar acceso al 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
Detén e inicia el contenedor de Docker de Matter
Cada vez que ejecutes un comando docker run
, crearás un contenedor nuevo con
la imagen especificada. Cuando haces esto, tus datos antiguos, que se guardaron en una
instancia de contenedor anterior, se pierde. A veces, esto es lo que quieres
ya que te permite comenzar con una instalación nueva. Pero en esta
ejemplo, es probable que quieras guardar tu trabajo y la configuración del entorno
entre sesiones.
user@host> docker stop container_name
Cuando esté todo listo para volver a ejecutarlo, inicia el contenedor y abre una terminal ventana:
user@host> docker start container_name
user@host> docker exec -it container_name /bin/bash
Puedes abrir sesiones de terminal adicionales en tu contenedor con el siguiente comando:
user@host> docker exec -it container_name /bin/bash
O inicia una sesión raíz con:
user@host> docker exec -u 0 -it container_name /bin/bash
Inicializa el SDK
En el contenedor, inicializamos el SDK de Matter y el IDF de ESP:
cd /workspace
git submodule update --init --recursive
source ./scripts/activate.sh
source /opt/espressif/esp-idf/export.sh
Compila y escribe en la memoria flash
La siguiente tarea es compilar la imagen y escribir en la memoria flash el kit de desarrollo para recibir la actualización inalámbrica de firmware Matter
Para ello, debes crear una imagen.
Primero, configura la compilación con la utilidad menuconfig
del IDF de ESP.
cd examples/lighting-app/esp32
idf.py menuconfig
En el menú interactivo, establece la siguiente configuración:
Component config --->
CHIP Device Layer --->
Device Identification Options --->
Establece
Vendor ID
en el VID que asignaste a Connectivity Standards Alliance (Alliance).Establece
Product ID
en el PID que estableciste en Matter. integración en Google Home Developer Console.
Habilita la marca del solicitante de OTA:
Component config -->
CHIP Core -->
System options --->
Habilita la marca
[*] Enable OTA Requestor
del solicitante de OTAPresiona ESC dos veces para volver al menú de nivel superior.
Habilita la marca de creación de imágenes OTA Matter:
Component config -->
CHIP Device Layer --->
Matter OTA Image --->
[*] Generate OTA IMAGE
Establece el número de versión:
Application manager --->
Seleccionar
[*] Get the project version from Kconfig
Configura
Project version (NEW)
en1.0
.Presiona s para guardar la configuración, presiona Intro dos veces y, luego, q para sal
menuconfig
.
Configurar certificados de prueba
Sigue los pasos que se indican en Crea certificados de prueba de dispositivos Matter para crear certificados CD, DAC y PAI.
Compila tu dispositivo
Ahora, ejecuta la compilación y escribe el dispositivo en la memoria flash:
idf.py build
idf.py -p /dev/ttyUSB0 erase_flash
idf.py -p /dev/ttyUSB0 flash
Crea y sube la imagen OTA
Ahora, vuelve a cambiar la configuración de compilación para crear una imagen OTA. Usa el misma imagen, pero con un número de versión incrementado.
Ejecuta menuconfig
.
idf.py menuconfig
En el menú interactivo, actualiza lo siguiente:
Application manager --->
- Seleccionar
[*] Get the project version from Kconfig
- Configura
Project version (NEW)
en2.0
. - Presiona s para guardar la configuración, presiona Intro dos veces y, luego,
q para salir de
menuconfig
.
Compila y recupera la imagen. En el siguiente ejemplo, se muestra la ubicación
de la imagen para OTA y el resultado cuando se analiza con 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
Debido a que el SDK de Matter se activa desde el host del contenedor, esté disponible en el host del contenedor.
Sube la imagen OTA a Developer Console siguiendo los pasos que se indican a continuación: Instrucciones de carga OTA
Envía una comisión a Google Home y cumple con las normas OTA
Asegúrate de que el dispositivo esté conectado a la máquina anfitrión de Linux mediante USB. El
El siguiente ejemplo muestra el uso de screen
de GNU para leer los registros del dispositivo:
screen -L /dev/ttyUSB0 115200
Se mostrará el resultado del dispositivo en tu terminal y se escribirán los
la misma salida al archivo de registro de pantalla predeterminado llamado screenlog.0
.
Puedes abrir el archivo screenlog.0
en otro editor de texto o mostrarlo en
Otro shell con cat
, tail
, more
o grep
.
Presiona el botón rojo de restablecimiento ubicado en el lateral del dispositivo para ver los registros del inicio.
En la salida del dispositivo, también deberías ver el VID y el PID que configuraste antes como una URL a la imagen del código QR que usarás para encargar el dispositivo.
[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
Asegúrate de que la unidad Hub esté en línea en tu casa.
Envía el dispositivo a la Google Home app (GHA) mediante el código QR de el vínculo que aparece en el archivo de registro.
Deja que el dispositivo se ejecute sin interrupciones durante varios minutos después de la puesta en marcha.
Debes observar los resultados del registro relacionados con el solicitante de OTA, la descarga de imágenes OTA
y OTAImageProcessor
.
Después de instalar la imagen, observa que su tiempo de compilación
coincida con el que se subió a la consola y es posterior al
de compilación que se informó en el primer inicio. Ejecuta grep
con el comando
siguiente patrón en el modo de regex en screenlog.0
puede ilustrar la actualización
proceso:
$ 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
Después de la ejecución inicial, puedes repetir los pasos de la sección
Crea y sube imágenes OTA sin subir una imagen nueva. Esta vez,
vuelve a establecer las versiones en 1
.
Ejecuta menuconfig
y, en las opciones del menú interactivo, ejecuta lo siguiente:
Component config -->
CHIP Device Layer --->
Device Identification Options
Establece
Version String
env1.0
.Establece
Device Software Version Number
en1
.Presiona s para guardar la configuración y, luego, q para salir de
menuconfig
.
Quita el dispositivo de tu casa en el GHA.
Compila la imagen si aún no está compilada:
idf.py build
Escribe en la memoria flash:
idf.py -p /dev/ttyUSB0 erase_flash
idf.py -p /dev/ttyUSB0 flash
Repite los pasos de Comisión a Google Home y cumplimiento inalámbrico según sea necesario.
Valida la actualización de software OTA
Puedes consultar la versión de software del dispositivo con la app de Google Home (GHA). Una vez que se pone en marcha un dispositivo, sigue estos procedimientos:
- Mantén presionada la tarjeta del dispositivo en la pantalla principal de GHA
- Presiona el ícono en la parte superior derecha
- Presiona Información técnica.
- Verifica el campo Versión de software.