NPX

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

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 os pacotes instalados. As etapas neste documento foram validadas com o Python 3.8.
  2. Faça o download e instale o K32W061 SDK MCUXpresso 2.6.9.
  3. 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/
  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 interruptor genérico. Confira se os jumpers JP4/JP7 estão localizados na posição mais à esquerda (LPC-JN UART0):
    image

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

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 deve ser o VID de acordo com o CSA Matter specification, or a VID allocated for testing purposes. The value you provide for VENDOR_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
  4. Verifique o PRODUCT_ID na configuração do projeto de exemplo (CHIPProjectConfig.h). O valor de PRODUCT_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 para PRODUCT_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
  5. Crie o app de iluminação:
    1. Se a placa de expansão OM15082 estiver conectada à sua 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
    2. 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
      O tokenizador Pigweed, que é um módulo pigweed que permite gerar hash das strings para reduzir o flash necessário para registros, é ativado acima, definindo chip_pw_tokenizer_logging como true. O script de detokenizador será necessário para analisar os scripts com hash. Veja mais informações aqui.
  6. 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:

    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"
    2. 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)"
  7. 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

  1. Inicie a linha de comando JLink com a placa conectada por um mini cabo USB:
    JLinkExe -device K32W061 -if SWD -speed 4000 -autoconnect 1
  2. 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.
  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. Digite exit para sair da CLI do JLink.
  5. Reinicie o JLink:
    JLinkExe -device K32W061 -if SWD -speed 4000 -autoconnect 1
  6. 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.
  7. 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

  1. O dispositivo precisa se apresentar como um dispositivo serial USB no computador. Você pode procurá-lo em /dev/:
    ls -la /dev/tty*
    É 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 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 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
  3. 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:

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