1. Введение

OpenThread — это реализация с открытым исходным кодом сетевого протокола Thread® , представляющего собой надежный и безопасный протокол беспроводной ячеистой сети, разработанный для устройств Интернета вещей (IoT). OpenThread был разработан командой Nest компании Google и свободно доступен сообществу разработчиков как проект с открытым исходным кодом.
Спецификация Thread устанавливает надежный, безопасный и энергоэффективный протокол беспроводной связи для устройств с ограниченными ресурсами, которые обычно встречаются в умных домах и коммерческих зданиях. OpenThread включает в себя весь сетевой уровень, такой как IPv6, 6LoWPAN, IEEE 802.15.4 с защитой MAC, установление связи в ячеистой сети и маршрутизация в ячеистой сети.
Компания Telink интегрировала реализацию OpenThread в Zephyr RTOS, обеспечивая бесшовную совместимость с оборудованием Telink. Исходный код этой интеграции легко доступен на GitHub , а также предоставляется в виде комплекта для разработки программного обеспечения (SDK).
В этом практическом занятии вы научитесь программировать OpenThread на реальном оборудовании, создавать и управлять сетью Thread, а также обмениваться сообщениями между узлами. На изображении ниже показана аппаратная конфигурация, включающая пограничный маршрутизатор OpenThread (OTBR) и одно устройство Thread, используемое в практическом занятии.

Что вы узнаете
- Для настройки реализации OpenThread с использованием среды разработки Telink Zephyr.
- Для сборки примеров командной строки OpenThread (
ot-cli-ftdиot-rcp) и их прошивки на платы разработки Telink B91. - Для настройки маршрутизатора OpenThread Border Router (OTBR) с использованием Docker на Raspberry Pi 3B+ или более поздней версии.
- Для создания сети потоков на OTBR.
- Для добавления устройств в сеть Thread с использованием внеполосной отладки.
- Для проверки связи между узлами в сети Thread с помощью CLI.
Что вам понадобится
Аппаратное обеспечение:
- Две платы разработки B91.
- Один Raspberry Pi 3B+ или более поздней версии с образом операционной системы Raspbian.
- Компьютер под управлением Linux с как минимум двумя USB-портами.
- Коммутатор (или маршрутизатор) с подключением к интернету и несколько кабелей Ethernet.
Программное обеспечение:
- Инструмент для записи и отладки Telink — LinuxBDT.
- Инструмент для работы с последовательным портом, например, PuTTY.
- Другие инструменты, такие как Git и West.
2. Предварительные требования
Концепции потоков и интерфейс командной строки OpenThread
Перед выполнением этого задания может быть полезно ознакомиться с практическим заданием по моделированию потоков OpenThread, чтобы понять основные концепции потоков и интерфейс командной строки OpenThread.
Linux-машина
Компьютер под управлением Linux (Ubuntu v20.04 LTS или более поздняя версия) выступает в качестве машины сборки для настройки среды разработки Telink Zephyr и прошивки всех плат разработки Thread. Для выполнения этих задач компьютеру Linux необходимы два свободных USB-порта и подключение к интернету.
Подключение через последовательный порт и терминалы
Устройство можно напрямую подключить к USB-порту компьютера под управлением Linux. Кроме того, для доступа к устройствам вам понадобится программа для работы с последовательным портом.
В этом практическом занятии для управления FTD Joiner и Raspberry Pi используется терминальная программа PuTTY. В ней представлен обзор её использования, но можно также применять и другие терминальные программы.
Комплект разработчика Telink B91
Для выполнения этого лабораторного задания требуется два комплекта B91 Development Kits. На фотографии ниже показан минимально необходимый набор компонентов.

