K32W
Este ejemplo funciona como un tipo de dispositivo de bombilla, con capacidades de encendido y apagado. Los pasos se verificaron en la placa de desarrollo NXP K32W (kit de desarrollo IOTZTB-DK006).
Configuración inicial
- Asegúrate de tener instalados Python3 y estos paquetes. Los pasos de este documento se validaron con Python 3.8.
- Descarga e instala K32W061 MCUXpresso SDK 2.6.9.
- Una vez que se haya compilado el SDK, descarga el paquete del SDK y extráelo en el directorio principal. Establece la variable de entorno
NXP_K32W0_SDK_ROOT
en la que extrajiste el SDK. También te recomendamos agregar este comando al archivo.*rc
para la shell que usas, como.zshrc
:export NXP_K32W0_SDK_ROOT=$HOME/SDK_2_6_9_K32W061DK6/
Clona e inicializa el repositorio NXP/Micro:
git clone https://github.com/NXPmicro/matter.git
cd matter
git fetch origin v1.0-branch-nxp
git checkout FETCH_HEAD
git submodule update --init --recursive
source ./scripts/activate.sh
En el ejemplo, se usa la configuración “Nodo genérico de interruptor”. Asegúrate de que los saltos JP4/JP7 estén ubicados en la posición más a la izquierda (LPC-JN UART0):
Reconfigura la pizarra para JLink
- Descarga e instala JLink en tu computadora.
- En la placa, asegúrate de que esté seleccionada la opción DFU en el puente BOOT junto al puerto USB y conecta la placa a la computadora con un cable mini.
- Descarga y, luego, instala LPCScrypt en tu computadora.
- En macOS, haz doble clic en el paquete descargado para instalarlo.
- Para Linux, ve a la carpeta en la que descargas el paquete:
chmod +x lpcscrypt-2.1.2_57.x86_64.deb.bin
./lpcscrypt-2.1.2_57.x86_64.deb.bin
- Una vez que LPCScrypt esté instalado, ejecute esta secuencia de comandos para reprogramar su placa (reemplace
<LPCScrypt_InstallDir>
con la ruta de acceso de instalación real de LPCScrypt):<LPCScrypt_InstallDir>/scripts/program_JLINK
- Deberías ver mensajes similares a los que se muestran a continuación. Presiona la barra espaciadora para comenzar a programar. Cuando termines, presiona Intro para salir.
LPCScrypt - J-Link firmware programming script v2.1.2 Nov 2020.
Connect an LPC-Link2 or LPCXpresso V2/V3 Board via USB then press Space. Booting LPCScrypt . LPCXpresso V2/V3 programmed with Firmware_JLink_LPCXpressoV2_20190404.bin -To use: remove DFU link and reboot the board
Connect next board then press Space (or <return> to Quit)
- Desconecta la placa y vuelve a cambiar el puente BOOT a NORMAL. Se reconfiguró tu placa a fin de usar JLink para escribir una imagen en la memoria flash.
Compila la imagen
- Prepara el repositorio:
source ./scripts/activate.sh
- Instala las dependencias:
pip3 install pycrypto pycryptodome
- Actualiza
VENDOR_ID
en la configuración de tu proyecto de ejemplo (CHIPProjectConfig.h
). Debe ser tu VID según la especificación Matter de CSA o un VID asignado con fines de prueba. El valor que proporciones paraVENDOR_ID
debe coincidir con el que usas cuando creas la integración de Matter en Google Home Developer Console.grep VENDOR_ID ./examples/lighting-app/nxp/k32w/k32w0/include/CHIPProjectConfig.h
* CHIP_DEVICE_CONFIG_DEVICE_VENDOR_ID #define CHIP_DEVICE_CONFIG_DEVICE_VENDOR_ID your-hex-VID
- Verifica el
PRODUCT_ID
en la configuración del proyecto (CHIPProjectConfig.h
). El valorPRODUCT_ID
puede permanecer igual que el valor predeterminado del ejemplo o cambiar como desees, pero debe cumplir con las restricciones de ID del producto actuales que se describen en los requisitos previos. Además, ten en cuenta que el valor que proporcionas paraPRODUCT_ID
debe coincidir con el que usas cuando creas la integración de Matter en Developer Console.grep PRODUCT_ID ./examples/lighting-app/nxp/k32w/k32w0/include/CHIPProjectConfig.h
* CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID #define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID 0x4B4C
- Compila la app de iluminación:
- Si la placa de expansión OM15082 está conectada a tu placa K32W, asegúrate de establecer el argumento de compilación
chip_with_OM15082
en1
:cd examples/lighting-app/nxp/k32w/k32w0/
gn gen out/debug --args="k32w0_sdk_root="${NXP_K32W0_SDK_ROOT}" chip_with_OM15082=1 chip_with_ot_cli=0 is_debug=false chip_crypto="platform" chip_with_se05x=0 chip_pw_tokenizer_logging=true chip_enable_ota_requestor=false"
ninja -C out/debug
- Si la placa de expansión OM15082 no está conectada, omite el argumento de compilación
chip_with_OM15082
:
Ten en cuenta que Pigweed tokenizer, un módulo pigweed que permite generar hashes de strings para reducir en gran medida el flash necesario para los registros, se habilita más arriba mediante la configuración decd examples/lighting-app/nxp/k32w/k32w0/
gn gen out/debug --args="k32w0_sdk_root="${NXP_K32W0_SDK_ROOT}" chip_with_ot_cli=0 is_debug=false chip_crypto="platform" chip_with_se05x=0 chip_pw_tokenizer_logging=true chip_enable_ota_requestor=false"
ninja -C out/debug
chip_pw_tokenizer_logging
entrue
. Se necesitará la secuencia de comandos del detokenizador para analizar las secuencias de comandos con hash. Obtén más información aquí.
- Si la placa de expansión OM15082 está conectada a tu placa K32W, asegúrate de establecer el argumento de compilación
Para usuarios de macOS (omite este paso si NO usas MacOS):
Abre la secuencia de comandos
sign_images.sh
(ubicada en$NXP_K32W0_SDK_ROOT/tools/imagetool/sign_images.sh
) en un editor de texto y realiza los siguientes cambios:- Quita o comenta estas líneas para resolver el error "paquete no instalado" en macOS:
is_linux_package_installed "python3" is_linux_package_installed "python3-pip"
- Corrige el argumento a la utilidad
file
("-ib
" debería ser "-Ib
"), de lo contrario, la secuencia de comandos de firma no generará un archivo.bin
en silencio:MIME_SET="$(file -ib $FILENAME)"
Cambiar a:MIME_SET="$(file -Ib $FILENAME)"
- Quita o comenta estas líneas para resolver el error "paquete no instalado" en macOS:
Firma la imagen:
chmod +x $NXP_K32W0_SDK_ROOT/tools/imagetool/sign_images.sh
$NXP_K32W0_SDK_ROOT/tools/imagetool/sign_images.sh out/debug/
Escribe en la memoria flash de la pizarra
- Inicia la línea de comandos de JLink con tu placa conectada mediante un cable USB pequeño:
JLinkExe -device K32W061 -if SWD -speed 4000 -autoconnect 1
- En la línea de comandos de JLink, ingresa el comando
erase
para borrar una imagen existente de la pizarra. Esto es necesario si ya actualizaste la placa.erase
Without any give address range, Erase Chip will be executed Erasing device... J-Link: Flash download: Total time needed: 2.878s (Prepare: 0.051s, Compare: 0.000s, Erase: 2.789s, Program: 0.000s, Verify: 0.000s, Restore: 0.037s) Erasing done. - Luego, escribe la imagen en la memoria flash del comando
loadbin
:loadbin out/debug/chip-k32w061-light-example.bin, 0
Downloading file [out/debug/chip-k32w061-light-example.bin]... J-Link: Flash download: Bank 0 @ 0x00000000: 1 range affected (586752 bytes) J-Link: Flash download: Total: 7.492s (Prepare: 0.054s, Erase: 2.738s, Program & Verify: 4.661s, Restore: 0.037s) J-Link: Flash download: Program & Verify speed: 122 KB/s O.K. - Para salir de la CLI de JLink, escribe
exit
. - Reinicia JLink:
JLinkExe -device K32W061 -if SWD -speed 4000 -autoconnect 1
- Vuelve a escribir la imagen en la memoria flash y omite el comando
erase
esta vez:loadbin out/debug/chip-k32w061-light-example.bin, 0
Downloading file [out/debug/chip-k32w061-light-example.bin]... J-Link: Flash download: Bank 0 @ 0x00000000: 1 range affected (586752 bytes) J-Link: Flash download: Total: 7.492s (Prepare: 0.054s, Erase: 2.738s, Program & Verify: 4.661s, Restore: 0.037s) J-Link: Flash download: Program & Verify speed: 122 KB/s O.K. - Cuando se complete el comando
loadbin
, presiona el botón SW2 en la placa de expansión para restablecer la configuración de fábrica y, luego, el botón SW4 RESET en la placa principal para comenzar a ejecutar la imagen.
Valida el ejemplo
- El dispositivo debe presentarse como un dispositivo en serie USB en la computadora. Puedes buscarlo en
/dev/
:
Puedes abrir la consola en serie con la secuencia de comandos python3 detokenizer.py, que es una secuencia de comandos que decodifica los registros con asignación de token de Pigweed de un puerto en serie. Por ejemplo, si el dispositivo está enls -la /dev/tty*
/dev/ttyACM0
:python3 ./scripts/detokenizer.py serial -i /dev/ttyACM0 -d out/debug/chip-k32w061-light-example-database.bin
- Para restablecer la configuración de fábrica de la placa, presiona el botón SW2. LED2 y LED3 parpadearán por un tiempo. Deberías ver mensajes como este en la consola en serie:
[Info]Factory Reset Triggered. Push the RESET button within 6000 ms to cancel! [Info]Device will factory reset... [Info]Performing factory reset
- Para activar o desactivar el estado de la bombilla, haz clic en el botón SW3. Debería activar o desactivar la luz LED D3.
Requisitos previos de la puesta en marcha
Antes de asignar la placa de desarrollo NXP K32W, ten en cuenta lo siguiente:
- La publicidad con BLE debe estar habilitada para que el dispositivo se pueda descubrir y poner en marcha dentro del ecosistema de Google Home. Para habilitar la publicidad de manera temporal (durante 15 minutos, según la especificación de Matter), presiona el botón USERINTERFACE.
Sin un módulo de acelerador de hardware criptográfico, es posible que la placa de desarrollo K32 no pueda completar la puesta en marcha antes de que se agote el tiempo de espera del flujo del dispositivo móvil Android. Puedes usar
adb logcat
desde una computadora conectada a tu teléfono para identificar el tiempo de espera. Cuando se agote el tiempo de espera, verás un mensaje de registro como el siguiente:Device connection failed. Error third_party/connectedhomeip/src/protocols/secure_channel/CASESession.cpp:275: CHIP Error 0x00000032: Timeout
Consulta Solución de problemas a fin de obtener más información para configurar y usar
adb
.
Próximos pasos
Cuando tu ejemplo de Matter se haya compilado correctamente, crea un proyecto de desarrollador.