Создайте сеть Thread с помощью плат Silicon Labs EFR32 и OpenThread с помощью Simplicity Studio v5.

1. Введение

26b7f4f6b3ea0700.png

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) и двух потоковых устройств, используемых в кодовая лаборатория.

Настройка оборудования EFR32MG

Что вы узнаете

  • Как создать проект OpenThread с помощью IDE Silicon Labs Simplicity Studio.
  • Как собрать и прошить двоичные файлы OpenThread CLI на радиоплаты Silicon Labs.
  • Как настроить Raspberry Pi 3B+ или более поздней версии в качестве пограничного маршрутизатора OpenThread (OTBR) с помощью Docker.
  • Как создать сеть Thread на OTBR.
  • Внеполосный ввод устройств в эксплуатацию в сети Thread.
  • Как проверить связь потоков между узлами с помощью команды ping.

2. Предварительные условия

Аппаратное обеспечение:

  1. 3 радиоплаты EFR32MGxx — можно использовать любую комбинацию этих устройств. В этой лаборатории кода используется BRD4166A в качестве RCP и два BRD4168A в качестве полнопоточных устройств.
    • ЭФР32МГ12 (БРД 4161А , БРД 4166А , БРД 4170А , БРД 4304 А)
    • ЭФР32МГ13 (БРД 4168А )
    • ЭФР32МГ21 (БРД 4180А , БРД 4180Б )
    Если вы начинаете с нуля, вы можете приобрести один из стартовых комплектов EFR32 Thread , в который входят платы, перечисленные выше.
  2. BRD4001A: Главные платы беспроводного стартера (WSTK) для размещения плат радиосвязи. За исключением BRD4166A, всем радиоплатам требуется основная плата стартера. Кабели Mini USB для подключения и питания основных плат или кабель micro USB для BRD4166A.

ВСТК АЭМ

  1. Raspberry Pi 3B+ или более поздней версии с образом ОС Raspbian Stretch Lite или Raspbian Stretch с рабочим столом , подключенным к Интернету через Ethernet. Мы настраиваем его как пограничный маршрутизатор OT.
  2. Хост-система Windows/Linux/Mac как минимум с двумя портами USB и подключением к Интернету. Проверьте требования к оборудованию и ОС на странице SSv5 .
  3. По крайней мере, один кабель 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 была создана с использованием

  1. EFR32MG12 BRD4166A Thunderboard Sense 2, как показано слева.
  2. Два EFR32MG13 BRD4168A, как показано справа.
  3. Simplicity Studio v5, установленная на macOS Catalina 10.15.7 с
    1. Гекко SDK 3.2.0
    2. ГНУ АРМ v7.2.1

БРД4168А

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

Соединения

4. Настройка прошивки

Есть два способа начать. Оба варианта позволяют прошивать прошивки, необходимые для этой лаборатории.

  1. Проекты: (рекомендуется) Создайте, соберите и запустите образец приложения. Эта опция позволяет настроить приложение в проекте.ИЛИ
  2. Демонстрации: (дополнительно) Загрузите готовые демо-версии прямо на радиоплату для любого из примеров приложений. Пользователям рекомендуется попробовать настройку демо-прошивки в качестве дополнительного упражнения. Подробности см. в разделе «Настройка дополнительной прошивки — Демонстрации» в конце этой лаборатории.

Для этой лаборатории кода мы будем использовать метод на основе проектов.

Создавайте проекты на примерах

Мы создадим два проекта. Проект ot-rcp для BRD4166A и проект ot-cli-ftd для двух BRD4168A. Пожалуйста, выполните следующие действия и выберите подходящий образец приложения для вашей платы.

  1. Откройте меню «Файл » 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.

Мастер создания нового проекта

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

Мастер создания нового проекта, шаг 2

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

Мастер создания нового проекта, шаг 3

  1. Перспектива Simplicity IDE открывается с Конфигуратором проекта, открытым на вкладке ОБЗОР .

Обзор проекта

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

Программные компоненты

