Testar o OTA na página nórdica

As instruções a seguir usam o exemplo do app de iluminação do SDK Matter com uma placa de desenvolvimento nRF52840.

Configuração do ambiente

Estas instruções são baseadas em uma instalação baseada no Docker do conjunto de ferramentas nRF Connect. Se você preferir não usar o Docker, as instruções para instalar o nRF Connect de forma nativa em um computador host estão no site Nordic.

Conferir o SDK do Matter

user@host> mkdir otaprep
user@host> cd otaprep
user@host> git clone https://github.com/project-chip/connectedhomeip.git
user@host> cd connectedhomeip/
user@host> git fetch origin v1.0-branch
user@host> git checkout FETCH_HEAD

Verifique a imagem do Docker correta a ser usada. Use uma das imagens criadas para a integração contínua do SDK Matter.

user@host> cat .github/workflows/examples-nrfconnect.yaml | grep chip-build
            image: connectedhomeip/chip-build-nrf-platform:0.5.99

Conecte a placa nórdica ao computador. Verifique a enumeração USB da interface serial:

No MacOS:

user@host> ls /dev/tty.usbmodem*
/dev/tty.usbmodem0123456789000

No Linux:

user@host> ls /dev/tty*AC*
/dev/ttyACM0

ou

user@host> ls /dev/tty*USB*
/dev/ttyUSB0

Execute um contêiner usando as informações coletadas no comando anterior. Transmita as sinalizações para ativar a pasta do SDK Matter do host e a interface serial USB no contêiner.

user@host> docker run --name container_name -it --user $(id -u):$(id -g) --mount source=$(pwd),target=/workspace,type=bind connectedhomeip/chip-build-nrf-platform:0.5.99 /bin/bash

Interromper e iniciar o contêiner do Docker do Matter

Sempre que você executar um comando docker run, você criará um novo contêiner com a imagem especificada. Ao fazer isso, seus dados antigos, que foram salvos em uma instância de contêiner anterior, são perdidos. Às vezes, é isso que você quer que aconteça, porque permite começar com uma nova instalação. Mas, neste exemplo, é provável que você queira salvar sua configuração de trabalho e ambiente entre as sessões.

user@host> docker stop container_name

Quando estiver tudo pronto para executar novamente, inicie o contêiner e abra uma janela de terminal:

user@host> docker start container_name
user@host> docker exec -it container_name /bin/bash

É possível abrir outras sessões do terminal para seu contêiner com:

user@host> docker exec -it container_name /bin/bash

Ou inicie uma sessão raiz usando:

user@host> docker exec -u 0 -it container_name /bin/bash

Inicializar o SDK

No contêiner, inicialize o SDK Matter e as variáveis de ambiente para o conjunto de ferramentas NRF52. A inicialização do SDK do Matter costuma levar vários minutos.

$ cd /workspace
$ git submodule update --init --recursive
$ source ./scripts/bootstrap.sh
$ source ./scripts/activate.sh
$ export ZEPHYR_BASE=/opt/NordicSemiconductor/nrfconnect/zephyr
$ export GNUARMEMB_TOOLCHAIN_PATH="$PW_ARM_CIPD_INSTALL_DIR"
$ scripts/run_in_build_env.sh "python3 scripts/setup/nrfconnect/update_ncs.py --update --shallow"
$ source /opt/NordicSemiconductor/nrfconnect/zephyr/zephyr-env.sh

Criação e atualização

Configure o VID e o PID do dispositivo:

$ cd examples/lighting-app/nrfconnect
$ west build -b nrf52840dk_nrf52840 -t menuconfig

Nas opções do menu interativo:

  1. Modules --->

  2. connectedhomeip --->

  3. [*] Connected Home over IP protocol stack --->

  4. Insira o Device vendor ID (VID) e o Device product ID (PID) no formato inteiro de base 10.

  5. Verifique se a sinalização [*] Enable OTA requestor está selecionada.

  6. Pressione s para salvar a configuração, Enter para confirmar e q para sair de menuconfig.

Configurar certificados de teste

Siga as etapas em Criar certificados de teste de dispositivo Matter para criar certificados de CD, DAC e PAI.

Construa seu dispositivo

$ west build -b nrf52840dk_nrf52840

Atualizar o dispositivo

Isso é feito no computador host, não no contêiner do Docker.

Se você ainda não tiver as ferramentas de linha de comando nRFConnect, faça o download e instale-as.

user@host> nrfjprog --program build/zephyr/merged.hex --chiperase -f NRF52

Abra uma conexão de terminal com o dispositivo no host ou no contêiner. Use a ferramenta de terminal que preferir, como minicom ou GNU screen.

user@host> minicom -c on -D /dev/ttyACM0 115200

user@host> screen /dev/ttyACM0 115200

Criar e fazer upload de uma imagem OTA

Depois de atualizar o dispositivo, mude as configurações de build mais uma vez para criar uma imagem OTA com uma versão incrementada de software do dispositivo.

Inicie o Zephyr menuconfig:

$ west build -b nrf52840dk_nrf52840 -t menuconfig

