As instruções a seguir usam o exemplo de app de iluminação do Matter SDK along with a Nordic nRF52840 development board.
Configuração do ambiente
Estas instruções são baseadas em uma instalação do conjunto de ferramentas nRF Connect baseada no Docker. Se você preferir não usar o Docker, as instruções para instalar o nRF Connect nativamente em um computador host estão no site do Nordic.
Confira 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 do 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, realize uma destas ações:
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 montar 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
Interrompa e inicie o contêiner do Docker Matter
Sempre que você executar um comando docker run
, criará um novo contêiner com a imagem especificada. Ao fazer isso, os dados antigos, que foram salvos em uma
instância de contêiner anterior, serão perdidos. Às vezes, é isso que você quer
que aconteça, porque permite que você comece com uma nova instalação. No entanto, neste
exemplo, é bem provável que você queira salvar suas configurações de ambiente e trabalho
entre 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 mais sessões do terminal para o 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 do Matter e as variáveis de ambiente para o conjunto de ferramentas da Nrdic nRF52. Em geral, a inicialização do SDK Matter leva 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
Criar e atualizar
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:
Modules --->
connectedhomeip --->
[*] Connected Home over IP protocol stack --->
Insira
Device vendor ID
(VID) eDevice product ID
(PID) no formato de número inteiro base-10.Verifique se a sinalização
[*] Enable OTA requestor
está selecionada.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 CD, DAC e PAI.
Criar o 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 do 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 no dispositivo usando o host ou o
contêiner. Use sua ferramenta de terminal favorita, 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 do build mais uma vez para criar uma imagem OTA com uma versão incrementada de software de dispositivo.
Inicie o Zephyr menuconfig
:
$ west build -b nrf52840dk_nrf52840 -t menuconfig
Nas opções do menu interativo:
Modules -->
connectedhomeip -->
Connected Home over IP protocol stack -->
Altere
Device Software Version
para2
.Altere
Device Software Version String
paraprerelease-2
.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 do contêiner, a imagem OTA também está disponível no host do contêiner. Faça upload da imagem OTA no Google Home Developer Console by following the OTA upload instructions.
Ative o dispositivo 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 definido, 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
Confira se o Hub está on-line e solicite o dispositivo com o Google Home app (GHA) using the QR code from the link found in the log.
Deixe o dispositivo registrar as atividades após a ativação.
Você verá o seguinte texto 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 precisa corresponder ao do upload para o Developer Console.
Validar a atualização do software OTA
A versão do software do dispositivo pode ser verificada usando o app Google Home (GHA). Depois que um dispositivo for encomendado, siga estes procedimentos:
- Toque e mantenha pressionado o bloco do dispositivo na tela principal do GHA
- Toque no ícone no canto superior direito.
- Toque em Informações técnicas.
- Verifique o campo Software version.