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) и двух потоковых устройств, используемых в кодовая лаборатория.
Что вы узнаете
- Как создать проект OpenThread с помощью IDE Silicon Labs Simplicity Studio.
- Как собрать и прошить двоичные файлы OpenThread CLI на радиоплаты Silicon Labs.
- Как настроить Raspberry Pi 3B+ или более поздней версии в качестве пограничного маршрутизатора OpenThread (OTBR) с помощью Docker.
- Как создать сеть Thread на OTBR.
- Внеполосный ввод устройств в эксплуатацию в сети Thread.
- Как проверить связь потоков между узлами с помощью команды ping.
2. Предварительные условия
Аппаратное обеспечение:
- 3 радиоплаты EFR32MGxx — можно использовать любую комбинацию этих устройств. В этой лаборатории кода используется BRD4166A в качестве RCP и два BRD4168A в качестве полнопоточных устройств.
- ЭФР32МГ12 (БРД 4161А , БРД 4166А , БРД 4170А , БРД 4304 А)
- ЭФР32МГ13 (БРД 4168А )
- ЭФР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 .
- По крайней мере, один кабель Ethernet для подключения Raspberry Pi к Интернету. 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 с
- Гекко SDK 3.2.0
- ГНУ АРМ 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 OT, с которой вы работаете. Информация о пакете включает тег SDK и сборку OpenThread от Silicon Labs, например
Platform 4.0.1.0
иOpenThread 2.0.1.0 (GitHub-55af6ce2c)
. - IDE/Toolchain: набор инструментов, который будет использоваться для компиляции проекта OT. Мы используем GNU ARM.
- Откроется диалоговое окно «Выбор примера проекта». Вы увидите список примеров проектов. Используйте фильтры по типу технологии резьбы и ключевым словам для поиска конкретного примера. Обязательно запишите номер версии Gecko SDK Suite . Этот тег версии понадобится вам при настройке Raspberry Pi в качестве пограничного маршрутизатора. Выберите ot-cli-ftd , затем нажмите «ДАЛЕЕ» .
- Откроется диалоговое окно «Конфигурация проекта». Здесь вы можете переименовать свой проект, изменить местоположение файла проекта по умолчанию и определить, будете ли вы ссылаться на файлы проекта или копировать их. Связанные файлы проекта указывают на SDK, и любые внесенные вами изменения в конечном итоге вносятся в SDK и используются для будущих проектов. Копирование исходных кодов проекта позволяет редактировать локальную копию проекта, чтобы файлы SDK оставались нетронутыми. « Связать SDK и скопировать источники проекта » — это рекомендуемый вариант по умолчанию. Нажмите ЗАВЕРШИТЬ .
- Перспектива Simplicity IDE открывается с Конфигуратором проекта, открытым на вкладке ОБЗОР .
Проект настраивается на вкладке «Компоненты программного обеспечения» путем установки и удаления компонентов, а также настройки установленных компонентов. Установленные компоненты проверяются. Нажмите «Установленные компоненты» , чтобы просмотреть отфильтрованный список компонентов, установленных примером приложения. Любые внесенные вами изменения сохраняются автоматически, а файлы проекта создаются автоматически. Прогресс отображается в правом нижнем углу перспективы Simplicity IDE.
Для этой демонстрации мы собираемся использовать конфигурацию примеров приложений по умолчанию. Повторите вышеуказанные шаги, чтобы создать проект ot-rcp
для другой платы.
Сборка и прошивка проектов
Создайте и прошейте проекты ot-rcp
и ot-cli-ftd
.
- После настройки проекта щелкните элемент управления «Сборка» (значок молоточка) на верхней панели инструментов. Альтернативно вы можете щелкнуть проект правой кнопкой мыши и выбрать «Создать проект».
- Прогресс отображается в консоли и индикаторе выполнения в правом нижнем углу. Любые ошибки или предупреждения, связанные с вашим проектом, также будут отображаться в этом окне вывода.
- Двоичные образы генерируются после успешной сборки проекта. Вы можете прошить двоичный образ из представления Project Explorer . Найдите файл .bin, .hex или .s37 в подкаталоге компилятора. Щелкните файл правой кнопкой мыши и выберите «Записать на устройство» . Если у вас подключено более одного устройства, выберите устройство для программирования и нажмите «ОК» . Flash Programmer откроется с заполненным путем к файлу. Нажмите ПРОГРАММА .
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 в контейнере позволяет создавать легко развертываемые артефакты, а также быстро создавать прототипы и тестировать.
OTBR-образы Silicon Labs размещаются на Siliconlabsinc DockerHub с тегами. Каждый тег соответствует версии GSDK:
https://hub.docker.com/r/siliconlabsinc/openthread-border-router/tags
Контейнеры Docker должны использоваться с RCP, созданными с помощью Simplicity Studio 5 для данного выпуска. Убедитесь, что версия тега контейнера соответствует версии GSDK, с которой вы тестируете. Например, если ваша версия GDSK была Gecko SDK Suite v4.0.1 (140)
когда вы выбрали ot-rcp
в окне «Выбор примера проекта» , используйте образ siliconlabsinc/openthread-border-router:gsdk-4.0.1
.
Настройка Raspberry Pi
- На SD-карте обязательно прошивите образ ОС Raspbian Stretch Lite или Raspbian Stretch with Desktop .
- Вы можете подключиться к Raspberry Pi по SSH или напрямую работать с Raspbian Desktop. Откройте терминал.
- Обязательно обновите локальные репозитории и менеджер пакетов ( обновление apt-get и обновление apt-get перед установкой Docker).
Установить образ Docker
- Установите Docker на свой RPi с помощью следующей команды.
curl -sSL https://get.docker.com | sh
- После завершения вы можете изменить пользовательские настройки Docker, чтобы не требовать sudo перед каждой командой. Требуется перезагрузка.
sudo usermod -aG docker $USER
- Введите следующие команды для установки контейнеров. Обратите внимание, что с вашим RCP одновременно может работать только один контейнер Border Router. Кроме того, убедитесь, что версия Simplicity Studio GSDK соответствует правильному образу Docker . Например,
gsdk-4.0.1
:docker pull siliconlabsinc/openthread-border-router:gsdk-4.0.1
Настроить и запустить докер
- Вам необходимо настроить порт TTY, который вы хотите использовать для подключения OTBR к RCP при запуске. Найдите порт 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
После запуска докера вы можете общаться с узлом 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 консоли.
- Две консоли
ot-cli-ftd
в Simplicity Studio, настроенные как полнопоточные устройства. - Одна интерактивная оболочка
ot-ctl
на Raspberry Pi, настроенная как пограничный маршрутизатор OT.
Теперь мы готовы сформировать сеть потоков.
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
Ответ указывает на полученную полезную нагрузку и на успешную связь. Повторите процедуру, чтобы проверить связь с FTD из OTBR.
9. Поздравления
Вы создали сеть потоков!
Теперь вы знаете:
- Как создать проект OpenThread с помощью IDE Silicon Labs Simplicity Studio.
- Как собрать и прошить двоичные файлы OpenThread CLI на радиоплаты Silicon Labs.
- Как настроить Raspberry Pi 3B+ или новее в качестве пограничного маршрутизатора OpenThread (OTBR) с помощью Docker.
- Как создать сеть Thread на OTBR.
- Внеполосный ввод устройств в эксплуатацию в сети Thread.
- Как проверить связь потоков между узлами с помощью команды ping.
Дальнейшее чтение
Посетите openthread.io и GitHub , чтобы найти различные ресурсы OpenThread, в том числе:
- Поддерживаемые платформы — узнайте обо всех платформах, поддерживающих OpenThread.
- Сборка OpenThread — дополнительная информация о сборке и настройке OpenThread.
- Thread Primer — охватывает все концепции Thread, представленные в этой Codelab.
- Обучение OpenThread в Silicon Labs — введение в OpenThread, обсуждение ввода в эксплуатацию и пограничных маршрутизаторов, а также практическое упражнение по созданию сети OpenThread.
- QSG170: Краткое руководство Silicon Labs OpenThread — подробно описывает процесс начала разработки потоков Silicon Labs.
- AN1256: Использование RCP Silicon Labs с пограничным маршрутизатором OpenThread — инструкции по сборке и установке хоста пограничного маршрутизатора Raspberry Pi
10. Установка дополнительной прошивки - Демоверсии
Демо-версии — это готовые образы встроенного ПО, которые можно загрузить на совместимое устройство. Самый быстрый способ узнать, доступна ли демо-версия для вашей части в Simplicity Studio, — это щелкнуть свою часть в представлении «Адаптеры отладки», а затем перейти на вкладку ПРИМЕРЫ ПРОЕКТОВ И ДЕМО в панели запуска. Отключите фильтр «Примеры проектов» и установите флажок «Резьба» в разделе «Тип технологии».
Предварительно скомпилированные образы демонстрационных приложений, поставляемые с OpenThread SDK, совместимы со следующими платами:
- БРД4161а
- БРД4166а
- БРД4168а
- БРД4180а
- БРД4304а
Этот список может быть обновлен в будущих выпусках SDK, чтобы включить больше радиоплат. Полный список поддерживаемых компонентов см. в примечаниях к выпуску OpenThread SDK Silicon Labs в разделе «Документация».
Запустите следующие демо-версии на соответствующих платах. Чтобы выполнить прошивку, выберите свою плату в разделе «Адаптеры отладки» слева и нажмите «Выполнить», чтобы просмотреть соответствующие примеры приложений. Всплывающее окно покажет ход прошивки.
- BRD4166A: ot-rcp — это устройство будет работать как радиосопроцессор для пограничного маршрутизатора OT. Мы будем использовать это устройство для создания сети Thread и подключения двух других устройств в сети Thread. Будучи пограничным маршрутизатором, это устройство также действует как шлюз для связи устройств в сети Thread через Интернет.
- Два BRD4168A: ot-cli-ftd — эти два устройства будут работать как полнопоточные устройства. Они присоединятся к сети Thread, созданной OTBR.