Nas opções do menu interativo:

  1. Modules -->

  2. connectedhomeip -->

  3. Connected Home over IP protocol stack -->

  4. Altere Device Software Version para 2.

  5. Altere Device Software Version String para prerelease-2.

  6. Pressione s para salvar a configuração, Enter para confirmar e q para sair de menuconfig.

Crie o novo arquivo de pacote OTA Matter. A saída é colocada em build/zephyr/zephyr.bin.

$ /workspace/src/app/ota_image_tool.py create -v hex_VID -p hex_PID -vn version_no -vs version_string path_to_binary -da digest_algorithm path_to_ota_file

Confirme as propriedades do arquivo de pacote OTA Matter gerado:

/workspace/examples/lighting-app/nrfconnect# /workspace/src/app/ota_image_tool.py show firmware-ota-update-test.bin
Magic: 1beef11e
Total Size: 951784
Header Size: 72
Header TLV:
  [0] Vendor Id: XXXXX (0xXXXX)
  [1] Product Id: 32768 (0x8000)
  [2] Version: 2 (0x2)
  [3] Version String: prerelease-2
  [4] Payload Size: 951696 (0xe8590)
  [8] Digest Type: 1 (0x1)
  [9] Digest: 75f2e8b0c8e922b8bb3841504190bcdd83533e936a284c7254d29327d605c930

Como o SDK Matter é montado no host de contêiner, a imagem OTA também está disponível nesse host. Faça upload da imagem OTA para Google Home Developer Console seguindo as instruções de upload OTA.

Coloque o dispositivo em funcionamento e observe o processo de OTA.

Abra uma conexão de terminal com o dispositivo no host ou no contêiner. Use seu terminal favorito, como minicom ou GNU screen:

$ minicom -c on -D /dev/ttyACM0 115200

Pressione o botão de redefinição do dispositivo para ver os registros da inicialização.

Na saída do dispositivo, você verá o VID e o PID definidos, bem como o URL do código QR de comissionamento:

I: nRF5 802154 radio initialized
I: 4 Sectors of 4096 bytes

(...)

I: 681 [SVR]Server Listening...
I: 684 [DL]Device Configuration:
I: 687 [DL]  Serial Number: 11223344556677889900
I: 692 [DL]  Vendor Id: XXXXX (0xXXXX)
I: 695 [DL]  Product Id: XXXXX (0xXXXX)
I: 699 [DL]  Hardware Version: 0
I: 702 [DL]  Setup Pin Code (0 for UNKNOWN/ERROR): 20202021
I: 708 [DL]  Setup Discriminator (0xFFFF for UNKNOWN/ERROR): 3840 (0xF00)
I: 714 [DL]  Manufacturing Date: (not set)
I: 718 [DL]  Device Type: 65535 (0xFFFF)
I: 723 [SVR]SetupQRCode: [MT:6FCJ142C00KA0648G00]
I: 727 [SVR]Copy/paste the below URL in a browser to see the QR Code:
I: 733 [SVR]https://project-chip.github.io/connectedhomeip/qrcode.html?data=MT%000000000000000000000
I: 742 [SVR]Manual pairing code: [30900112302]
I: 747 [DL]CHIP task running
I: 752 [DL]CHIPoBLE advertising started
I: 757 [DL]NFC Tag emulation started

Verifique se o Hub está on-line e use o Google Home app (GHA) para acionar o dispositivo usando o código QR do link encontrado no registro.

Deixe o dispositivo registrando as atividades após o comissionamento.

O texto a seguir vai aparecer no registro do dispositivo:

/* Hub OTA provider identification */
I: 69642 [SWU]OTA Requestor received AnnounceOTAProvider
D: 69647 [SWU]  FabricIndex: 1
D: 69649 [SWU]  ProviderNodeID: 0x00000000XXXXXXXX
D: 69654 [SWU]  VendorID: 0x6006
D: 69657 [SWU]  AnnouncementReason: 0
D: 69660 [SWU]  Endpoint: 2
...
D: 69799 [SWU]Establishing session to provider node ID 0x00000000FC843D94 on fabric index 1
...
D: 262265 [SWU]QueryImageResponse:
D: 262268 [SWU]  status: 0
D: 262271 [SWU]  imageURI: bdx://00000000FC843D94/37f09fd6-0000-0000-0000-000000000000
D: 262278 [SWU]  softwareVersion: 2
D: 262281 [SWU]  softwareVersionString: 2
D: 262285 [SWU]  updateToken: 36
D: 262288 [SWU]  userConsentNeeded: 0
D: 262292 [SWU]Update available from version 0 to 2
...
D: 262372 [SWU]Establishing session to provider node ID 0x00000000FC843D94 on fabric index 1
...
D: 262409 [SWU]BDX::SendMessage

Depois que a imagem é aplicada, o dispositivo é reinicializado. Após a reinicialização, o tempo de compilação da imagem precisará corresponder ao do upload para o Developer Console.

Validar a atualização do software OTA

A versão do software do dispositivo pode ser conferida usando o app Google Home (GHA, na sigla em inglês). Quando o dispositivo for comissionado, siga estes procedimentos:

  1. Toque e mantenha pressionado o bloco do dispositivo na tela principal do GHA
  2. Toque no ícone no canto superior direito.
  3. Toque em Informações técnicas.
  4. Verifique o campo Software version.

Tela do app Google Home mostrando o campo de versão do software