북유럽에서 OTA 테스트

다음 안내에서는 Matter SDK의 조명 앱 예와 Nordic nRF52840 개발 보드를 함께 사용합니다.

환경 설정

이 안내는 nRF Connect 도구 모음의 Docker 기반 설치를 기반으로 합니다. Docker를 사용하지 않으려는 경우 호스트 컴퓨터에 기본적으로 nRF Connect를 설치하는 방법은 북유럽 사이트를 참조하세요.

Matter SDK 확인

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

사용할 올바른 Docker 이미지를 확인합니다. Matter SDK 지속적 통합을 위해 만든 이미지 중 하나를 사용합니다.

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

노르딕 보드를 컴퓨터에 연결합니다. 직렬 인터페이스의 USB 열거형을 확인합니다.

MacOS에서:

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

Linux의 경우 다음 중 하나를 실행합니다.

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

또는

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

이전 명령어로 수집한 정보를 사용하여 컨테이너를 실행합니다. 플래그를 전달하여 호스트 Matter SDK 폴더와 USB 직렬 인터페이스를 컨테이너에 마운트합니다.

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

Matter Docker 컨테이너 중지 및 시작

docker run 명령어를 실행할 때마다 지정된 이미지로 새 컨테이너를 만듭니다. 이렇게 하면 이전 컨테이너 인스턴스에 저장된 이전 데이터가 손실됩니다. 가끔 이렇게 하면 새로 설치를 시작할 수 있기 때문에 이러한 상황이 발생해야 합니다. 하지만 이 예에서는 세션 간에 작업 및 환경 구성을 저장하고자 할 가능성이 높습니다.

user@host> docker stop container_name

다시 실행할 준비가 되면 컨테이너를 시작하고 터미널 창을 엽니다.

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

다음을 사용하여 컨테이너에 추가 터미널 세션을 열 수 있습니다.

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

또는 다음을 사용하여 루트 세션을 시작합니다.

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

SDK 초기화

컨테이너에서 Matter SDK와 Nordic nRF52 도구 모음의 환경 변수를 초기화합니다. Matter SDK 초기화에는 몇 분 정도 걸리는 경우가 많습니다.

$ 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

빌드 및 플래시

기기의 VID 및 PID를 구성합니다.

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

대화형 메뉴 옵션에서 다음을 실행합니다.

  1. Modules --->

  2. connectedhomeip --->

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

  4. Device vendor ID (VID) 및 Device product ID (PID)를 base-10의 정수 형식으로 입력합니다.

  5. [*] Enable OTA requestor 플래그가 선택되어 있는지 확인합니다.

  6. s를 눌러 구성을 저장하고 Enter를 눌러 확인한 다음 q를 눌러 menuconfig를 종료합니다.

테스트 인증서 설정

Matter 기기 테스트 인증서 만들기의 단계에 따라 CD, DAC, PAI 인증서를 만듭니다.

기기 제작

$ west build -b nrf52840dk_nrf52840

기기 플래시

이 작업은 Docker 컨테이너가 아닌 호스트 컴퓨터에서 수행됩니다.

nRFConnect 명령줄 도구가 아직 없는 경우 다운로드하여 설치합니다.

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

호스트 또는 컨테이너에서 기기와의 터미널 연결을 엽니다. minicom 또는 GNU screen와 같이 선호하는 터미널 도구를 사용하세요.

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

user@host> screen /dev/ttyACM0 115200

OTA 이미지 만들기 및 업로드

기기를 플래시하고 나면 빌드 설정을 한 번 더 변경하여 기기 소프트웨어 버전이 증가하는 OTA 이미지를 만듭니다.

Zephyr menuconfig를 실행합니다.

$ west build -b nrf52840dk_nrf52840 -t menuconfig

대화형 메뉴 옵션에서 다음을 실행합니다.

  1. Modules -->

  2. connectedhomeip -->

  3. Connected Home over IP protocol stack -->

  4. Device Software Version2로 변경합니다.

  5. Device Software Version Stringprerelease-2로 변경합니다.

  6. s를 눌러 구성을 저장하고 Enter를 눌러 확인한 다음 q를 눌러 menuconfig를 종료합니다.

Matter OTA 번들 파일을 빌드합니다. 출력은 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

생성된 Matter OTA 번들 파일의 속성을 확인합니다.

/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

Matter SDK는 컨테이너 호스트에서 마운트되므로 OTA 이미지는 컨테이너 호스트에서도 사용할 수 있습니다. OTA 업로드 안내에 따라 OTA 이미지를 Google Home Developer Console에 업로드합니다.

기기를 커미셔닝하고 OTA 프로세스를 관찰합니다.

호스트 또는 컨테이너에서 기기와의 터미널 연결을 엽니다. minicom 또는 GNU screen와 같이 원하는 터미널을 사용합니다.

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

기기의 재설정 버튼을 눌러 부팅 로그를 확인합니다.

기기 출력에 설정한 VID 및 PID와 커미셔닝 QR 코드의 URL이 표시됩니다.

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

허브가 온라인 상태인지 확인하고 로그에 있는 링크의 QR 코드를 사용하여 Google Home app (GHA)를 통해 기기를 커미셔닝합니다.

커미셔닝 후 기기에서 활동을 기록하도록 둡니다.

기기 로그에 다음 텍스트가 표시됩니다.

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

이미지가 적용되면 기기가 재부팅됩니다. 재부팅 후 이미지의 컴파일 시간은 Developer Console에 업로드된 이미지의 컴파일 시간과 일치해야 합니다.

OTA 소프트웨어 업데이트 유효성 검사

기기 소프트웨어 버전은 Google Home 앱 (GHA)을 사용하여 확인할 수 있습니다. 기기가 시운전되면 다음 절차를 따르세요.

  1. GHA 기본 화면에서 기기 타일을 길게 누릅니다.
  2. 오른쪽 상단의 아이콘을 탭합니다.
  3. 기술 정보를 탭합니다.
  4. 소프트웨어 버전 필드를 확인합니다.

소프트웨어 버전 필드가 표시된 Google Home 앱 화면