1. Введение

OpenThread (OT) от Google — это реализация Thread с открытым исходным кодом. Google выпустила OpenThread, чтобы сделать сетевую технологию, используемую в продуктах Google Nest, более доступной для разработчиков, что позволит ускорить разработку продуктов для «умного дома» и коммерческих зданий. Благодаря узкому уровню абстракции платформы и небольшому объему используемой памяти, OpenThread обладает высокой переносимостью. Он поддерживает как системы на кристалле (SoC), так и сетевые сопроцессоры (NCP).
Спецификация Thread определяет надежный, безопасный и энергоэффективный протокол беспроводной связи между устройствами на основе IPv6 для использования в жилых и коммерческих зданиях.
Компания Silicon Labs усовершенствовала OpenThread для работы с оборудованием Silicon Labs. Исходный код доступен на GitHub , а также в виде комплекта разработки программного обеспечения (SDK), устанавливаемого вместе с Simplicity Studio 5 (SSv5). SDK включает в себя полностью протестированную версию исходного кода с GitHub. Он поддерживает более широкий спектр оборудования, чем версия с GitHub, и включает документацию и примеры приложений, недоступные на GitHub.
В этом руководстве описано, как начать разработку приложений OpenThread с использованием Silicon Labs OpenThread SDK и Simplicity Studio 5. На изображении ниже показаны платы (BRD) и аппаратная конфигурация с маршрутизатором OT Border Router (OTBR) и двумя устройствами Thread, используемыми в практическом задании.

Что вы узнаете
- Как создать проект OpenThread с помощью интегрированной среды разработки Silicon Labs Simplicity Studio.
- Как собрать и прошить бинарные файлы OpenThread CLI на радиоплаты Silicon Labs.
- Как настроить Raspberry Pi 3B+ или более позднюю версию в качестве пограничного маршрутизатора OpenThread (OTBR) с использованием Docker.
- Как создать сеть потоков на OTBR.
- Внеполосная настройка устройств в сети Thread.
- Как проверить обмен данными между узлами с помощью команды ping.
2. Предварительные требования
Аппаратное обеспечение:
- Три радиоплаты EFR32MGxx — можно использовать любую комбинацию этих устройств. В данной практической работе используется BRD4166A в качестве RCP и две BRD4168A в качестве полнопоточных устройств.
- EFR32MG12 (BRD 4161A , BRD 4166A , BRD 4170A , BRD 4304 A)
- EFR32MG13 (BRD 4168A )
- ЭФР32МГ21 (БРД 4180А , БРД 4180Б )
- BRD4001A: Беспроводные стартовые платы (WSTK) для размещения радиоплат. За исключением BRD4166A, для всех радиоплат требуется отдельная стартовая плата. Для подключения и питания плат используются кабели Mini USB или кабель micro USB для BRD4166A.

- Для работы требуется Raspberry Pi 3B+ или более поздняя версия с образом ОС Raspbian Stretch Lite или Raspbian Stretch с рабочим столом , подключенный к интернету по Ethernet. Мы настраиваем его как пограничный маршрутизатор OT.
- Для работы требуется хост-система под управлением Windows/Linux/Mac с как минимум двумя портами USB и подключением к интернету. Проверьте требования к оборудованию и ОС на сайте SSv5 .
- Для подключения Raspberry Pi к Интернету потребуется как минимум один кабель Ethernet. WSTK также поддерживают отладку и прошивку по IP, поэтому при необходимости можно использовать дополнительные кабели Ethernet для подключения WSTK к вашей хост-системе через коммутатор Ethernet.
Программное обеспечение:
- Simplicity Studio v5 установлена и обновлена на хост-системе Windows/Linux/Mac с помощью
- Инструментарий GNU ARM
- Gecko SDK Suite 3.2.0 или более поздней версии и Silicon Labs OpenThread SDK.
3. Настройка оборудования
Этот Codelab был создан с использованием
- EFR32MG12 BRD4166A Thunderboard Sense 2 , как показано слева.
- Два устройства EFR32MG13 BRD4168A , как показано справа.
- Simplicity Studio v5 установлена на macOS Catalina 10.15.7 с
- Gecko SDK 3.2.0
- GNU ARM v7.2.1


