Разработка для «интернета вещей»: языки программирования, операционки и каналы связи
2026-02-21 14:40 Diff

#статьи

  • 12 авг 2022
  • 0

Разработка для «интернета вещей»: языки программирования, операционки и каналы связи

Разбираемся, на чём кодят IoT, как выбрать язык программирования для проекта и что популярнее — провода или эти ваши хипстерские вайфаи.

Иллюстрация: Оля Ежак для Skillbox Media

Журналист, коммерческий автор и редактор. Пишет про IT, цифровой маркетинг и бизнес.
Сайт: darovska.com.

Интернет вещей (Internet of Things, IoT) — это когда вещи и предметы физического мира могут взаимодействовать между собой напрямую, не требуя вмешательства человека.

Простой пример — холодильник, который сам следит за количеством молока и других продуктов и делает заказ в интернет-магазине, когда они заканчиваются. Или умная колонка, которая связана с датчиками протечки, задымления и другими девайсами в вашем доме и способна управлять ими и снимать с них показания.

Архитектуру IoT-решений принято делить на четыре уровня:

  • датчики, которые собирают данные: например, датчики протечки, движения, освещения и тому подобные, подключённые к микроконтроллеру;
  • локальные шлюзы — устройства, которые передают и обеспечивают обмен данными;
  • Edge Servers — граничные серверы, которые хранят, аккумулируют и обрабатывают данные непосредственно там, где информация производится (например, это могут быть производственные помещения);
  • облачная инфраструктура.

Компании, которые занимаются разработкой IoT-устройств и решений, нередко разрабатывают как и сами устройства, так и всё ПО для всех четырёх уровней устройств. Исключение — компании, которые собирают отдельные датчики или девайсы для уже готовых экосистем и стандартов, поддерживаемых крупными вендорами. «Железо» и различные архитектуры мы почти не затронем — подробности об этой стороне IoT можно узнать в выпуске нашего подкаста «Люди и код», посвящённом микроконтроллерам.

Так как архитектура интернета вещей состоит из четырёх уровней, для программирования под каждый из них разработчики выбирают свои технологии. Согласно исследованию Eclipse Foundation от декабря 2021 года, в IoT наибольшей популярностью пользуются такие языки:

Популярность языков программирования в IoT. Из исследования Eclipse Foundation
Инфографика: Eclipse Foundation
  • Лидеры на встраиваемых устройствах и микроконтроллерах — C, C++, Java и Python.
  • Для программирования шлюзов чаще всего выбирают Python, C++, C и Java.
  • Для серверной разработки предпочтение отдают Python, Java, C++ и C.
  • В облаках — Python, Java, JavaScript, C++.

«В разработке IoT-устройств всё делается с применением стандартных подходов — подводных камней нет, и всё более-менее предсказуемо. Выбор конкретного языка программирования чаще всего зависит от удобства и принятых стандартов, но на безопасность почти не влияет».

Иван Юшков,
разработчик в сфере IoT

Примечательно, что по итогам 2021 года явным лидером стал Python — хотя за год до этого в топе был Java. Это, кстати, интересный тренд: в том же рейтинге популярности языков программирования TIOBE в 2021 году Python наконец-то сумел обойти Java и C — фактически бессменных лидеров последних десятилетий.

«Python прост в освоении и поддерживается большим отзывчивым сообществом. Его синтаксис чистый и простой, что привлекает большое количество программистов. Поэтому Python часто выбирают социологи и биологи — чтобы программировать лабораторные устройства. А ещё это предпочтительный язык для одного из самых популярных микроконтроллеров на рынке — Raspberry Pi».

Кинман Кови,
разработчик микроконтроллеров

Рост популярности Python вполне понятен: это удобный и быстрый с точки зрения написания кода язык с кучей библиотек почти под каждую задачу (особенно силён в сфере машинного обучения и работы с данными), он прекрасно взаимодействует со многими языками программирования (недаром его часто называют «клеем» среди языков программирования). Кроме того, устройства с каждым годом становятся всё мощнее и вопрос оптимизации стоит уже не так остро, как вопрос скорости разработки и поставки ПО.

Если проект простой и не требует больших вычислительных мощностей, можно использовать стандартные библиотеки Python, а вот для микроконтроллеров стоит посмотреть на пакет MicroPython — он подходит для запуска Python на небольших платах с 256 КБ памяти и 16 КБ оперативки и площадью в пару квадратных сантиметров.

Хотя вполне очевидно, почему в нише микроконтроллеров и встроенных устройств позиции Python не так прочны — здесь гораздо выше требования к скорости исполнения, энергосбережению и экономному расходованию памяти. Конечно, в таких условиях Python и MicroPython уступают более скоростным C, C++ и Java.

«В IoT существует свой набор ограничений — например, интернет-соединение в один килобит или ограничение частоты отправки сообщений. Такие ограничения возникают из-за повышенных требований к экономии ресурсов — например, может быть критично, чтобы ваше устройство было способно проработать условные 100 лет на одной батарейке».

