Перейти к содержимому
Учи.Онлайн Выбрать школу
Статья

Программирование микроконтроллеров: что это, где применяется и как освоить

Программирование микроконтроллеров — это умение написать программу для маленького чипа на плате, который читает датчики, принимает решение и включает реле, мотор, клапан или светодиод. Для своих задач обычно начинают с Arduino, переходят на ESP32, когда нужен Wi-Fi, и на STM32, когда важны точные тайминги и экономия энергии. Навык пригодится электрику и наладчику, учителю технологии, мейкеру и владельцу умного дома. Нужны основы электротехники, язык C или C++ и привычка проверять схему мультиметром. Ниже — учебный пример, ограничения аналоговых входов ESP32, порядок освоения, частые ошибки и случаи, когда лучше взять Raspberry Pi.

Автор: редакция Учи.ОнлайнОтветственный редактор: Дмитрий Игнатьев
Содержание
Иллюстрация к статье: Программирование микроконтроллеров: что это, где применяется и как освоить

Тому, кто делает устройство для себя, мастерской или школьного кружка, не нужно писать драйверы через регистры: почти всё решают готовые библиотеки. Зато без электрической части не обойтись. Скетч компилируется без ошибок, а устройство не работает, потому что датчик на 5 В подключён к входу на 3,3 В, у модуля реле нет общей земли с платой или мотор питается прямо от вывода контроллера. Половина навыка — понимать, что происходит на проводах.

Что делает человек, который программирует микроконтроллер

Сначала человек выбирает плату и датчики, смотрит распиновку и решает, что к каким выводам подключить. Затем пишет инициализацию: какой вывод работает на вход, какой на выход, с какой скоростью идёт обмен по шине. Основной цикл опрашивает датчики, сравнивает показания с порогами и управляет нагрузкой. Событие, которое нельзя пропустить, например импульс счётчика воды, обрабатывают через прерывание — короткую функцию, которую контроллер вызывает сам в момент события.

Остальное время уходит на отладку. Новичку хватает сообщений в мониторе порта и мультиметра, позже появляются логический анализатор и аппаратный отладчик. Если устройство живёт от батареи, добавляются режимы сна: контроллер отключает почти всё и просыпается по таймеру или сигналу датчика.

Кому и зачем это нужно

Электрику и наладчику навык помогает собрать то, чего нет в продаже: регистратор температуры в щитовой, счётчик срабатываний оборудования, стенд для проверки датчиков. Такие самоделки не заменяют сертифицированную автоматику и не встраиваются в действующие электроустановки без согласования, но хорошо работают как диагностический инструмент.

Учителю технологии микроконтроллеры дают проектную работу с понятным результатом: метеостанцию, умную теплицу, робота на колёсах. Мейкеру — управление светом, станком или инкубатором, владельцу умного дома — собственные датчики без облака производителя. Разработке прошивок для серийных устройств посвящена соседняя статья о профессии программиста микроконтроллеров.

Arduino, ESP32, STM32 или Raspberry Pi

Arduino Uno — самый простой вход: плата на 5 В, множество примеров и библиотек, но нет беспроводной связи и мало памяти. ESP32 работает от 3,3 В, умеет Wi-Fi и Bluetooth, программируется и в Arduino IDE, и в фирменной среде ESP-IDF, поэтому его берут для датчиков умного дома. STM32 — семейство контроллеров на ядрах ARM Cortex-M с развитыми таймерами и DMA; к нему переходят, когда нужно точно управлять двигателем, быстро оцифровывать сигнал или долго работать от батарейки.

Raspberry Pi — уже не микроконтроллер, а одноплатный компьютер с Linux. Он удобнее, когда нужны камера, веб-интерфейс, база данных или сложная логика на Python. Но реакцию за микросекунды Linux не гарантирует, питание нужно отключать корректно, чтобы не испортить карту памяти, а аналоговых входов на плате нет. Частое решение — связка: Raspberry Pi хранит данные и показывает интерфейс, микроконтроллер работает с датчиками и нагрузкой.

Учебный пример: полив теплицы на ESP32

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

На столе всё работало, пока в код не добавили Wi-Fi. После этого датчик влажности стал возвращать ошибку, а напряжение аккумулятора читалось заметно ниже, чем показывал мультиметр. Обе проблемы связаны не с кодом, а с устройством аналого-цифрового преобразователя (АЦП) этого чипа.

Почему ESP32 неточно измеряет напряжение

У ESP32 два блока АЦП, и второй, ADC2, делит оборудование с радиомодулем. В документации ESP-IDF сказано, что ADC2 используется драйвером Wi-Fi, а функция чтения при занятом АЦП возвращает ошибку ESP_ERR_TIMEOUT (ESP-IDF, ADC Oneshot Mode Driver). В прежней версии документации формулировка жёстче: на ESP32 при включённом Wi-Fi чтение ADC2 всегда завершается этой ошибкой (ESP-IDF v4.4). На ADC2 выведены GPIO 0, 2, 4, 12–15 и 25–27, поэтому датчик на GPIO 26 перестаёт работать, как только устройство выходит в сеть. В беспроводном проекте аналоговые датчики подключают к выводам ADC1 (GPIO 32–39).