Один из этих комплектов будет использоваться в качестве RCP (радиопроцессора), а другой — в качестве FTD (полнопотокового устройства). Если у вас еще нет этого комплекта, вы можете получить более подробную информацию на официальном сайте Telink . Для работы потребуются следующие компоненты:
Индекс | Имя |
1 | Совет по развитию Telink B91 |
2 | Доска для выжигания Телинк |
3 | Антенна 2,4 ГГц |
4 | USB-кабель (USB A — mini USB) |
Raspberry Pi 3B+ или более поздней версии с образом операционной системы Raspbian.
Для выполнения этого практического задания потребуется Raspberry Pi 3B+ или более поздняя версия с образом ОС Raspbian Bullseye Lite или Raspbian Bullseye с рабочим столом . Он должен быть подключен к интернету через Ethernet и настроен как хост для OpenThread Border Router (OTBR).
Сетевое подключение
Коммутатор (или маршрутизатор) с подключением к интернету и несколько кабелей Ethernet. Они используются для подключения Raspberry Pi к машине под управлением Linux, что облегчает настройку Raspberry Pi пользователем через хост.
LinuxBDT
Инструмент Telink Burning and Debugging Tool (BDT) , применимый ко всем сериям чипов Telink, позволяет стирать и прошивать микропрограмму OpenThread на отладочные платы Telink B91. Установите версию linuxBDT для Linux (на базе X86) на свой компьютер с Linux.
Другие
- Git используется для настройки среды разработки Telink Zephyr.
- Уэст отвечает за управление проектом Zephyr и сборку бинарных файлов OpenThread.
3. Настройка прошивки
Настройка среды разработки Telink Zephyr
На компьютере с Linux откройте терминал командной строки и выполните следующие команды, чтобы убедиться, что ваша APT обновлена.
$ sudo apt update $ sudo apt upgrade
После этого перейдите к следующим шагам.
- Установите зависимости.
В настоящее время Zephyr требует минимальных версий основных зависимостей, таких как CMake (3.20.0), Python3 (3.6) и Devicetree Compiler (1.4.6).$ wget https://apt.kitware.com/kitware-archive.sh $ sudo bash kitware-archive.sh $ sudo apt install --no-install-recommends git cmake ninja-build \ gperf ccache dfu-util device-tree-compiler python3-dev python3-pip \ python3-setuptools python3-tk python3-wheel xz-utils file make gcc \ gcc-multilib g++-multilib libsdl2-dev
Перед тем как переходить к следующим шагам, проверьте установленные версии в вашей системе. Если версии указаны неверно, переключитесь на стабильное и актуальное зеркало APT или обновите эти зависимости вручную.$ cmake --version $ python3 --version $ dtc --version
- Установите запад.
Убедитесь, что$ pip3 install --user -U west $ echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc $ source ~/.bashrc
~/.local/binдобавлен в переменную среды$PATH. - Получите исходный код проекта Zephyr.
$ west init ~/zephyrproject $ cd ~/zephyrproject $ west update $ west blobs fetch hal_telink $ west zephyr-export
- Установите дополнительные зависимости Python для Zephyr.
$ pip3 install --user -r ~/zephyrproject/zephyr/scripts/requirements.txt
- Настройте инструментарий Zephyr. Загрузите инструментарий Zephyr (около 1–2 ГБ) в локальную директорию, чтобы иметь возможность прошивать большинство плат.
Загрузите Zephyr SDK и поместите его в рекомендуемый путь, как показано ниже.$ wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/zephyr-sdk-0.16.1_linux-x86_64.tar.xz $ wget -O - https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/sha256.sum | shasum --check --ignore-missing
Где [-xyz] — необязательный текст, который может быть любым, например, -0.16.1. После установки SDK каталог нельзя переместить. Затем установите набор инструментов Zephyr.$HOME/zephyr-sdk[-x.y.z] $HOME/.local/zephyr-sdk[-x.y.z] $HOME/.local/opt/zephyr-sdk[-x.y.z] $HOME/bin/zephyr-sdk[-x.y.z] /opt/zephyr-sdk[-x.y.z] /usr/zephyr-sdk[-x.y.z] /usr/local/zephyr-sdk[-x.y.z]
$ tar xvf zephyr-sdk-0.16.1_linux-x86_64.tar.xz $ cd zephyr-sdk-0.16.1 $ ./setup.sh -t riscv64-zephyr-elf -h -c
- Создайте пример "Hello World". Сначала убедитесь в правильности официальной конфигурации проекта Zephyr, используя пример "Hello World", а затем переходите к настройке собственного проекта.
Используйте команду West build для сборки примера hello_world из корневого каталога репозитория Zephyr. Файл прошивки с именем$ cd ~/zephyrproject/zephyr $ west build -p auto -b tlsr9518adk80d samples/hello_world
zephyr.binнаходится вbuild/zephyr directory. - Добавьте скрипт среды Zephyr в файл
~/.bashrc. Выполните следующие команды.$ echo "source ~/zephyrproject/zephyr/zephyr-env.sh" >> ~/.bashrc $ source ~/.bashrc
- Добавьте удалённый репозиторий Telink Zephyr. Загрузите репозиторий Telink локально как ветку разработки и обновите его.
$ cd ~/zephyrproject/zephyr $ git remote add telink-semi https://github.com/telink-semi/zephyr $ git fetch telink develop $ git checkout develop $ west update $ west blobs fetch hal_telink
Для получения более подробной информации вы можете обратиться к руководству по началу работы с Zephyr Doc .
Настройка Telink LinuxBDT
Загрузите инструмент Telink LinuxBDT и распакуйте его в локальную директорию на вашем компьютере с Linux, например, в домашний каталог ~ , чтобы иметь возможность прошить микропрограмму на плату разработки B91.
$ cd ~ $ wget http://wiki.telink-semi.cn/tools_and_sdk/Tools/BDT/LinuxBDT.tar.bz2 $ tar -vxf LinuxBDT.tar.bz2
Подключите плату для прошивки к компьютеру под управлением Linux через USB-интерфейс, а затем введите следующие команды.
$ cd LinuxBDT $ sudo ./bdt lsusb -v Bus 002 Device 001: ID 1d6b:0003 xHCI Host Controller Bus 001 Device 003: ID 0bda:565a Integrated_Webcam_HD Bus 001 Device 023: ID 413c:301a Dell MS116 USB Optical Mouse Bus 001 Device 037: ID 248a:826a Telink Web Debugger v3.6 Bus 001 Device 001: ID 1d6b:0002 xHCI Host Controller
Если вы видите сообщение "Telink Web Debugger v3.6", это означает, что программист BDT успешно подключился к машине под управлением Linux.
Компиляция прошивки
В этом практическом занятии мы создадим два типа прошивки OpenThread:
-
ot-cli-ftd, - и
ot-rcp.
Методы компиляции следующие:
- Радиокопроцессор (
ot-rcp)$ cd ~/zephyrproject $ rm -rf build_ot_coprocessor $ west build -b tlsr9518adk80d -d build_ot_coprocessor zephyr/samples/net/openthread/coprocessor -- -DDTC_OVERLAY_FILE="usb.overlay" -DOVERLAY_CONFIG=overlay-rcp-usb-telink.conf
- Полнофункциональное устройство Thread с интерактивной командной строкой (
ot-cli-ftd)$ cd ~/zephyrproject $ rm -rf build_ot_cli_ftd $ west build -b tlsr9518adk80d -d build_ot_cli_ftd zephyr/samples/net/openthread/cli -- -DOVERLAY_CONFIG=overlay-telink-fixed-mac.conf -DCONFIG_OPENTHREAD_FTD=y
Прошивка
Подключите плату разработки B91 к плате для прошивки с помощью USB-кабеля, как показано на рисунке ниже.

