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

1. Введение

26b7f4f6b3ea0700.png

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

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

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

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

2. Предпосылки

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

  1. 3 радиоплаты EFR32MGxx – можно использовать любую комбинацию этих устройств. В этой лаборатории кодов используется BRD4166A в качестве RCP и два BRD4168A в качестве полнопоточных устройств.
    • EFR32MG12 (БРД 4161А , БРД 4166А , БРД 4170А , БРД 4304 А)
    • ЭФР32МГ13 (БРД 4168А )
    • EFR32MG21 (БРД 4180А , БРД 4180Б )
    Если вы начинаете с нуля, вы можете получить один из стартовых комплектов резьбы EFR32 , в котором есть платы, перечисленные выше.
  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. GNU ARM v7.2.1

БРД4168А

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

Соединения

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

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

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

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

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

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

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

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

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

Шаг 2 мастера создания нового проекта

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

Шаг 3 мастера создания нового проекта

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

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

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

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

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

Создавайте и прошивайте проекты

Сборка и прошивка проектов ot-rcp и ot-cli-ftd .

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

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

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

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

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

Вспышка

5. Сводка по настройке прошивки

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

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

EFR32MG настроен

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

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

Вид консоли студии 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 .

Версия GSDK

Настройка малины пи

  1. Убедитесь, что на вашей SD-карте установлен образ ОС Raspbian Stretch Lite или Raspbian Stretch with Desktop .
  2. Вы можете подключиться к Raspberry Pi по SSH или напрямую работать с Raspbian Desktop. Откройте терминал.
  3. Обязательно обновите свои локальные репозитории и диспетчер пакетов ( apt-get update и apt-get upgrade перед установкой 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 остается липким до тех пор, пока док-контейнер не будет должным образом закрыт (или удален).
    • Порт 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 консоли.

  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.

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

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

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

При внеполосном методе мы знаем всю информацию о безопасности и добавляем узел вручную. В консоли 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 с помощью Silicon Labs Simplicity Studio IDE.
  • Как собрать и прошить бинарные файлы 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, чтобы включить в него дополнительные радиоплаты. Полный список поддерживаемых компонентов см. в примечаниях к выпуску Silicon Labs OpenThread SDK в разделе «Документация».

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

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