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 esses pacotes instalados. As etapas deste documento foram validadas com o Python 3.8.
- Faça o download e instale o SDK K32W061 MCUXpresso 2.6.9.
- Depois de criar o SDK, faça o download do pacote do SDK e o extraia 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 alternância genérico. Verifique se os jumpers JP4/JP7 estão 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 o DFU está selecionado no salto BOOT ao lado da
porta USB e conecte a placa ao computador com um minicabo USB.
- Faça o download e instale o LPCScrypt no computador.
- No MacOS, clique duas vezes no pacote para instalá-lo.
- Para Linux, acesse a pasta em que 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 de instalar o LPCScrypt, execute este script para reprogramar a
placa (substitua
<LPCScrypt_InstallDir>
pelo caminho de instalação real do LPCScrypt):<LPCScrypt_InstallDir>/scripts/program_JLINK
- Você vai ver mensagens semelhantes às mostradas abaixo. Pressione a barra de espaço para iniciar 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 placa e mude o salto BOOT de volta para NORMAL. Sua placa
agora está reconfigurada para usar o JLink para atualizar 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 precisa ser o VID de acordo com a especificação Matter ou um VID alocado para testes. O valor fornecido paraVENDOR_ID
precisa corresponder ao usado ao criar a integração Matter na 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-VID1. Confira o "PRODUCT_ID" na configuração do projeto de exemplo ("CHIPProjectConfig.h"). O valor de "PRODUCT_ID" pode permanecer igual ao padrão do exemplo ou ser alterado como desejado, mas precisa aderir às [restrições de ID do produto descritas nos Pré-requisitos](/matter/get-started#product_id). Além disso, o valor fornecido para "PRODUCT_ID" **precisa corresponder** ao usado ao [criar a integração Matter](/matter/integration/create) 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 0x4B4C1. Criar o app de iluminação: 1. **Se a placa de expansão OM15082 estiver conectada à placa K32W**, defina o argumento de build `chip_with_OM15082` como `1`:
1. **Se a placa de expansão OM15082 não estiver anexada**, omita o argumento de build `chip_with_OM15082`: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
Observe que o [tokenizer do Pigweed](https://pigweed.dev/pw_tokenizer){:target="_blank" .external} (link em inglês), que é um script pigweed, vai gerar hashs dos registros necessários para que o script de hash_true seja ativado. Com isso, o script de descriptografia do token acima vai ser ativado pelo script de decodificador. Acesse [este link](https://github.com/project-chip/connectedhomeip/tree/v1.0-branch/examples/lighting-app/nxp/k32w/k32w0#pigweed-tokenizer){:target="_blank" .external} para mais informações. 1. **Para usuários do 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 alterações: 1. Comente ou remova essas linhas para resolver o erro "pacote não instalado" no MacOS:cd 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
is_linux_package_installed "python3" is_linux_package_installed "python3-pip"1. Corrija o argumento para o utilitário `file`. Caso contrário, o script de assinatura não vai gerar silenciosamente um arquivo `.bin`:
MIME_SET="$(file -ib $FILENAME)"Mude para:
MIME_SET="$(file -Ib $FILENAME)"1. 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/
Piscar a placa
- Inicie a linha de comando do JLink com a placa conectada por um cabo mini USB:
JLinkExe -device K32W061 -if SWD -speed 4000 -autoconnect 1
- Na linha de comando JLink, insira o comando
erase
para limpar uma imagem existente na placa. Isso é necessário se você já atualizou a placa 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. - Saia da CLI JLink digitando
exit
. - Reiniciar o JLink:
JLinkExe -device K32W061 -if SWD -speed 4000 -autoconnect 1
- Atualize a imagem novamente, ignorando 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. - Depois que o comando
loadbin
for concluído, 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.
Valide o exemplo
- O dispositivo deve se apresentar como um dispositivo serial USB no
computador. Pesquise em
/dev/
:
É possível abrir o console serial com o script python3 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
piscarão juntos 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 alternar o estado da lâmpada (ligado/desligado), clique no botão SW3. Ele vai alternar o LED D3.
Pré-requisitos de comissionamento
Antes de comissionar a placa de desenvolvimento da NXP K32W, esteja ciente do seguinte:
- A publicidade de BLE precisa ser ativada para que o dispositivo possa ser descoberto e comissionado no ecossistema do Google Home. Para ativar temporariamente a publicidade (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 atinja o tempo limite no lado do dispositivo móvel Android. É possível identificar que o tempo limite foi atingido usando
adb logcat
em um computador conectado ao smartphone. Quando um tempo limite for atingido, você verá uma mensagem de registro como: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 o exemplo Matter for criado, crie um projeto de desenvolvedor.