K32W
Este exemplo funciona como um tipo de dispositivo de lâmpada com recursos de ativação/desativação. As etapas foram verificadas na placa de desenvolvimento NXP K32W (kit de desenvolvimento IOTZTB-DK006).
Configuração inicial
- Verifique se você tem o Python3 e os pacotes instalados. As etapas neste documento foram validadas com o Python 3.8.
- Faça o download e instale o K32W061 SDK MCUXpresso 2.6.9.
- Depois de criar o SDK, faça o download dele e extraia-o no diretório
principal. Defina a variável de ambiente
NXP_K32W0_SDK_ROOT
para onde você extraiu o SDK. Também recomendamos adicionar este comando ao arquivo.*rc
para o shell que você está usando, como.zshrc
:export NXP_K32W0_SDK_ROOT=$HOME/SDK_2_6_9_K32W061DK6/
Clone e inicialize o repositório 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
O exemplo usa a configuração Nó de interruptor genérico. Confira se os jumpers JP4/JP7 estão localizados na posição mais à esquerda (LPC-JN UART0):
Reconfigure a placa para o JLink
- Faça o download e instale o JLink no seu computador.
- Na placa, verifique se a DFU está selecionada no jumper BOOT ao lado da
porta USB e conecte a placa ao computador com um mini cabo USB.
- Faça o download e instale a LPCScrypt no seu computador.
- No MacOS, clique duas vezes no pacote baixado para instalá-lo.
- No Linux, acesse a pasta onde você faz o download do pacote:
chmod +x lpcscrypt-2.1.2_57.x86_64.deb.bin
./lpcscrypt-2.1.2_57.x86_64.deb.bin
- Depois que a LPCScrypt estiver instalada, execute este script para reprogramar sua
placa (substitua
<LPCScrypt_InstallDir>
pelo caminho de instalação real da LPCScrypt):<LPCScrypt_InstallDir>/scripts/program_JLINK
- Você vai ver mensagens semelhantes às abaixo. Pressione a barra de espaço para
começar a programação. Quando terminar, pressione Enter para sair.
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)
- Desconecte a tábua e volte a posição do salto para NORMAL. Sua placa agora
foi reconfigurada para usar o JLink na atualização de uma imagem.
Criar a imagem
- Prepare o repositório:
source ./scripts/activate.sh
- Instale as dependências:
pip3 install pycrypto pycryptodome
- Atualize o
VENDOR_ID
na configuração do projeto de exemplo (CHIPProjectConfig.h
). Ele deve ser o VID de acordo com o CSA Matter specification, or a VID allocated for testing purposes. The value you provide forVENDOR_ID
must match the one you use when creating the Matter integration in the 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
- Verifique o
PRODUCT_ID
na configuração do projeto de exemplo (CHIPProjectConfig.h
). O valor dePRODUCT_ID
pode permanecer o mesmo que o padrão do exemplo ou alterado conforme desejado, mas precisa aderir às restrições de ID do produto descritas nos Pré-requisitos. Observe também que o valor que você fornece paraPRODUCT_ID
precisa corresponder ao que você usa ao criar a integração Matter no 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
- Crie o app de iluminação:
- Se a placa de expansão OM15082 estiver conectada à sua placa K32W, defina
o argumento de build
chip_with_OM15082
como1
: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
- Se a placa de expansão OM15082 não estiver anexada, omita o
argumento de build
chip_with_OM15082
:
O tokenizador Pigweed, que é um módulo pigweed que permite gerar hash das strings para reduzir o flash necessário para registros, é ativado acima, definindocd 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
comotrue
. O script de detokenizador será necessário para analisar os scripts com hash. Veja mais informações aqui.
- Se a placa de expansão OM15082 estiver conectada à sua placa K32W, defina
o argumento de build
Para usuários de MacOS (pule esta etapa se você NÃO estiver criando no MacOS):
Abra o script
sign_images.sh
(localizado em$NXP_K32W0_SDK_ROOT/tools/imagetool/sign_images.sh
) em um editor de texto e faça as seguintes mudanças:- Comente ou remova essas linhas para resolver o erro "pacote não instalado"
no MacOS:
is_linux_package_installed "python3" is_linux_package_installed "python3-pip"
- O argumento do utilitário
file
("-ib
" deveria ser "-Ib
") foi corrigido. Caso contrário, o script de assinatura não vai gerar um arquivo.bin
:MIME_SET="$(file -ib $FILENAME)"
Mudar para:MIME_SET="$(file -Ib $FILENAME)"
- Comente ou remova essas linhas para resolver o erro "pacote não instalado"
no MacOS:
Assine a imagem:
chmod +x $NXP_K32W0_SDK_ROOT/tools/imagetool/sign_images.sh
$NXP_K32W0_SDK_ROOT/tools/imagetool/sign_images.sh out/debug/
Atualizar o tabuleiro
- Inicie a linha de comando JLink com a placa conectada por um mini cabo USB:
JLinkExe -device K32W061 -if SWD -speed 4000 -autoconnect 1
- Na linha de comando JLink, insira o comando
erase
para excluir permanentemente uma imagem existente na placa. Isso é necessário se você já atualizou o tabuleiro antes.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. - Em seguida, atualize a imagem usando o 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. - Digite
exit
para sair da CLI do JLink. - Reinicie o JLink:
JLinkExe -device K32W061 -if SWD -speed 4000 -autoconnect 1
- Atualize a imagem novamente, pulando o comando
erase
desta 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. - Quando o comando
loadbin
terminar, pressione o botão SW2 na placa de expansão para redefinir para a configuração original e pressione o botão SW4 RESET na placa principal para começar a executar a imagem.
Validar o exemplo
- O dispositivo precisa se apresentar como um dispositivo serial USB
no computador. Você pode procurá-lo em
/dev/
:
É possível abrir o console serial com o script depythonizer detokenizer.py, que é um script que decodifica os registros tokenizados do Pigweed de uma porta serial. Por exemplo, se o dispositivo estiver emls -la /dev/tty*
/dev/ttyACM0
:python3 ./scripts/detokenizer.py serial -i /dev/ttyACM0 -d out/debug/chip-k32w061-light-example-database.bin
- Para redefinir a placa para a configuração original, pressione o botão SW2. LED2 e LED3
vão piscar por um tempo. Você verá mensagens como esta
no console serial:
[Info]Factory Reset Triggered. Push the RESET button within 6000 ms to cancel! [Info]Device will factory reset... [Info]Performing factory reset
- Para ativar ou desativar o estado da lâmpada, clique no botão SW3. Ele vai alternar o LED D3.
Pré-requisitos de comissionamento
Antes de ativar a placa de desenvolvimento NXP K32W, esteja ciente do seguinte:
- A publicidade BLE precisa estar ativada para que o dispositivo possa ser descoberto e comissionado no ecossistema do Google Home. Para ativar a publicidade temporariamente (por 15 minutos, de acordo com a especificação Matter), pressione o botão USERINTERFACE.
Sem um módulo acelerador de hardware criptográfico, a placa de desenvolvimento K32 pode não conseguir concluir o comissionamento antes que o fluxo expire no Android mobile device side. You can identify that a timeout occurred by using
adb logcat
from a computer attached to your phone. When a timeout occurs, you will see a log message like:Device connection failed. Error third_party/connectedhomeip/src/protocols/secure_channel/CASESession.cpp:275: CHIP Error 0x00000032: Timeout
Consulte Solução de problemas para mais informações sobre como configurar e usar
adb
.
Próximas etapas
Quando seu exemplo de Matter for criado, crie um projeto de desenvolvedor.