Подключите каждую основную плату беспроводного стартового комплекта к компьютеру через USB, как показано на изображении ниже. Эти соединения позволят программировать и анализировать сеть RCP и конечных устройств. Сначала мы будем использовать компьютер для программирования BRD4166A с помощью прошивки ot-rcp, а затем подключим её к Raspberry Pi. При желании конечные устройства можно подключить к компьютеру через обычный коммутатор Ethernet. Стартовые комплекты также поддерживают программирование и анализ сети по протоколу IPv4.

4. Настройка прошивки
Есть два способа начать. Оба варианта позволяют прошить необходимые для этой практической работы микропрограммы.
- Проекты: (Рекомендуется) Создайте, соберите и загрузите пример приложения. Этот вариант позволяет настроить приложение в проекте. ИЛИ
- Демонстрационные примеры: (Необязательно) Прошейте предварительно собранные демонстрационные примеры непосредственно на плату радиомодуля для любого из примеров приложений. Пользователям рекомендуется попробовать установить прошивку для демонстрационных примеров в качестве дополнительного упражнения. Подробности см. в разделе «Установка прошивки — Демонстрационные примеры» в конце этого руководства.
Для этой практической работы мы будем использовать проектный метод.
Создавайте проекты, используя примеры.
Мы создадим два проекта: проект ot-rcp для BRD4166A и проект ot-cli-ftd для двух плат BRD4168A. Пожалуйста, выполните следующие шаги и выберите подходящее демонстрационное приложение для вашей платы.
- Откройте меню «Файл» в Studio и выберите «Создать» > «Мастер проектов Silicon Labs» . Откроется диалоговое окно «Выбор целевой платформы, SDK и набора инструментов». Не изменяйте набор инструментов Simplicity IDE / GNU, поддерживаемый OpenThread по умолчанию. Нажмите «Далее» .
- Целевые платы: Отображает выбранную радиоплату (BRD4168A) вместе с основной платой (BRD4001A).
- Целевое устройство: В этом поле отображается микроконтроллер (MCU), установленный на плате. В плате BRD4168A установлен микроконтроллер EFR32MG13.
- SDK: Здесь вы можете выбрать версию SDK OpenThread, с которой работаете. Информация о пакете включает тег SDK и сборку OpenThread от Silicon Labs, например,
Platform 4.0.1.0иOpenThread 2.0.1.0 (GitHub-55af6ce2c). - IDE/Инструментарий: Инструментарий, который будет использоваться для компиляции проекта OT. Мы используем GNU ARM.

- Откроется диалоговое окно выбора примера проекта. Вы увидите список примеров проектов. Используйте фильтры по типу технологии потоков и ключевым словам, чтобы найти конкретный пример. Обязательно запишите номер версии Gecko SDK Suite . Этот тег версии понадобится вам при настройке Raspberry Pi в качестве пограничного маршрутизатора. Выберите ot-cli-ftd , затем нажмите ДАЛЕЕ .

- Открывается диалоговое окно «Конфигурация проекта». Здесь вы можете переименовать свой проект, изменить местоположение файлов проекта по умолчанию и определить, будете ли вы создавать ссылки на файлы проекта или копировать их. Связанные файлы проекта указывают на SDK, и любые внесенные вами изменения будут отражаться в SDK и использоваться в будущих проектах. Копирование исходных файлов проекта позволяет редактировать локальную копию проекта, так что файлы SDK остаются нетронутыми. « Создать ссылки на SDK и скопировать исходные файлы проекта » — это вариант по умолчанию и рекомендуемый вариант. Нажмите «ГОТОВО» .

- В окне Simplicity IDE открывается перспектива, при этом в окне Project Configurator появляется вкладка OVERVIEW .

Настройка проекта осуществляется на вкладке «Компоненты программного обеспечения» путем установки и удаления компонентов, а также настройки установленных компонентов. Установленные компоненты отмечены галочкой. Нажмите «Установленные компоненты» , чтобы увидеть отфильтрованный список компонентов, установленных в примере приложения. Все внесенные изменения автоматически сохраняются, и файлы проекта генерируются автоматически. Ход выполнения отображается в правом нижнем углу окна Simplicity IDE.

Для этой демонстрации мы будем использовать конфигурацию по умолчанию из примеров приложений. Повторите описанные выше шаги, чтобы создать проект ot-rcp для вашей другой платы.
Соберите и прошейте проекты.
Соберите и прошейте проекты ot-rcp и ot-cli-ftd .
- После настройки проекта нажмите кнопку «Сборка» (значок молотка) на верхней панели инструментов. Также вы можете щелкнуть правой кнопкой мыши по проекту и выбрать «Собрать проект».