Для прошивки микропрограммы выполните следующие команды в командной строке (на примере прошивки микропрограммы ot-cli-ftd ).
$ cd ~/zephyrproject/build_ot_cli_ftd/zephyr $ cp zephyr.bin ~/LinuxBDT/bin/ot-cli-ftd.bin $ cd ~/LinuxBDT $ sudo ./bdt 9518 ac Activate OK! $ sudo ./bdt 9518 wf 0 -i bin/ot-cli-ftd.bin EraseSectorsize... Total Time: 2181 ms Flash writing... [100%][-] [##################################################] File Download to Flash at address 0x000000: 491700 bytes Total Time: 30087 ms
Метод прошивки для ot-rcp в основном такой же, как и для ot-cli-ftd . Однако есть различия в путях и названиях прошивок.
После прошивки различите две платы разработки B91, соответственно пометив их. Плату, прошитую ot-cli-ftd обозначьте как "FTD Joiner", а плату, прошитую ot-rcp как "RCP".
4. Настройте последовательную консоль для устройства FTD Joiner.
Как показано на рисунке, подключите FTD Joiner непосредственно к USB-порту компьютера под управлением Linux.

После подключения устройства FTD Joiner к компьютеру под управлением Linux откройте PuTTY. Затем создайте новый терминал, укажите информацию о последовательном порте и откройте его.

Справочник по командной строке OpenThread находится здесь: Справочник по CLI OpenThread . Обязательно добавляйте префикс ot ко всем командам.
Примеры:
> ot state disabled Done > ot channel 11 Done >
5. Настройте Raspberry Pi в качестве пограничного маршрутизатора OpenThread.
Маршрутизатор OpenThread Border Router — это устройство, состоящее из двух основных частей:
- Raspberry Pi содержит все необходимые сервисы и микропрограммное обеспечение для работы в качестве пограничного маршрутизатора (BR).
- RCP отвечает за обмен данными между потоками.
Радиокопроцессор (RCP)
Для прошивки микропрограммы ot-rcp выполните те же действия, что и при прошивке микропрограммы ot-cli-ftd . Подключите плату разработки B91 к USB-порту Raspberry Pi, как показано на рисунке ниже.

Raspberry Pi
- Убедитесь, что образ операционной системы Raspbian Bullseye Lite или Raspbian Bullseye с рабочим столом корректно записан на SD-карту.
- У вас есть возможность либо подключиться к Raspberry Pi по SSH, либо работать напрямую с операционной системой Raspbian. В этом практическом занятии будет использоваться SSH.
- Прежде чем переходить к установке OTBR Docker на следующем шаге, убедитесь, что вы сначала обновили локальный репозиторий и менеджер пакетов.
$ sudo apt-get update $ sudp apt-get upgrade
Установите Docker.
Если вы на предыдущем шаге просто обновили локальный репозиторий и менеджер пакетов APT, перезагрузите Raspberry Pi, а затем откройте окно SSH-терминала.
- Установите Docker:
$ curl -sSL https://get.docker.com | sh
- Добавьте текущую учетную запись в группу Docker, чтобы предоставить необходимые права доступа, и вам не придется добавлять
sudoперед каждой командой. Для вступления изменений в силу необходимо перезагрузить Raspberry Pi.$ sudo usermod -aG docker $USER
- Если Docker не запущен, запустите его:
$ sudo dockerd
- Скрипты брандмауэра OTBR генерируют правила внутри контейнера Docker. Перед этим выполните
modprobeдля загрузки модуля ядра iptables.$ sudo modprobe ip6table_filter
Настройка и запуск Docker
В этом практическом задании используется образ Docker OTBR, напрямую загруженный из Docker Hub OpenThread . Этот образ был протестирован и проверен командой OpenThread.
- Загрузите последнюю версию образа:
$ docker pull openthread/otbr:latest
- Проверьте список образов в контейнере Docker:
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE openthread/otbr latest db081f4de15f 6 days ago 766MB
- Определите имя последовательного порта устройства RCP, проверив
/dev;ttyACM0указывает на правильное подключение RCP.$ ls /dev/tty* ... /dev/ttyACM0 ...
- При первом запуске Docker-контейнера OTBR укажите последовательный порт RCP (
ttyACM0). Для продолжения использования Docker-контейнера OTBR выполните команду `docker start otbr` .$ docker run --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 openthread/otbr --radio-url spinel+hdlc+uart:///dev/ttyACM0
- Откройте новое окно SSH-терминала, чтобы проверить соединение между Raspberry Pi и RCP.
$ docker exec -ti otbr sh -c "sudo ot-ctl" > state disabled Done
Дополнительные команды Docker:
- Получите информацию о запущенном контейнере Docker:
$ docker ps -aq
- Остановить Docker-контейнер OTBR:
$ docker stop otbr
- Удалите Docker-контейнер OTBR:
$ docker rm otbr
- Перезагрузите Docker-контейнер OTBR:
$ docker restart otbr
На этом этапе устройство FTD Joiner и модуль OTBR готовы, и вы можете перейти к следующему шагу — построению сети Thread.
6. Создайте сеть потоков.
Создание сети потоков в RCP
Для создания сети Thread мы используем оболочку ot-ctl на OTBR. Если вы вышли из оболочки в предыдущем разделе, введите следующую команду, чтобы запустить ее снова в SSH-терминале:
$ docker exec -ti otbr sh -c "sudo ot-ctl"
Далее введите команды в порядке, указанном в таблице, и убедитесь, что каждый шаг приводит к ожидаемому результату, прежде чем переходить к следующему.
Индекс | Командование | Введение | Ожидаемый ответ | ||
1 | | Создайте новый набор данных случайной сети. | Сделанный | ||
2 | | Зафиксируйте новый набор данных в активном операционном наборе данных в энергонезависимой памяти. | Сделанный | ||
3 | | Активируйте интерфейс IPv6. | Сделанный | ||
4 | | Включите работу протокола Thread и подключитесь к сети Thread. | Сделанный | ||
Подождите 10 секунд, пока интерфейс потока не заработает. | |||||
5 | | Проверьте состояние устройства. Эту команду можно вызывать несколько раз, пока она не станет ведущей и не перейдет к следующему шагу. | лидер | ||
6 | | Проверьте полный набор активных оперативных данных и запишите сетевой ключ. | Временная метка активности: 1 | ||
Ключ сети, сгенерированный случайным образом программой OTBR во время создания сети, будет использоваться при подключении устройств ot-cli-ftd к этой сети Thread.
Добавьте соединитель FTD в поток с помощью внеполосного ввода в эксплуатацию.
Внеполосная настройка подразумевает передачу сетевых учетных данных устройствам, ожидающим подключения к сети, не связанным с беспроводной связью (например, путем ручного ввода в интерфейсе командной строки OpenThread). Введите следующие команды в указанном порядке в последовательной консоли устройства FTD Joiner.
Индекс | Командование | Введение | Ожидаемые ответы | ||
1 | | Для подключения устройства к сети Thread достаточно лишь сетевого ключа. | Сделанный | ||
2 | | Зафиксируйте новый набор данных в активном операционном наборе данных в энергонезависимой памяти. | Сделанный | ||
3 | | Активируйте интерфейс IPv6. | Сделанный | ||
4 | | Включите работу протокола Thread и подключитесь к сети Thread. | Сделанный | ||
Подождите 20 секунд, пока устройство подключится и настроится. | |||||
5 | | Проверьте состояние устройства. | дочерний/маршрутизатор | ||
Топология
Введите в SSH-терминале такие команды, как ipaddr , child table , router table чтобы получить ответы, подобные приведенным ниже фрагментам кода.
> ipaddr rloc fd8c:60bc:a98:c7ba:0:ff:fe00:b000 Done > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|D|N|Ver|CSL|QMsgCnt|Suprvsn| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+---+---+-------+-------+------------------+ | 1 | 0xb001 | 240 | 23 | 3 | 51 |1|1|1| 3| 0 | 0 | 129 | 82bc12fbe783468e | Done > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | Link | +----+--------+----------+-----------+-------+--------+-----+------------------+------+ | 44 | 0xb000 | 63 | 0 | 0 | 0 | 0 | 7ae354109d611f7e | 0 | Done ... > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|D|N|Ver|CSL|QMsgCnt|Suprvsn| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+---+---+-------+-------+------------------+ Done > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | Link | +----+--------+----------+-----------+-------+--------+-----+------------------+------+ | 33 | 0x8400 | 63 | 0 | 3 | 3 | 13 | e61487c1cda940a6 | 1 | | 44 | 0xb000 | 63 | 0 | 0 | 0 | 0 | 7ae354109d611f7e | 0 | Done
Значение RLOC16 у OTBR равно 0xb000 , а значение RLOC16 у FTD Joiner изначально равно 0xb001 . Затем RLOC16 у FTD Joiner становится 0x8400 после получения идентификатора маршрутизатора. Видно, что FTD Joiner был преобразован из дочернего узла в маршрутизатор.
В текущей сети Thread содержится два узла, а топология показана на рисунке ниже.

7. Взаимодействие между нитевидными устройствами
Связь ICMPv6
Для проверки возможности обмена данными между устройствами Thread в одной сети мы используем команду ping . Сначала используем команду ipaddr для получения количества строк кода (RLOC) устройства.
> ipaddr fd8c:60bc:a98:c7ba:0:ff:fe00:fc11 fdbd:7274:649c:1:1d19:9613:f705:a5af fd8c:60bc:a98:c7ba:0:ff:fe00:fc10 fd8c:60bc:a98:c7ba:0:ff:fe00:fc38 fd8c:60bc:a98:c7ba:0:ff:fe00:fc00 fd8c:60bc:a98:c7ba:0:ff:fe00:b000 # Routing Locator (RLOC) fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6 fe80:0:0:0:78e3:5410:9d61:1f7e Done
Для выполнения операции ping введите следующую команду в последовательной консоли устройства FTD Joiner.
> ot ping fd8c:60bc:a98:c7ba:0:ff:fe00:b000 16 bytes from fd8c:60bc:a98:c7ba:0:ff:fe00:b000: icmp_seq=1 hlim=64 time=19ms 1 packets transmitted, 1 packets received. Packet loss = 0.0%. Round-trip min/avg/max = 19/19.0/19 ms. Done
Ответ последовательного порта указывает на то, что сторона OTBR получила запрос ping, а FTD Joiner получил ответ ping, возвращенный OTBR. Связь между двумя устройствами успешна.
UDP-коммуникация
Сервисы приложений, предоставляемые OpenThread, также включают UDP. Вы можете использовать API UDP для передачи информации между узлами в сети Thread или для передачи информации во внешние сети через Border Router. Подробное описание API UDP OpenThread приведено в примере использования CLI OpenThread — UDP . В этом практическом занятии будут использованы некоторые из API этого примера для передачи информации между OTBR и FTD Joiner.
Сначала получите Mesh-Local EID устройства OTBR. Этот адрес также является одним из IPv6-адресов устройства Thread, и его можно использовать для доступа к устройствам Thread в том же сетевом разделе Thread.
> ipaddr mleid fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6 Done
Введите следующие команды в SSH-терминале, чтобы включить OTBR UDP и привязать порт 1022 устройства.
> udp open Done > udp bind :: 1022 Done
Введите следующие команды в последовательной консоли и включите UDP для FTD Joiner. Привяжите порт 1022 устройства, а затем отправьте 5-байтовое hello сообщение на OTBR.
> ot udp open Done > ot udp bind :: 1022 Done > ot udp send fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6 1022 hello Done
Терминал SSH выводит следующую информацию: OTBR получает сообщение hello от FTD Joiner, что означает успешное UDP-соединение.
> 5 bytes from fd8c:60bc:a98:c7ba:9386:63cf:19d7:5a61 1022 hello
8. Поздравляем!
Вы создали простую сеть Thread и проверили обмен данными внутри этой сети.
Теперь вы знаете:
- Как создать и использовать среду разработки Telink Zephyr.
- Как собрать бинарные файлы
ot-cli-ftdиot-rcp, а также прошить их на платы разработки Telink B91. - Как настроить Raspberry Pi 3B+ или более позднюю версию в качестве пограничного маршрутизатора OpenThread (OTBR) с использованием Docker.
- Как создать сеть потоков в OTBR.
- Как добавить устройства в сеть Thread с помощью внеполосной настройки.
- Как проверить связь между узлами в сети Thread.
Дополнительная литература
Посетите openthread.io и GitHub , чтобы узнать о различных ресурсах OpenThread, в том числе:
- Поддерживаемые платформы — узнайте обо всех платформах, поддерживающих OpenThread.
- Сборка OpenThread — подробная информация о сборке и настройке OpenThread.
- Введение в потоки — охватывает все концепции потоков, представленные в этом практическом занятии.
Справочные документы: