В эту эпоху Интернета вещей (IoT) мы используем различные встроенные устройства и системы для выполнения и получения данных из различных областей. Всякий раз, когда мы говорим о встроенных и IoT-устройствах, мы всегда думаем о том, какой микроконтроллер/микропроцессор мы использовали и, что наиболее важно, какую прошивку мы собираемся использовать для точного получения данных без какой-либо задержки по времени. Поэтому, когда дело доходит до задержки по времени в любом встроенном проекте IoT, мы всегда выбираем встраиваемую ОС, которая лучше подходит для этого конкретного приложения, что значительно повышает производительность нашей системы.
Встраиваемая операционная система (ОС) — это операционная система, которая разработана для эффективного использования ресурсов и надежного выполнения определенной задачи для устройства. На открытом рынке доступны различные встраиваемые ОС (например, FreeRTOS, μ-Clinux, ARMmbed, MONGOOSE-OS, RIOT-OS и т. д.). В статье мы обсудим RIOT-OS и ее разрушительные эффекты в индустрии IoT.
Если же вы приверженец FreeRTOS, то об ней есть несколько познавательных статей на нашем сайте:
- как использовать FreeRTOS в Arduino – руководство для начинающих;
- использование очередей в Arduino FreeRTOS;
- использование семафоров и мьютексов в FreeRTOS на Arduino Uno.
Что такое RIOT OS?
RIOT OS — это небольшая операционная система для встраиваемых систем. Эта ОС — бесплатная операционная система с открытым исходным кодом, выпущенная под лицензией GNU Lesser General Public License (LGPL) и разработанная сообществом «низовых» разработчиков , объединяющим компании, академические круги и любителей, распространенная по всему миру. Эта ОС поддерживает маломощные устройства IoT и различные микроконтроллеры, такие как 8-битные, 16-битные и 32-битные, и разработана для систем с ограниченной памятью с упором на маломощные беспроводные устройства IoT.
Различные функции, поддерживаемые ОС RIOT
RIOT — это дружественная ОС для приложений IoT, которая активно разрабатывается и поддерживается с 2013 года. Некоторые из ее функций включают бесплатную и открытую (LGPLv2.1) операционную систему, с помощью которой вы можете писать свой код на таких языках, как C и C++. Она имеет архитектуру Microkernel (μ-kernel) (ядро использует ~1,5 КБ ОЗУ или 32-битную архитектуру). Она имеет сверхнизкую задержку обработки прерываний и поддерживает модульную архитектуру для потоковой передачи. Она также поддерживает различные сетевые стеки, такие как 6LoWPAN, IPV6, RPL, UDP, TCP, LoRaWAN, 802.15.4, MQTT и многое другое. Она также поддерживает различные технологии PHY (такие как Bluetooth, NFC, последовательный порт, CAN и т. д.). Она также поддерживает сторонние пакеты (такие как стек lwIP, uIP, стек Open-thread). Помимо упомянутых функций, она также поддерживает различные 32-битные платформы, а также 16-битные и 8-битные платформы (например, Arduino Nano/Uno, MSP430, x86, ARM, MIPS, AVR и т. д.)
RIOT OS предоставляет различные типы исходных кодов примеров. Таким образом, мы можем легко разрабатывать наш код, используя эти примеры кодов. Но главное преимущество использования этой ОС — «кодируйте свое приложение один раз и запускайте везде», это означает, что когда мы пишем код для Arduino/ESP, этот код теперь может запускаться на другом микроконтроллере для выполнения той же операции без каких-либо изменений в коде или конфигурации.
Установка RIOT OS в системе на базе Linux
Как только мы поймем, что такое RIOT OS, нам понадобится среда настройки для разработки приложений с использованием RIOT OS. Для настройки среды RIOT OS мы рекомендуем использовать систему на базе Linux/macOS, поскольку поддержка Microsoft Windows находится в стадии разработки.
Начало работы с RIOT OS на Linux:
Итак, для начала мы используем Ubuntu 20.04.2 LTS-64bit, и для создания среды разработки нам необходимо установить необходимые компоненты перед настройкой RIOT OS.
1 |
sudo apt-get update && sudo apt-get upgrade |
1 2 3 4 |
sudo apt-get install build-essential cppcheck git make gcc pkg-config autoconf automake libtool libusb-dev libusb-1.0-0-dev libhidapi-dev libftdi-dev g++-multilib gcc-multilib python3-serial curl doxygen graphviz pcregrep python python3 python3-flake8 unzip wget |
1 2 |
sudo add-apt-repository ppa:npalix/coccinelle sudo apt-get install coccinelle |
После установки всех требований теперь мы можем настроить RIOT OS. Для этого нам нужно создать рабочую папку для загрузки и git clone последней версии RIOT OS. Для этого выполните следующие шаги:
1 2 3 4 5 6 |
cd $HOME mkdir riot_workspace cd riot_workspace/ git clone git://github.com/RIOT-OS/RIOT.git cd RIOT/ git checkout 2021.01 |
Теперь пришло время настроить Hardware Toolchain, в зависимости от оборудования, которое вы хотите использовать. Сегодня, в нашем случае, мы используем ESP8266 для демонстрации примера RIOT OS. Для ESP8266 toolchain нам нужно создать папку с именем «esp».
1 2 3 4 |
cd $HOME cd riot_workspace/ mkdir -p esp cd esp/ |
Итак, после создания папки, специфичной для оборудования, пришло время загрузить набор инструментов и кросс-компилятор для ESP8266.
Загрузите пакет компиляторов Xtensa GCC:
1 2 3 |
Mkdir -p $HOME/riot_workspace/esp cd $HOME/riot_workspace/esp git clone https://github.com/gschorcht/xtensa-esp8266-elf |
Загрузите ESP8266 RTOS SDK:
1 2 3 4 5 |
mkdir -p $HOME/riot_workspace/esp cd $HOME/riot_workspace/esp git clone https://github.com/gschorcht/RIOT-Xtensa-ESP8266-RTOS-SDK.git ESP8266_RTOS_SDK cd ESP8266_RTOS_SDK/ git checkout release/v3.1-for-riot-os-v2 |
Чтобы использовать компиляторы ESP8266 Xtensa и ESP8266 RTOS SDK, нам необходимо установить переменную среды.
[ Примечание: нам необходимо задать эти две переменные среды всякий раз, когда мы разрабатываем базовое приложение ESP8266 RIOT OS]
а) Для компилятора Xtensa GCC
1 |
export PATH=$HOME/riot_workspace/esp/xtensa-esp8266-elf/bin:$PATH |
б) Для ESP8266 RTOS SDK
1 |
export ESP8266_RTOS_SDK_DIR=$HOME/riot_workspace/esp/ESP8266_RTOS_SDK |
Соберите/прошейте пример «Hello World» для ESP8266:
После завершения установки RIOT OS & ESP8266 Toolchain, пришло время построить пример для ESP8266. Итак, нам нужно перейти в папку RIOT/examples/hello-world и задать переменные среды, упомянутые выше.
1 2 3 |
cd $HOME/riot_workspace/RIOT/examples/hello-world export PATH=$HOME/riot_workspace/esp/xtensa-esp8266-elf/bin:$PATH export ESP8266_RTOS_SDK_DIR=$HOME/riot_workspace/esp/ESP8266_RTOS_SDK |
Теперь пришло время собрать приложение. Поэтому нам нужно вызвать команду make вместе с аргументом BOARD. В нашем случае мы используем ESP8266 Dev Board, поэтому значение платы — «esp8266-esp-12x» . Если вы используете другую плату, проверьте путь [$HOME/riot_workspace/RIOT/boards] для списка поддерживаемых плат.
1 |
make BOARD=esp8266-esp-12x |
Теперь прошейте недавно собранный Hello_world Example в ESP8266. Для этого прошейте код, который нам нужен для вызова этой команды.
1 |
make BOARD=esp8266-esp-12x PORT=/dev/ttyUSB0 flash term |
[Примечание: Если возникает какая-либо ошибка типа «Permission denied: ‘/dev/ttyUSB0’», то для ее устранения вызовите эту команду «sudo chmod a+rw /dev/ttyUSB0»]
Получив сообщение «Type ‘/exit’ to exit.», нажмите кнопку «RST» на плате разработки ESP8266, чтобы вывести журнал на экран.
Преимущества использования RIOT OS во встраиваемых системах и системах на базе Интернета вещей
В настоящее время то, что мы видим, то, что мы держим, все напрямую и косвенно связано с Интернетом. Таким образом, устройства IoT легко доступны для всех, а разработка всего этого также становится легкой с помощью среды разработки RIOS OS.
Используя RIOT OS, мы можем легко настроить наш проект, нет необходимости разрабатывать другой тип сетевого устройства для завершения операции. Это также минимизирует усилия по взаимодействию человека, взаимодействуя между устройствами IoT с помощью сетевого стека RIOT OS. RIOT OS является операционной системой реального времени, поэтому она экономит время между любыми операциями, что очень важно для проектов IoT.
И, конечно, самое главное — это безопасность. Итак, RIOT OS имеет встроенную защиту транспортного уровня DTLS, шифрование IEEE 802.15.4, безопасные обновления прошивки (SUIT), несколько криптографических пакетов и криптографические элементы безопасности.