Вторая проблема — диапазон. Многие уверены, что АЦП измеряет от 0 до 3,3 В. По таблице 4-4 даташита ESP32 (версия 5.3) даже при максимальном ослаблении сигнала рабочий диапазон — от 150 до 2450 мВ, а погрешность после калибровки — до ±60 мВ. Выше примерно 2450 мВ точность ещё хуже, а без калибровки показания разных экземпляров чипа расходятся до ±6 % (ESP32 Series Datasheet). Опорное напряжение номинально 1100 мВ, но у конкретных чипов бывает от 1000 до 1200 мВ, поэтому сырые коды переводят в милливольты функциями калибровки, а не простой пропорцией (ESP-IDF, ADC Calibration Driver).

Для теплицы это три правки: датчик влажности переезжает на вывод ADC1, делитель для аккумулятора пересчитывают так, чтобы на входе было не больше 2,4 В, а в коде включают калибровку и усредняют несколько измерений. Если нужна точность выше, ставят внешний АЦП на шине I2C.

С чего начать и в каком порядке осваивать

Каждая следующая тема опирается на предыдущую. Без закона Ома и делителя напряжения нельзя безопасно подключить датчик, без уверенной работы с одной платой рано браться за беспроводную связь, а прерывания и сон понятны тому, кто уже упирался в ограничения простого цикла. Поэтому план такой:

  1. Основы электротехники: ток, напряжение, делитель, уровни 3,3 и 5 В, общая земля, подключение нагрузки через транзистор или реле.
  2. Arduino Uno: цифровые и аналоговые входы, выходы, монитор порта. Сразу пишите без delay(), через отсчёт времени функцией millis().
  3. Датчики и шины I2C и 1-Wire, работа с готовыми библиотеками.
  4. Прерывания и конечный автомат — программа, которая реагирует на события и помнит своё состояние.
  5. ESP32: Wi-Fi, протокол MQTT, режимы сна, ограничения АЦП.
  6. STM32: STM32CubeIDE, библиотека HAL, аппаратный отладчик, таймеры и DMA.

Язык C++ полезно учить параллельно со вторым и третьим шагом: скетчи Arduino пишутся именно на нём. Если хочется освоить язык глубже и заодно поработать с железом, посмотрите онлайн-курс Нетологии «Разработчик на C++»: 12 месяцев, до 16 проектов и три специализации на выбор, в том числе по интернету вещей с модулем умного дома на Arduino. Выдают ли оборудование, в обзоре не указано — уточните у школы.

Упражнения и типичные ошибки

Проверяйте себя короткими задачами с измеримым результатом. Мигайте двумя светодиодами с разной частотой без delay(). Считайте нажатия кнопки так, чтобы дребезг контактов не превращал одно нажатие в три. Сравните показания датчика температуры с термометром, а ток платы в работе и во сне измерьте мультиметром.

Ошибки новичков повторяются из проекта в проект. Вход без подтягивающего резистора ловит наводки. Сервопривод, запитанный от вывода 5 В платы, вызывает перезагрузки. В обработчике прерывания делают долгую работу, а общую с основной программой переменную забывают объявить как volatile. Модуль на 3,3 В подключают к выходу Arduino на 5 В без согласования уровней.

Если навык нужен для работы с оборудованием

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

Такой вариант — переподготовка АПОК «Промышленная электроника»: 256 академических часов дистанционно, диплом о профессиональной переподготовке. Программа преимущественно аналоговая, микроконтроллерным устройствам отведено 24 часа, лабораторных работ и пайки в описании нет — практику с платами придётся организовать самостоятельно.

Если вы учитель или ведёте кружок

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

Если кружок должен стать частью официальной нагрузки, понадобится документ о квалификации. Один из вариантов — переподготовка ЦАППКК «Преподаватель робототехники в дополнительном образовании» с присвоением квалификации «Педагог дополнительного образования (робототехника)», 540 часов. Подробной программы в обзоре нет: до оплаты выясните у школы, есть ли в ней Arduino и текстовое программирование.

Как навык влияет на доход

Отдельной надбавки за микроконтроллеры у электрика или учителя обычно нет. Навык влияет на доход косвенно: позволяет самому сделать то, ради чего раньше звали подрядчика, — стенд для проверки датчиков, сбор данных с оборудования, доработку автоматики станка. Педагогу он даёт возможность вести кружок, то есть дополнительные часы, мейкеру — небольшие заказы вроде контроллера для инкубатора.

Сопоставимых открытых данных о прибавке к зарплате электрика или учителя за этот навык найти не удалось. Чтобы оценить рынок, ищите вакансии по словам «Arduino», «ESP32», «STM32» и «микроконтроллер» с фильтром по региону и опыту, смотрите медиану, а не среднее, и отличайте суммы до вычета налога от сумм на руки. Часто микроконтроллеры оказываются лишь строкой в требованиях к наладчику или инженеру КИПиА, а не основой вакансии.

Как выбрать обучение

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

Сравнить школы, которые учат языку большинства прошивок, поможет рейтинг онлайн-школ по программированию на C++. Отдельного рейтинга по микроконтроллерам нет, поэтому у каждой школы проверяйте, есть ли работа с железом. Лучший первый шаг — недорогая плата и одно небольшое устройство для своей задачи: так быстро станет ясно, какого знания не хватает.