En las siguientes instrucciones, se usa el ejemplo de app de iluminación del SDK Matter junto con una placa de desarrollo M5Stack ESP32.
Configuración del entorno de compilación
Primero, clona el Matter SDK.
En este ejemplo, verificamos la confirmación mínima admitida para la versión 5 de Matter de Google Home: Matter
mkdir otaprepcd otaprepgit 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
A continuación, verificamos la versión que se usa en el flujo de trabajo de ESP32 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 1image: connectedhomeip/chip-build-esp32:0.5.99Ejecutamos un contenedor desde la imagen de Docker y pasamos marcas para activar el Matter SDK en el contenedor y proporcionar acceso al dispositivo 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/bashDetén y reinicia el contenedor de Docker de Matter
Cada vez que ejecutes un comando docker run, crearás un contenedor nuevo con la imagen especificada. Cuando lo haces, se pierden los datos antiguos, que se guardaron en una instancia de contenedor anterior. A veces, esto es lo que quieres que suceda, ya que te permite comenzar con una instalación nueva. Sin embargo, en este ejemplo, es probable que desees guardar tu trabajo y la configuración del entorno entre sesiones.
user@host> docker stop container_name
Cuando estés listo para volver a ejecutar, inicia el contenedor y abre una ventana de terminal:
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 lo siguiente:
user@host> docker exec -it container_name /bin/bash
O inicia una sesión raíz con lo siguiente:
user@host> docker exec -u 0 -it container_name /bin/bash
Inicializa el SDK
En el contenedor, inicializamos el Matter SDK y ESP IDF:
cd /workspacegit submodule update --init --recursivesource ./scripts/activate.shsource /opt/espressif/esp-idf/export.shCompilación y escritura en la memoria flash
La siguiente tarea es compilar la imagen y escribir el kit de desarrollo en la memoria flash para recibir la Matter actualización de firmware OTA.
Para ello, debes crear una imagen.
Primero, configura la compilación con la utilidad menuconfig del ESP IDF.
cd examples/lighting-app/esp32
idf.py menuconfigEn el menú interactivo, establece los siguientes parámetros:
Component config --->CHIP Device Layer --->Device Identification Options --->Establece
Vendor IDen el VID asignado por Connectivity Standards Alliance (Alliance).Establece
Product IDen el PID que configuraste en la Matter integración en el Google Home Developer Console.
Habilita la marca de solicitante de OTA:
Component config -->CHIP Core -->System options --->Habilita la marca de solicitante de OTA
[*] Enable OTA RequestorPresiona 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
Configura el número de versión:
Application manager --->Selecciona
[*] Get the project version from KconfigEstablece
Project version (NEW)en1.0.Presiona s para guardar la configuración, Intro dos veces y, luego, q para salir de
menuconfig.
Configura certificados de prueba
Sigue los pasos que se indican en Crea certificados de prueba de dispositivos Matter para crear certificados de 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 flashCrea y sube la imagen OTA
Ahora, vuelve a cambiar la configuración de compilación para crear una imagen OTA. Usa la misma imagen, pero con un número de versión incrementado.
Ejecuta menuconfig.
idf.py menuconfigEn el menú interactivo, actualiza lo siguiente:
Application manager --->- Selecciona
[*] Get the project version from Kconfig - Establece
Project version (NEW)en2.0. - Presiona s para guardar la configuración, Intro dos veces y, luego, q para salir de
menuconfig.
Compila y recupera la imagen. En el 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.binEl resultado es el siguiente:
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 Matter SDK está activado desde el host del contenedor, la imagen OTA está disponible en el host del contenedor.
Para subir la imagen OTA a Developer Console, sigue las instrucciones de carga de OTA.
Comisiona a Google Home y observa la OTA
Asegúrate de que el dispositivo esté conectado a la máquina Linux host con USB. En el siguiente ejemplo, se muestra el uso de screen de GNU para leer los registros del dispositivo:
screen -L /dev/ttyUSB0 115200Esto muestra el resultado del dispositivo en tu terminal y escribe el mismo resultado en el archivo de registro de pantalla predeterminado llamado screenlog.0.
Puedes abrir el archivo screenlog.0 en otro editor de texto o mostrarlo en otra shell con cat, tail, more o grep.
Presiona el botón rojo de restablecimiento en el costado del dispositivo para ver los registros del arranque.
En el resultado del dispositivo, deberías ver el VID y el PID que configuraste antes, así como una URL a la imagen del código QR que usarás para comisionar 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 tu Hub esté en línea en tu casa.
Comisiona el dispositivo con el Google Home app (GHA) usando el código QR de l 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 servicio.
Deberías observar el resultado del registro relacionado con el solicitante de OTA, la descarga de imágenes OTA y OTAImageProcessor.
Después de instalar la imagen, observa que el tiempo de compilación de la imagen coincide con el de la que se subió a la consola y es posterior al tiempo de compilación que se informó en el primer arranque. La ejecución de grep con el siguiente patrón en modo de expresión regular en screenlog.0 puede ilustrar el proceso de OTA:
grep -E "(Compile time|OTA)" screenlog.0El resultado es el siguiente:
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 la imagen OTA sin subir una imagen nueva.
Esta vez, vuelve a establecer las versiones en 1.
Ejecuta menuconfig y, en las opciones del menú interactivo, haz lo siguiente:
Component config -->CHIP Device Layer --->Device Identification OptionsEstablece
Version Stringenv1.0.Establece
Device Software Version Numberen1.Presiona s para guardar la configuración y, luego, q para salir de
menuconfig.
Quita el dispositivo de tu casa en la GHA.
Compila la imagen, si aún no lo hiciste:
idf.py buildEscríbela en la memoria flash:
idf.py -p /dev/ttyUSB0 erase_flashidf.py -p /dev/ttyUSB0 flashRepite los pasos en Comisiona a Google Home y observa la OTA según sea necesario.
Valida la actualización de software OTA
La versión del software del dispositivo se puede verificar con la app de Google Home (GHA). Una vez que se comisiona un dispositivo, sigue estos procedimientos:
- Mantén presionada la tarjeta del dispositivo en la pantalla principal de GHA.
- Presiona el ícono en la esquina superior derecha.
- Presiona Información técnica.
- Verifica el campo Versión de software.