다음 안내에서는 Matter SDK의 조명 앱 예시와 Nordic nRF52840 개발 보드를 사용합니다.
환경 설정
이 안내는 nRF Connect 도구 모음의 Docker 기반 설치를 기반으로 합니다. Docker를 사용하지 않으려면 호스트 컴퓨터에 nRF Connect를 기본적으로 설치하는 방법에 관한 안내는 Nordic 사이트를 참고하세요.
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
Nordic 보드를 컴퓨터에 연결합니다. 직렬 인터페이스의 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
양방향 메뉴 옵션에서 다음을 수행합니다.
Modules --->
connectedhomeip --->
[*] Connected Home over IP protocol stack --->
Device vendor ID
(VID) 및Device product ID
(PID)를 10진 정수 형식으로 입력합니다.[*] Enable OTA requestor
플래그가 선택되어 있는지 확인합니다.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
양방향 메뉴 옵션에서 다음을 수행합니다.
Modules -->
connectedhomeip -->
Connected Home over IP protocol stack -->
Device Software Version
를2
로 변경합니다.Device Software Version String
를prerelease-2
로 변경합니다.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)을 사용하여 기기 소프트웨어 버전을 확인할 수 있습니다. 기기가 커미셔닝되면 다음 절차를 따르세요.
- GHA 기본 화면에서 기기 타일을 길게 누릅니다.
- 오른쪽 상단의 아이콘을 탭합니다.
- 기술 정보를 탭합니다.
- 소프트웨어 버전 필드를 확인합니다.