- Ход выполнения отображается в консоли , а в правом нижнем углу — индикатор выполнения. Любые ошибки или предупреждения, связанные с вашим проектом, также будут отображаться в этом окне вывода.

- Образы бинарных файлов генерируются после успешной сборки проекта. Вы можете прошить бинарный образ из окна обозревателя проектов . Найдите файл .bin, .hex или .s37 в подкаталоге компилятора. Щелкните правой кнопкой мыши файл и выберите «Прошить на устройство» . Если у вас подключено несколько устройств, выберите устройство для программирования и нажмите «ОК» . Откроется программатор прошивок с заполненным путем к файлу. Нажмите «ПРОГРАММИРОВАТЬ» .

5. Сводка по настройке прошивки
К этому моменту вы должны были создать, скомпилировать и прошить соответствующую прошивку на платы радиомодуля. После того, как ot-rcp будет прошит на BRD4166A, отсоедините её от хост-системы и подключите эту плату к Raspberry Pi.
После завершения этого раздела ваша сетевая конфигурация Thread будет выглядеть следующим образом.

6. Настройка последовательной консоли для устройств ot-cli-ftd.
Чтобы запустить консольный интерфейс, в окне Simplicity IDE щелкните правой кнопкой мыши по вашему устройству J-Link в окне «Устройства / Адаптеры отладки». Выберите «Запустить консоль» . Чтобы получить приглашение командной строки в консоли, выберите вкладку «Последовательный порт 1» и нажмите Enter . Проверьте состояние узла FTD.

Вы заметите, что у нас пока нет консоли для ot-rcp . На следующем шаге мы настроим Raspberry Pi в качестве пограничного маршрутизатора OT и создадим консоль для ot-rcp .
7. Настройте Raspberry Pi в качестве пограничного маршрутизатора.
Компания Silicon Labs рекомендует развертывать Docker-контейнеры вместе с OTBR. Запуск OTBR в контейнере позволяет создавать легко развертываемые артефакты, а также ускорять разработку прототипов и тестирование.
Образы Silicon Labs OTBR размещены на DockerHub-сервере siliconlabsinc с тегами. Каждый тег соответствует версии GSDK:
https://hub.docker.com/r/siliconlabsinc/openthread-border-router/tags
Для работы с RCP-проектами, созданными с помощью Simplicity Studio 5 для конкретной версии, необходимо использовать контейнеры Docker. Убедитесь, что версия тега контейнера соответствует версии GSDK, с которой вы проводите тестирование. Например, если при выборе ot-rcp в окне выбора примера проекта ваша версия GDSK была Gecko SDK Suite v4.0.1 (140) , используйте образ siliconlabsinc/openthread-border-router:gsdk-4.0.1 .

