1. Введение
Google OpenThread (OT) — это реализация Thread с открытым исходным кодом. Google выпустил OpenThread, чтобы сделать сетевые технологии, используемые в продуктах Google Nest, более доступными для разработчиков, чтобы ускорить разработку продуктов для подключенных домов и коммерческих зданий. Благодаря узкому уровню абстракции платформы и небольшому объему памяти OpenThread отличается высокой переносимостью. Он поддерживает как системы на кристалле (SoC), так и сетевые сопроцессоры (NCP).
Спецификация потоков определяет надежный, безопасный и маломощный протокол беспроводной связи между устройствами на основе 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 (OTBR) и двух устройств Thread, используемых в кодовая лаборатория.
Что вы узнаете
- Как создать проект OpenThread с помощью Silicon Labs Simplicity Studio IDE.
- Как собрать и прошить бинарные файлы OpenThread CLI на радиоплаты Silicon Labs.
- Как настроить Raspberry Pi 3B+ или выше в качестве пограничного маршрутизатора OpenThread (OTBR) с помощью Docker.
- Как создать сеть Thread на OTBR.
- Внеполосный ввод в эксплуатацию устройств в сети Thread.
- Как проверить связь потока между узлами с помощью команды ping.
2. Предпосылки
Аппаратное обеспечение:
- 3 радиоплаты EFR32MGxx – можно использовать любую комбинацию этих устройств. В этой лаборатории кодов используется BRD4166A в качестве RCP и два BRD4168A в качестве полнопоточных устройств.
- EFR32MG12 ( БРД 4161А , БРД 4166А , БРД 4170А, БРД 4304 А)
- ЭФР32МГ13 ( БРД 4168А )
- EFR32MG21 ( БРД 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
- GNU ARM v7.2.1
Подключите каждую основную плату Wireless Starter Kit к главному компьютеру через USB, как показано на рисунке ниже. Эти соединения позволят программировать и анализировать сеть RCP и оконечных устройств. Сначала мы будем использовать хост-компьютер для программирования BRD4166A с прошивкой ot-rcp и в конечном итоге подключим его к Raspberry Pi. При желании конечные устройства могут быть подключены к хост-компьютеру через общий Ethernet-коммутатор. Стартовые комплекты также поддерживают программирование и сетевой анализ через IPv4.
4. Настройка прошивки
Есть два способа начать работу. Оба варианта позволяют вам прошивать прошивки, которые требуются для этой кодлабы.
- Проекты: (рекомендуется) создание, сборка и запуск примера приложения. Эта опция позволяет настроить приложение в проекте. ИЛИ
- Демонстрации: (необязательно) запустите готовые демонстрации непосредственно на радиоплате для любого из примеров приложений. Пользователям рекомендуется попробовать прошивку Demos, настроенную в качестве дополнительного упражнения. Пожалуйста, обратитесь к разделу «Установка дополнительных прошивок — демонстрации» в конце этой кодовой лаборатории для получения подробной информации.
Мы будем использовать метод, основанный на проекте, для этой лаборатории кода.
Создавайте проекты на примерах
Мы создадим два проекта. Проект ot-rcp
для BRD4166A и проект ot-cli-ftd
для двух BRD4168A. Выполните следующие действия и выберите подходящий образец приложения для своей платы.
- Откройте меню « Файл » Studio и выберите « Создать» > «Мастер проектов Silicon Labs» . Откроется диалоговое окно Target, SDK и Toolchain Selection. Не изменяйте цепочку инструментов 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 , затем нажмите NEXT .
- Откроется диалоговое окно «Конфигурация проекта». Здесь вы можете переименовать свой проект, изменить расположение файла проекта по умолчанию и определить, будете ли вы ссылаться на файлы проекта или копировать их. Связанные файлы проектов указывают на SDK, и любые изменения, которые вы делаете, в конечном итоге вносятся в SDK и используются для будущих проектов. Копирование исходников проекта позволяет редактировать локальную копию проекта, чтобы файлы SDK оставались нетронутыми. « Связать sdk и скопировать исходные коды проекта » — это рекомендуемый выбор по умолчанию. Нажмите ГОТОВО .
- Откроется перспектива Simplicity IDE, а Конфигуратор проекта открыт на вкладке ОБЗОР .
Проект настраивается на вкладке « Компоненты программного обеспечения » путем установки и удаления компонентов, а также настройки установленных компонентов. Установленные компоненты проверяются. Щелкните Установленные компоненты , чтобы просмотреть отфильтрованный список компонентов, установленных примером приложения. Любые внесенные вами изменения автоматически сохраняются, а файлы проекта создаются автоматически. Ход выполнения отображается в нижнем правом углу перспективы Simplicity IDE.
Для этой демонстрации мы собираемся использовать конфигурацию по умолчанию для примеров приложений. Повторите описанные выше шаги, чтобы создать проект ot-rcp
для другой платы.
Создавайте и прошивайте проекты
Сборка и прошивка проектов ot-rcp
и ot-cli-ftd
.
- После того, как ваш проект настроен, щелкните элемент управления Build (значок молотка) на верхней панели инструментов. В качестве альтернативы вы можете щелкнуть правой кнопкой мыши проект и выбрать «Создать проект».
- Ход выполнения отображается в консоли и на полосе прогресса в правом нижнем углу. Любые ошибки или предупреждения, связанные с вашим проектом, также будут отображаться в этом окне вывода.
- Образы двоичных файлов создаются после успешной сборки проекта. Вы можете прошить двоичный образ из представления Project Explorer . Найдите файл .bin, .hex или .s37 в подкаталоге компилятора. Щелкните файл правой кнопкой мыши и выберите Flash to Device . Если у вас подключено более одного устройства, выберите устройство для программирования и нажмите OK . Откроется Flash Programmer с заполненным путем к файлу. Щелкните ПРОГРАММА .
5. Сводка по настройке прошивки
К этому моменту вы должны были создать, скомпилировать и прошить соответствующую прошивку на радиоплатах. Как только ot-rcp
будет прошит на BRD4166A, отключите его от хост-системы и подключите эту плату к Raspberry Pi.
После завершения этого раздела настройка вашего сетевого оборудования Thread будет выглядеть следующим образом.
6. Настройте последовательную консоль для устройств ot-cli-ftd.
Чтобы запустить интерфейс консоли, в проекции Simplicity IDE щелкните правой кнопкой мыши свое устройство J-Link в окне просмотра устройств / адаптеров отладки. Выберите Запустить консоль . Чтобы получить приглашение на консоли, выберите вкладку Serial 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
.
Настройка малины пи
- Убедитесь, что на вашей SD-карте установлен образ ОС Raspbian Stretch Lite или Raspbian Stretch with Desktop .
- Вы можете подключиться к Raspberry Pi по SSH или напрямую работать с Raspbian Desktop. Откройте терминал.
- Обязательно обновите свои локальные репозитории и диспетчер пакетов ( apt-get update и apt-get upgrade перед установкой 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
остается липким до тех пор, пока док-контейнер не будет должным образом закрыт (или удален). - Порт 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
Вы можете проверить окно, в котором запущен контейнер OTBR Docker, для запуска вывода журнала пограничного маршрутизатора или просмотреть журнал контейнера следующим образом:
$ 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 в нашу сеть потоков (внеполосный метод)
При внеполосном методе мы знаем всю информацию о безопасности и добавляем узел вручную. В консоли 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 с помощью Silicon Labs Simplicity Studio IDE.
- Как собрать и прошить бинарные файлы 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.
- Silicon Labs OpenThread Training — введение в OpenThread, обсуждение ввода в эксплуатацию и граничных маршрутизаторов, а также практическое упражнение по созданию сети OpenThread.
- QSG170: Silicon Labs OpenThread Quick Start Guide — подробно описывает процесс начала разработки Silicon Labs Thread.
- AN1256: Использование RCP Silicon Labs с пограничным маршрутизатором OpenThread — инструкции по сборке и установке хоста пограничного маршрутизатора Raspberry Pi
10. Установка дополнительной прошивки - Демоверсии
Демонстрационные версии — это готовые образы встроенного ПО, которые можно загрузить на совместимое устройство. Самый быстрый способ узнать, доступна ли демонстрация для вашей детали в Simplicity Studio, — это щелкнуть вашу деталь в представлении «Адаптеры отладки», а затем перейти на вкладку ПРИМЕРЫ ПРОЕКТОВ И ДЕМОНСТРАЦИОННЫХ МЕРОПРИЯТИЙ в окне запуска. Отключите фильтр «Примеры проектов» и установите флажок «Поток» в разделе «Тип технологии».
Предварительно скомпилированные демонстрационные образы приложений, поставляемые с OpenThread SDK, совместимы со следующими платами:
- БРД4161а
- БРД4166а
- БРД4168а
- БРД4180а
- БРД4304а
Этот список может быть обновлен в будущих выпусках SDK, чтобы включить в него дополнительные радиоплаты. Полный список поддерживаемых компонентов см. в примечаниях к выпуску Silicon Labs OpenThread SDK в разделе «Документация».
Запустите следующие демонстрации на соответствующих платах. Чтобы прошить, выберите свою плату в разделе «Адаптеры отладки» слева и нажмите «Выполнить» для соответствующих примеров приложений. Всплывающее окно покажет ход прошивки.
- BRD4166A: ot-rcp — это устройство будет функционировать как сопроцессор радиосвязи для пограничного маршрутизатора OT. Мы будем использовать это устройство для создания сети Thread и подключения двух других устройств в сети Thread. Будучи пограничным маршрутизатором, это устройство также действует как шлюз для устройств в сети Thread для связи через Интернет.
- Два BRD4168A: ot-cli-ftd — эти два устройства будут работать как полнопоточные устройства. Они присоединятся к сети Thread, созданной OTBR.