Для этой демонстрации мы собираемся использовать конфигурацию примеров приложений по умолчанию. Повторите вышеуказанные шаги, чтобы создать проект ot-rcp для другой платы.

Сборка и прошивка проектов

Создайте и прошейте проекты ot-rcp и ot-cli-ftd .

  1. После настройки проекта щелкните элемент управления «Сборка» (значок молоточка) на верхней панели инструментов. Альтернативно вы можете щелкнуть проект правой кнопкой мыши и выбрать «Создать проект».

Кнопка «Создать проект»

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

Окно вывода сборки проекта

  1. Двоичные образы генерируются после успешной сборки проекта. Вы можете прошить двоичный образ из представления Project Explorer . Найдите файл .bin, .hex или .s37 в подкаталоге компилятора. Щелкните файл правой кнопкой мыши и выберите «Записать на устройство» . Если у вас подключено более одного устройства, выберите устройство для программирования и нажмите «ОК» . Flash Programmer откроется с заполненным путем к файлу. Нажмите ПРОГРАММА .

Вспышка

5. Обзор настройки прошивки

На этом этапе вы должны создать, скомпилировать и прошить соответствующую прошивку на радиоплатах. После прошивки ot-rcp на BRD4166A отключите его от хост-системы и подключите эту плату к Raspberry Pi.

После завершения работы с этим разделом настройка сетевого оборудования Thread будет выглядеть следующим образом.

Настройка EFR32MG

6. Настройте последовательную консоль для устройств ot-cli-ftd.

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

Вид консоли FTD Studio

Вы заметите, что у нас пока нет консоли для 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 .

Версия GSDK

Настройка Raspberry Pi

  1. На SD-карте обязательно прошивите образ ОС Raspbian Stretch Lite или Raspbian Stretch with Desktop .
  2. Вы можете подключиться к Raspberry Pi по SSH или напрямую работать с Raspbian Desktop. Откройте терминал.
  3. Обязательно обновите локальные репозитории и менеджер пакетов ( обновление apt-get и обновление apt-get перед установкой Docker).

Установить образ Docker

  1. Установите Docker на свой RPi с помощью следующей команды.
    curl -sSL https://get.docker.com | sh
    
  2. После завершения вы можете изменить пользовательские настройки Docker, чтобы не требовать sudo перед каждой командой. Требуется перезагрузка.
    sudo usermod -aG docker $USER
    
  3. Введите следующие команды для установки контейнеров. Обратите внимание, что с вашим RCP одновременно может работать только один контейнер Border Router. Кроме того, убедитесь, что версия Simplicity Studio GSDK соответствует правильному образу Docker . Например, gsdk-4.0.1 :
    docker pull siliconlabsinc/openthread-border-router:gsdk-4.0.1
    

Настроить и запустить докер

  1. Вам необходимо настроить порт TTY, который вы хотите использовать для подключения OTBR к RCP при запуске. Найдите порт TTY вашего устройства RCP. Самый простой способ сделать это — найти запись /tty/dev ... после подключения RCP. Обычно это должно быть /dev/ttyUSB0 или /dev/ttyACM0 .
  2. Запустите установку 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 консоли.

  1. Две консоли ot-cli-ftd в Simplicity Studio, настроенные как полнопоточные устройства.
  2. Одна интерактивная оболочка ot-ctl на Raspberry Pi, настроенная как пограничный маршрутизатор OT.

Теперь мы готовы сформировать сеть потоков.

8. Создайте сеть потоков

Настроить RCP

Чтобы создать сеть, мы начинаем с оболочки ot-ctl на OTBR, которая используется для связи с узлом RCP. Введите следующие команды в порядке, показанном ниже:

Индекс

Команда

Описание команды

Ожидаемый ответ

1

dataset init new

Создайте новую конфигурацию сети.

Сделанный

2

dataset commit active

Зафиксируйте новый набор данных в активном рабочем наборе данных.

Сделанный

3

ifconfig up

Включите интерфейс потока.

Сделанный