Настройка Raspberry Pi
- Убедитесь, что на вашу SD-карту записан образ ОС Raspbian Stretch Lite или Raspbian Stretch с рабочим столом .
- Вы можете подключиться к Raspberry Pi по SSH или работать непосредственно с операционной системой Raspbian. Откройте терминал.
- Обязательно обновите локальные репозитории и менеджер пакетов (выполните команды apt-get update и apt-get upgrade перед установкой Docker).
Установите образ Docker.
- Установите Docker на свой Raspberry Pi с помощью следующей команды.
curl -sSL https://get.docker.com | sh
- После завершения вы можете изменить настройки пользователя Docker, чтобы команда sudo не требовалась перед каждой командой. Требуется перезагрузка.
sudo usermod -aG docker $USER
- Выполните следующие команды для установки контейнеров. Обратите внимание, что одновременно в вашем RCP может работать только один контейнер Border Router. Также убедитесь, что версия GSDK Simplicity Studio соответствует правильному образу Docker . Например,
gsdk-4.0.1:docker pull siliconlabsinc/openthread-border-router:gsdk-4.0.1
Настройте и запустите Docker.
- Для подключения RCP-устройства к OTBR при запуске необходимо настроить порт TTY, который вы хотите использовать. Найдите порт TTY вашего RCP-устройства. Самый простой способ сделать это — проверить наличие записи в файле
/tty/dev... после подключения RCP-устройства. Обычно это либо/dev/ttyUSB0, либо/dev/ttyACM0. - Запустите установку Docker с помощью следующей команды. Убедитесь, что вы заменили имя образа Docker на соответствующую версию GSDK. Например,
gsdk-4.0.1:docker run -d --name "otbr" \ --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" \ -p 8080:80 --dns=127.0.0.1 -it \ --volume /dev/ttyACM0:/dev/ttyACM0 \ --privileged siliconlabsinc/openthread-border-router:gsdk-4.0.1 \ --radio-url spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=460800 \ --backbone-interface eth0
-
-dгарантирует, что контейнер будет работать в отсоединенном режиме. - Вы можете в любое время просмотреть журналы работы контейнера, используя команду
docker logs. -
--nameбудет сохраняться до тех пор, пока контейнер Docker не будет должным образом закрыт (или удален). - Порт 8080 указывает порт веб-сервера, на котором размещена страница управления пограничным маршрутизатором.
-
?uart-baudrate=460800необходим в параметрах URL радиомодуля для обхода проблем фрагментации/сборки пакетов через UART, особенно при выполнении ресурсоемких операций, таких как DTLS с длинными пакетами IPv6.
-
Взаимодействовать с узлом RCP
После запуска Docker вы можете взаимодействовать с узлом RCP через интерактивную оболочку, используя эту команду. Проверьте состояние узла RCP.
$ docker exec -ti otbr sh -c "sudo ot-ctl" > state disabled Done
Вы можете получить список идентификаторов запущенных контейнеров.
$ docker ps -aq
Вы можете проверить окно запущенного контейнера Docker OTBR, чтобы увидеть журнал работы пограничного маршрутизатора, или проследить за журналом контейнера следующим образом:
$ docker logs [container-id] -f
При желании вы можете остановить, удалить или принудительно завершить работу образа, если контейнер Docker загружен корректно.
$ docker stop otbr
$ docker rm otbr
$ docker kill otbr
Дополнительно: Для выхода из оболочки используйте CNTL + C.
К этому моменту у вас должно быть 3 консоли.
- В Simplicity Studio отображаются две консоли
ot-cli-ftd, настроенные как устройства с полным потоком данных. - Одна интерактивная оболочка
ot-ctlна Raspberry Pi, настроенная как пограничный маршрутизатор OT.
Теперь мы готовы сформировать сеть Thread.
8. Создайте сеть потоков.
Настройка RCP
Для создания сети начнём с оболочки ot-ctl на OTBR, которая используется для связи с узлом RCP. Введите следующие команды в указанном ниже порядке:
Индекс | Командование | Описание команды | Ожидаемый ответ | ||
1 | | Создайте новую конфигурацию сети. | Сделанный | ||
2 | | Зафиксируйте новый набор данных в активном операционном наборе данных. | Сделанный | ||
3 | | Включить интерфейс потоков. | Сделанный | ||
4 | | Включить и подключить работу по протоколу Thread. | Сделанный | ||
Подождите 10 секунд, пока интерфейс потока не заработает. | |||||
5 | | Проверьте состояние устройства. Оно должно быть лидером. | Лидер | ||
6 | | Просмотр конфигурации сети. | Временная метка активности: 1 | ||
Мы будем использовать номер канала и сетевой ключ на ot-cli-ftd чтобы подключить два FTD к этой сети потоков.
Настройте и добавьте FTD в нашу сеть Thread (внеполосный метод).
При использовании внеполосного метода мы знаем всю информацию о безопасности и добавляем узел вручную. В консолях Simplicity добавьте оба FTD в нашу сеть, используя следующие команды в указанном ниже порядке.
Индекс | Командование | Описание команды | Ожидаемый ответ | ||
1 | | Установите канал, используемый OTBR. | Сделанный | ||
2 | | Для подключения устройства к сети Thread требуется только сетевой ключ. | Сделанный | ||
3 | | Зафиксируйте новый набор данных в активном операционном наборе данных. | Сделанный | ||
4 | | Включить интерфейс потоков. | Сделанный | ||
5 | | Включить и подключить работу по протоколу Thread. | Сделанный | ||
Подождите 20 секунд, пока устройство подключится и настроится. | |||||
6 | | Просмотр конфигурации сети. | ребенок | ||
Взаимодействие между устройствами Thread
Для проверки возможности связи между устройствами мы воспользуемся командой ping . Для использования команды ping нам необходимы IPv6-адреса устройств. Их можно получить с помощью команды ipaddr .
> ipaddr fd5c:c6b:3a17:40b9:0:ff:fe00:fc00 # Leader Anycast Locator (ALOC) fd5c:c6b:3a17:40b9:0:ff:fe00:1800 # Routing Locator (RLOC) fd5c:c6b:3a17:40b9:84e2:bae8:bd5b:fa03 # Mesh-Local EID (ML-EID) fe80:0:0:0:c449:ca4a:101f:5d16 # Link-Local Address (LLA)
С обоих FTD выполните пинг OTBR, используя RLOC-адрес OTBR.
> ping fd5c:c6b:3a17:40b9:0:ff:fe00:1800 Done > > 16 bytes from fd5c:c6b:3a17:40b9:0:ff:fe00:1800: icmp_seq=3 hlim=64 time=30ms 16 bytes from fd5c:c6b:3a17:40b9:0:ff:fe00:1800: icmp_seq=3 hlim=64 time=52ms
Ответ указывает на получение полезной нагрузки и на то, что связь прошла успешно. Повторите процесс, чтобы отправить ping-запросы на FTD с OTBR.
9. Поздравляем!
Вы создали сеть Thread!
Теперь вы знаете:
- Как создать проект OpenThread с помощью интегрированной среды разработки Silicon Labs Simplicity Studio.
- Как собрать и прошить бинарные файлы OpenThread CLI на радиоплаты Silicon Labs.
- Как настроить Raspberry Pi 3B+ или более позднюю версию в качестве пограничного маршрутизатора OpenThread (OTBR) с использованием Docker.
- Как создать сеть потоков на OTBR.
- Внеполосная настройка устройств в сети Thread.
- Как проверить обмен данными между узлами с помощью команды ping.
Дополнительная информация
Посетите openthread.io и GitHub , чтобы найти множество ресурсов по OpenThread, в том числе:
- Поддерживаемые платформы — узнайте обо всех платформах, поддерживающих OpenThread.
- Сборка OpenThread — подробная информация о сборке и настройке OpenThread.
- Введение в потоки — охватывает все концепции потоков, представленные в этом практическом занятии.
- Обучение по OpenThread от Silicon Labs — введение в OpenThread, обсуждение ввода в эксплуатацию и пограничных маршрутизаторов, а также практическое упражнение по созданию сети OpenThread.
- QSG170: Краткое руководство по началу работы с OpenThread от Silicon Labs — подробно описывает процесс запуска разработки на платформе Silicon Labs Thread.
- AN1256: Использование Silicon Labs RCP с маршрутизатором OpenThread Border Router — Инструкции по сборке и установке хоста маршрутизатора Border Router на базе Raspberry Pi.
10. Дополнительная настройка прошивки — Демонстрационные примеры
Демонстрационные версии — это предварительно собранные образы прошивки, готовые к загрузке на совместимое устройство. Самый быстрый способ узнать, доступна ли демонстрационная версия для вашей микросхемы в Simplicity Studio, — это щелкнуть по вашей микросхеме в представлении «Адаптеры отладки», а затем перейти на вкладку «ПРИМЕРЫ ПРОЕКТОВ И ДЕМОНСТРАЦИОННЫЕ ВЕРСИИ» в перспективе запуска. Отключите фильтр «Примеры проектов» и установите флажок «Поток» в разделе «Тип технологии».

Предварительно скомпилированные образы демонстрационных приложений, поставляемые с OpenThread SDK, совместимы со следующими платами:
- BRD4161a
- BRD4166a
- BRD4168a
- BRD4180a
- BRD4304a
В будущих версиях SDK этот список может быть обновлен и дополнен новыми радиоплатами. Полный список поддерживаемых компонентов см. в примечаниях к выпуску SDK Silicon Labs OpenThread в разделе «Документация».
Прошейте следующие демонстрационные приложения на соответствующие платы. Для прошивки выберите свою плату в разделе «Отладочные адаптеры» слева и нажмите «Запустить» для соответствующих примеров приложений. Во всплывающем окне будет отображаться ход прошивки.
- BRD4166A: ot-rcp — Это устройство будет функционировать как радиопроцессор для пограничного маршрутизатора OT. Мы будем использовать это устройство для создания сети Thread и подключения двух других устройств к этой сети. Будучи пограничным маршрутизатором, это устройство также выступает в качестве шлюза для связи устройств в сети Thread через Интернет.
- Два устройства BRD4168A: ot-cli-ftd — эти два устройства будут работать как полнопоточные устройства. Они присоединятся к сети потоков, созданной OTBR.