NPX

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

  1. Verifique se você tem o Python3 e esses pacotes instalados. As etapas deste documento foram validadas com o Python 3.8.
  2. Faça o download e instale o SDK K32W061 MCUXpresso 2.6.9.
  3. 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/
  4. 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
    

  5. 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):
    imagem

  1. Faça o download e instale o JLink no seu computador.
  2. 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.
    imagem
  3. Faça o download e instale o LPCScrypt no computador.
    1. No MacOS, clique duas vezes no pacote para instalá-lo.
    2. 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
  4. 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
  5. 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)
  6. 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.
    imagem

Criar a imagem

  1. Prepare o repositório:
    source ./scripts/activate.sh
  2. Instale as dependências:

    pip3 install pycrypto pycryptodome

  3. 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 para VENDOR_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-VID
1. 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 0x4B4C
1. 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`:
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
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_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:
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

  1. 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
  2. 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.
  3. 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.
  4. Saia da CLI JLink digitando exit.
  5. Reiniciar o JLink:
    JLinkExe -device K32W061 -if SWD -speed 4000 -autoconnect 1
  6. 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.
  7. 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

  1. O dispositivo deve se apresentar como um dispositivo serial USB no computador. Pesquise em /dev/:
    ls -la /dev/tty*
    É 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 em /dev/ttyACM0:
    python3 ./scripts/detokenizer.py serial -i /dev/ttyACM0 -d out/debug/chip-k32w061-light-example-database.bin
  2. 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
  3. 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:

  1. 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.
  2. 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.