Иван Игнатьев,
Cloud Solution Architect из Pluto Informatics

Второе место можно отдать «плюсам» — всё-таки ещё не перевелись любители пощекотать себе нервишки :) Его часто используют на одноплатных компьютерах типа Raspberry Pi — он быстрый, как C, но при этом разработка на нём, как правило, занимает меньше времени.

Сила Java — в переносимости и принципе write once, run anywhere. Если виртуальная Java-машина (JVM) поддерживает какую-то архитектуру, вы обычно можете быть уверены, что ваш код будет на ней работать так же, как и на других платформах.

Кроме того, Java — это классический ООП-язык, удобный для энтерпрайз-решений, с большим набором библиотек и инструментами для работы с безопасностью, а байт-код и сама Java-машина за долгие годы были оптимизированы и могут исполняться с достаточно хорошей скоростью.

«Какой язык использовать в проекте, зависит от юзкейсов. Например, есть задача — определить заполняемость мусорных баков в городе. Для этого внутри них ставят датчики и следят за наполнением. Датчик в этом случае должен быть как можно менее энергозатратный, так как мы не можем подключить каждый мусорный бак к розетке или регулярно ездить и менять в них батарейки. Поэтому для таких задач используются языки более низкого уровня вроде C или предназначенного для встроенных систем Java Embedded».

Иван Игнатьев,
Cloud Solution Architect из Pluto Informatics

Да, этот старичок ещё очень популярен во встраиваемых системах и в качестве средства для системного программирования — где-то в силу традиций и накопленной большой кодовой базы на C, которую пока невозможно (да часто и не нужно) перевести на более современные языки, где-то в силу его скорости и других плюсов. К тому же благодаря C разработчик может напрямую взаимодействовать с памятью и любым «железом» — не зря C называют «переносимым ассемблером».

«У меня был проект промышленного IoT с „Роснефтью“ с системой предиктивной (предсказательной) аналитики. С помощью датчиков она определяла, сколько нефти проходит через весы, а сколько попадает в хранилища, а потом анализировала, сходятся ли эти данные, нет ли издержек. Датчики весов подключались к интернету и передавали данные на сервер. Софт для них был написан на C».

Алексей Барышников,
Java-/JS-разработчик

JavaScript тоже используют в IoT. Причём не только для веб-интерфейса приложений, но и для софта серверов. А в сочетании с фреймворком Node.js — ещё и для датчиков, серверов и шлюзов на ОС Linux. Например, построить софт на Node.js удалось в микроконтроллерах производителей Espruino и Tessel.

«Если объект можно запитать от солнечной панели или другого внешнего источника, то обычно в IoT используют Python, MicroPython, JavaScript и Node.js».

Иван Игнатьев,
Cloud Solution Architect из Pluto Informatics

Этого языка (как и последующих) нет в топе исследования, однако он часто упоминается в связи с IoT. Фишка языка — он специально был разработан для поддержки средств описания данных, у него есть особый фреймворк Node.lua, то есть порт, или аналог, Node.js в LUA-мире, к тому же построенный на облегчённом интерпретаторе LUA.

У Go богатая стандартная библиотека, отличная работа с параллелизмом из коробки, и его популярность в мире постоянно растёт.

«Golang в основном заменяет JavaScript/Node.js для серверных HTTP-приложений. На мой взгляд, он гораздо лучше JavaScript. Golang можно использовать и в других компонентах IoT, но, по моему опыту, он для этого не очень подходит. Часть кода используется в высокоуровневых программах, а часть должна работать на низком уровне — ближе к „железу“. В IoT хватает и того, и другого.

И вот для низкоуровневой работы Go практически не годится. Он некрасиво обрабатывает данные, а использование указателей — так и вообще устаревший подход. Короче говоря, для работы с протоколами он не подходит. Конечно, даже несмотря на это в подобных задачах он ещё лучше Java, но гораздо хуже C. А если вас пугает сложность C и вы думаете, чем бы его заменить, — лучше обратите внимание на Julia».

JP Norair,
IoT-разработчик, комментарий на Quora

Это особая версия PHP для работы с чипами. Удобна для тех, кто уже знает PHP и хочет заняться интернетом вещей. Плюс в этом диалекте из коробки есть средства, полезные для разработки под IoT. К тому же более 90% серверов в мире по-прежнему работают на PHP, поэтому этот язык также популярен в интернете вещей и применяется для управления микросервисами на базе Linux.

Swift используется для создания приложений для умных устройств в экосистеме Apple. У Swift собственные библиотеки для платформы HomeKit, которая обеспечивает поддержку интеграции каналов данных из сети совместимых устройств.

Использование операционных систем, как и в случае языков программирования, определяется тем, с какой частью архитектуры вы работаете (но надо понимать, что для уровня микроконтроллеров и встраиваемых устройств операционная система — необязательный компонент).

