Przetestuj OTA w kraju skandynawskim

W poniższych instrukcjach użyto przykładowej aplikacji oświetleniowej z pakietu SDK Matter oraz płytki deweloperskiej Nordic nRF52840.

Konfiguracja środowiska

Te instrukcje dotyczą instalacji zestawu narzędzi nRF Connect opartej na Dockerze. Jeśli nie chcesz używać Dockera, instrukcje instalacji nRF Connect natywnie na komputerze hosta znajdziesz na stronie Nordic.

Sprawdź pakiet SDK 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

Sprawdź, czy używasz prawidłowego obrazu Dockera. Użyj jednego z obrazów utworzonych na potrzeby trybu ciągłej integracji pakietu SDK Matter.

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

Podłącz płytkę Nordic do komputera. Sprawdź numerację USB interfejsu szeregowego:

W systemie macOS:

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

W systemie Linux:

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

lub

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

Uruchom kontener, korzystając z informacji zebranych w poprzednim poleceniu. Przekaż flagi, aby podłączyć folder pakietu SDK Matter hosta i interfejs szeregowy USB do kontenera.

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

Zatrzymywanie i uruchamianie kontenera Dockera Matter

Za każdym razem, gdy uruchomisz polecenie docker run, utworzysz nowy kontener z określonym obrazem. Spowoduje to utratę starych danych, które zostały zapisane w poprzedniej instancji kontenera. Czasami jest to pożądane, ponieważ pozwala rozpocząć od nowej instalacji. W tym przykładzie prawdopodobnie chcesz zapisać swoją pracę i konfigurację środowiska między sesjami.

user@host> docker stop container_name

Gdy wszystko będzie gotowe do ponownego uruchomienia, uruchom kontener i otwórz okno terminala:

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

Możesz otworzyć dodatkowe sesje terminala w kontenerze za pomocą:

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

Możesz też rozpocząć sesję użytkownika root, używając:

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

Inicjowanie pakietu SDK

W kontenerze zainicjuj pakiet SDK Matter i zmienne środowiskowe dla zestawu narzędzi Nordic nRF52. Inicjowanie pakietu SDK Matter często trwa kilka minut.

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

Kompilowanie i flashowanie

Skonfiguruj identyfikatory VID i PID urządzenia:

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

W opcjach menu interaktywnego:

  1. Modules --->

  2. connectedhomeip --->

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

  4. Wpisz Device vendor ID (VID) i Device product ID (PID) w formacie liczby całkowitej o podstawie 10.

  5. Upewnij się, że flaga [*] Enable OTA requestor jest zaznaczona.

  6. Naciśnij S, aby zapisać konfigurację, naciśnij Enter, aby potwierdzić, a następnie naciśnij Q, aby wyjść z menuconfig.

Konfigurowanie certyfikatów testowych

Aby utworzyć certyfikaty CD, DAC i PAI, wykonaj czynności opisane w artykule Tworzenie certyfikatów testowych urządzeń Matter.

Tworzenie urządzenia

west build -b nrf52840dk_nrf52840

Flashowanie urządzenia

Należy to zrobić na komputerze hosta, a nie w kontenerze Dockera.

Jeśli nie masz jeszcze narzędzi wiersza poleceń nRFConnect, pobierz je i zainstaluj.

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

Otwórz połączenie terminala z urządzeniem na hoście lub w kontenerze. Użyj ulubionego narzędzia terminala, takiego jak minicom lub GNU screen.

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

Tworzenie i przesyłanie obrazu OTA

Po sflashowaniu urządzenia zmień ustawienia kompilacji jeszcze raz, aby utworzyć obraz OTA z nową wersją oprogramowania urządzenia.

Uruchom Zephyr menuconfig:

west build -b nrf52840dk_nrf52840 -t menuconfig

W opcjach menu interaktywnego:

  1. Modules -->

  2. connectedhomeip -->

  3. Connected Home over IP protocol stack -->

  4. Zmień Device Software Version na 2.

  5. Zmień Device Software Version String na prerelease-2.

  6. Naciśnij s, aby zapisać konfigurację, naciśnij Enter, aby potwierdzić, a następnie naciśnij q, aby wyjść z menuconfig.

Utwórz nowy plik pakietu OTA Matter. Dane wyjściowe są umieszczane w 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

Sprawdź właściwości wygenerowanego pliku pakietu OTA Matter:

/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

Pakiet SDK Matter jest podłączony z hosta kontenera, dlatego obraz OTA jest też dostępny na hoście kontenera. Prześlij obraz OTA na urządzenie Google Home Developer Console, postępując zgodnie z instrukcjami przesyłania OTA.

Uruchom urządzenie i obserwuj proces OTA.

Otwórz połączenie terminala z urządzeniem na hoście lub w kontenerze. Użyj swojego ulubionego terminala, takiego jak minicom lub GNU screen:

minicom -c on -D /dev/ttyACM0 115200

Naciśnij przycisk resetowania urządzenia, aby wyświetlić logi z uruchamiania.

W danych wyjściowych urządzenia powinny być widoczne ustawione przez Ciebie identyfikatory VID i PID oraz adres URL kodu QR do uruchomienia:

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

Upewnij się, że Twój hub jest online, i uruchom urządzenie z Google Home app (GHA), używając kodu QR z linku znalezionego w dzienniku.

Po uruchomieniu pozostaw urządzenie w trybie rejestrowania aktywności.

W dzienniku urządzenia powinien pojawić się ten tekst:

/* 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

Po zastosowaniu obrazu urządzenie zostanie ponownie uruchomione. Po ponownym uruchomieniu czas kompilowania obrazu powinien być zgodny z czasem kompilowania obrazu przesłanego do Developer Console.

Weryfikowanie aktualizacji oprogramowania OTA

Wersję oprogramowania urządzenia można sprawdzić w aplikacji Google Home (GHA). Po uruchomieniu urządzenia wykonaj te czynności:

  1. Przytrzymaj kafelek urządzenia na ekranie głównym GHA.
  2. W prawym górnym rogu kliknij ikonę .
  3. Kliknij Informacje techniczne.
  4. Sprawdź pole Wersja oprogramowania.

Ekran aplikacji Google Home z polem wersji oprogramowania