4

thread start

Включите и прикрепите операцию протокола Thread.

Сделанный

Подождите 10 секунд, пока интерфейс потока заработает.

5

state

Проверьте состояние устройства. Это должен быть лидер.
Другие возможные состояния: оффлайн, отключено, отсоединено,
ребенок, маршрутизатор или лидер

Лидер
Сделанный

6

dataset

Просмотрите конфигурацию сети.
Ваши значения будут отличаться от этой кодовой лаборатории.
Запишите канал, ключ сети,
имя сети и PAN ID.

Временная метка активности: 1
Канал: 20
Маска канала: 0x07fff800
Внешний идентификатор PAN: 39ba71f7fc367160
Локальный префикс сетки: fd5c:c6b:3a17:40b9::/64
Сетевой ключ: 81ae2c2c17368d585dee71eaa8cf1e90
Сетевое имя: OpenThread-008c
ИДЕНТИФИКАТОР ПАН: 0x008c
PSKc: c98f0193d4236025d22dd0ee614e641f
Политика безопасности: 0, onrcb
Сделанный

Мы будем использовать номер канала и сетевой ключ в ot-cli-ftd чтобы объединить два FTD в эту сеть потоков.

Настройте и добавьте FTD в нашу сеть Thread (внеполосный метод)

При использовании внеполосного метода мы знаем всю информацию о безопасности и добавляем узел вручную. В консолях Simplicity добавьте оба FTD в нашу сеть, используя следующие команды в порядке, показанном ниже.

Индекс

Команда

Описание команды

Ожидаемый ответ

1

dataset channel 20

Установите канал, используемый OTBR.

Сделанный

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

Для подключения устройства к сети Thread требуется только сетевой ключ.

Сделанный

3

dataset commit active

Зафиксируйте новый набор данных в активном рабочем наборе данных.

Сделанный

4

ifconfig up

Включите интерфейс потока.

Сделанный

5

thread start

Включите и прикрепите операцию протокола Thread.

Сделанный

Подождите 20 секунд, пока устройство подключится и настроится.

6

state

Просмотрите конфигурацию сети.

ребенок
Сделанный

Связь между устройствами 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, в том числе:

10. Установка дополнительной прошивки - Демоверсии

Демо-версии — это готовые образы встроенного ПО, которые можно загрузить на совместимое устройство. Самый быстрый способ узнать, доступна ли демо-версия для вашей части в Simplicity Studio, — это щелкнуть свою часть в представлении «Адаптеры отладки», а затем перейти на вкладку ПРИМЕРЫ ПРОЕКТОВ И ДЕМО в панели запуска. Отключите фильтр «Примеры проектов» и установите флажок «Резьба» в разделе «Тип технологии».

Студийные демо

Предварительно скомпилированные образы демонстрационных приложений, поставляемые с OpenThread SDK, совместимы со следующими платами:

  1. БРД4161а
  2. БРД4166а
  3. БРД4168а
  4. БРД4180а
  5. БРД4304а

Этот список может быть обновлен в будущих выпусках SDK, чтобы включить больше радиоплат. Полный список поддерживаемых компонентов см. в примечаниях к выпуску OpenThread SDK Silicon Labs в разделе «Документация».

Запустите следующие демо-версии на соответствующих платах. Чтобы выполнить прошивку, выберите свою плату в разделе «Адаптеры отладки» слева и нажмите «Выполнить», чтобы просмотреть соответствующие примеры приложений. Всплывающее окно покажет ход прошивки.

  1. BRD4166A: ot-rcp — это устройство будет работать как радиосопроцессор для пограничного маршрутизатора OT. Мы будем использовать это устройство для создания сети Thread и подключения двух других устройств в сети Thread. Будучи пограничным маршрутизатором, это устройство также действует как шлюз для связи устройств в сети Thread через Интернет.
  2. Два BRD4168A: ot-cli-ftd — эти два устройства будут работать как полнопоточные устройства. Они присоединятся к сети Thread, созданной OTBR.