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

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

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

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

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

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

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

WSTK AEM

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

  1. EFR32MG12 BRD4166A Thunderboard Sense 2 , как показано слева.
  2. Два устройства EFR32MG13 BRD4168A , как показано справа.
  3. Simplicity Studio v5 установлена ​​на macOS Catalina 10.15.7 с
    1. Gecko SDK 3.2.0
    2. GNU ARM v7.2.1

BRD4168A

Подключите каждую основную плату беспроводного стартового комплекта к компьютеру через 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 OpenThread, с которой работаете. Информация о пакете включает тег SDK и сборку OpenThread от Silicon Labs, например, Platform 4.0.1.0 и OpenThread 2.0.1.0 (GitHub-55af6ce2c) .
    • IDE/Инструментарий: Инструментарий, который будет использоваться для компиляции проекта OT. Мы используем GNU ARM.

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

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

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

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

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

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

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

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

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

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

Соберите и прошейте проекты.

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

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

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

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

Окно вывода результатов сборки проекта

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

Вспышка

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

Образы 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 .

Версия GSDK

Настройка Raspberry Pi

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

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

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

Настройте и запустите Docker.

  1. Для подключения RCP-устройства к OTBR при запуске необходимо настроить порт TTY, который вы хотите использовать. Найдите порт 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

После запуска 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 консоли.

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

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

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
Идентификатор 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

Ответ указывает на получение полезной нагрузки и на то, что связь прошла успешно. Повторите процесс, чтобы отправить 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, в том числе:

10. Дополнительная настройка прошивки — Демонстрационные примеры

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

Студийные демоверсии

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

  1. BRD4161a
  2. BRD4166a
  3. BRD4168a
  4. BRD4180a
  5. BRD4304a

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

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

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