Во встраиваемых устройствах, шлюзах и микроконтроллерах самым популярным выбором является Linux (в основном урезанные или специфические версии — из «обычных» линуксов более-менее популярен разве что CentOS). Linux — гибкая и свободная ОС, которую можно «доработать напильником» практически под любые нужды, которая умеет запускаться на множестве разных архитектур. Плюс у него огромное сообщество и куча готового софта почти под любые задачи (разве что с Photoshop и Microsoft Office проблемы — но кому они нужны в IoT).

«Для всего, что можно воткнуть в розетку, существует операционная система Linux. В качестве use case может быть определение безопасности закрытия дверей в поезде. Для этого используют обычные компьютеры, которые соединены с датчиками по проводу или с помощью Bluetooth.Чтобы эта система работала, нужно полноценное питание и интернет-соединение. Приложения для умного дома можно писать на чём угодно — в серверных используют файрволы, роутеры и хранилища App Storage для загрузки файлов. Для написания приложений существует множество open-source-проектов, в основном построенных на PHP».

Иван Игнатьев,
Cloud Solution Architect из Pluto Informatics

За Linux следует FreeRTOS — операционка реального времени, созданная специально под микроконтроллеры. А значит, она умеет экономно использовать даже самые скромные ресурсы. Особенность систем реального времени — они заранее гарантируют, что задача будет выполнена в конкретные сроки. То есть работают максимально предсказуемо, что особенно важно для обработки критических запросов в военной или космической промышленности, а также везде, где от точной до миллисекунды обработки задачи зависят жизни людей или работоспособность дорогостоящего оборудования. Кстати, Linux так не умеет.

На третьем месте с большим отрывом — Windows. Все мы работали с терминалами оплаты или банкоматами, в которых нередко используется именно система от Microsoft. Это закрытая и гораздо менее гибкая система, и подходит она только для тех устройств, в которых достаточно много свободных ресурсов.

На четвёртом месте Zephyr — ещё одна свободная операционка реального времени, созданная специально для работы со встраиваемыми устройствами и микроконтроллерами.

Операционные системы для шлюзов и встраиваемых устройств. Из исследования Eclipse Foundation
Инфографика: Eclipse Foundation

А вот на серверах и в облаках ситуация отличается — хотя в рейтинге всё так же присутствуют Linux (лидирует с большим отрывом) и Windows. Кроме того, достаточно популярен майкрософтовский вариант Linux — Azure Sphere. Неудивительно — на ней строится Azure, а это один из лидеров в мире среди облачных платформ. Четвёртое место скромно заняла FreeBSD, ещё одна свободная операционка, которая традиционно считается более надёжной и безопасной, чем Linux.

Операционные системы для серверов и облаков, популярные в IoT. Из исследования Eclipse Foundation
Инфографика: Eclipse Foundation

Среди каналов связи, конечно же, лидирует классический Ethernet — проводной, надёжный, стабильный и предсказуемый. Он обеспечивает самые большие скорости и может быть почти «бесплатным» с точки зрения энергопотребления.

Из беспроводных технологий наибольшей популярностью пользуется Wi-Fi — его можно развернуть относительно дёшево, не нужно использовать базовые станции, привязанные к операторам связи, у него отличная скорость, и он может покрывать относительно неплохое расстояние.

Чуть менее популярны сети сотовой связи. Их плюс — они уже есть на куче смартфонов, могут обеспечить хорошую зону покрытия и работают на больших расстояниях. То есть удобны там, где нет проводов, а Wi-Fi просто «не добивает».

Bluetooth на четвёртом месте — у него достаточно низкая скорость передачи данных, он не так стабилен в работе, и у него серьёзные ограничения по расстоянию между устройствами. Зато он экономнее в потреблении электроэнергии, чем Wi-Fi и сотовые сети связи.

Технологии связи, популярные в IoT. Из исследования Eclipse Foundation
Инфографика: Eclipse Foundation

«Приведу пример промышленного IoT-проекта — карта заводов с цветовой дифференциацией состояния. С помощью этой карты любой из менеджеров мог зайти на конкретный завод и посмотреть, в чём конкретно проблема на дашбордах с цифрами по каждому цеху — давление, температура и другие данные с промышленных IoT-устройств. Для передачи данных использовали DSL-линию — с её помощью выгружали Python-скрипты. Скрипты использовали для построения прогнозных моделей по объёмам производства нефти на заводе в Сочи. Для отображения моделей в единой ноде использовали Node.js и React, Polymer и Angular. С их помощью строили таблицы и графики из уже посчитанных дата-сайентистами данных, а также сырых данных, выгружаемых из Data Lake.

Конечный результат проекта — интерактивная карта в формате SVG, на которой отмечены точки с заводами „Роснефти“».

Алексей Барышников,
Java-/JS-разработчик

Мир IoT — это наше будущее, а значит, разработка ПО для интернета вещей будет всё более востребованным занятием. Если вы уже кодите на Python, PHP, Java, Go или JS — попробуйте вкатиться в эту сферу через них. Python будет лучшим выбором для тех, кто ещё не знаком с программированием. А если вы хотите напрямую поработать с «железом» и памятью — обратите внимание на C/C++.

Бесплатный курс по Python ➞
Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу