В приведенных ниже инструкциях используется пример приложения для управления освещением из SDK Matter и отладочная плата 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
Запустите контейнер, используя информацию, полученную с помощью предыдущей команды. Передайте флаги, чтобы подключить папку SDK хоста Matter и последовательный интерфейс 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
Или запустите сеанс root, используя:
user@host> docker exec -u 0 -it container_name /bin/bash
Инициализируйте SDK
В контейнере инициализируйте SDK Matter и переменные среды для набора инструментов Nordic nRF52. Инициализация SDK Matter часто занимает несколько минут.
cd /workspacegit submodule update --init --recursivesource ./scripts/bootstrap.shsource ./scripts/activate.shexport ZEPHYR_BASE=/opt/NordicSemiconductor/nrfconnect/zephyrexport 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/nrfconnectwest build -b nrf52840dk_nrf52840 -t menuconfigВ интерактивном меню:
Modules --->connectedhomeip --->[*] Connected Home over IP protocol stack --->Введите значения
Device vendor ID(VID) иDevice product ID(PID) в десятичном формате.Убедитесь, что выбран флаг
[*] Enable OTA requestor.Нажмите s, чтобы сохранить конфигурацию, нажмите Ввод для подтверждения, а затем 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, чтобы сохранить конфигурацию, нажмите Ввод для подтверждения, а затем q, чтобы выйти из
menuconfig.
Создайте новый файл пакета OTA Matter. Выходные данные будут сохранены в файле 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.binMagic: 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
Поскольку SDK Matter монтируется из хоста контейнера, образ OTA также доступен на хосте контейнера. Загрузите образ OTA на устройство Google Home Developer Console, следуя инструкциям по загрузке OTA.
Инициализируйте устройство и наблюдайте за процессом обновления по беспроводной сети.
Откройте терминальное подключение к устройству на хосте или в контейнере. Используйте любой терминал, например minicom или GNU screen:
minicom -c on -D /dev/ttyACM0 115200Нажмите кнопку сброса на устройстве, чтобы посмотреть журналы с момента загрузки.
В выходных данных устройства должны быть указаны заданные вами VID и PID, а также URL QR-кода для инициализации:
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
Убедитесь, что центр управления подключен к интернету, и настройте устройство с помощью Google Home app (GHA), используя QR-код из ссылки в журнале.
После ввода в эксплуатацию оставьте устройство регистрировать действия.
В журнале устройства должен появиться следующий текст:
/* 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.
Как проверить обновление ПО по беспроводной сети
Версию ПО устройства можно проверить в приложении Google Home. После того как устройство будет введено в эксплуатацию, выполните следующие действия:
- Нажмите и удерживайте фрагмент устройства на главном экране GHA.
- Нажмите на значок в правом верхнем углу.
- Нажмите Техническая информация.
- Проверьте поле Версия ПО.