Галерея проектов
Любой проект можно открыть, запустить и сделать своей копией. У каждого примера есть разбор: что на схеме, какие библиотеки нужны и что делает код.
RGB: перебор цветов
Три канала ШИМ на один светодиод. Показывает, что цвет — это три независимые яркости.
RGB: плавная радуга
Перевод HSV в RGB. Один параметр — оттенок — вместо трёх яркостей.
Serial: журнал в CSV
Заголовок один раз, дальше строки с временем и значениями. Копируется в таблицу как есть.
Serial: эхо
Самый короткий двусторонний обмен: всё, что пришло, уходит обратно.
Звук: одна нота
Пьезоизлучатель на ШИМ. Частота задаёт высоту, скважность — громкость.
Кнопка-триггер
Нажал — включилось, нажал ещё раз — выключилось. Реакция на фронт, а не на уровень.
Переключатель режимов
Тумблер задаёт режим, а не событие: состояние читается когда угодно.
Потенциометр управляет яркостью
Связка вход-выход через map(). Первый пример, где приборы взаимодействуют.
Проверка выводов
Перебор безопасных выводов с переключением. Помогает найти обрыв в макетке.
Реле по расписанию
Периодическое включение нагрузки. Реле — единственный способ управлять чем-то мощнее светодиода.
Своя точка доступа
Без роутера: прибор сам раздаёт сеть и отвечает по адресу 192.168.4.1. Так делают первичную настройку.
Сглаживание показаний АЦП
Скользящее среднее по кольцевому буферу. Сырой АЦП шумит на пару единиц всегда.
Сторожевой таймер
Зависшую задачу должен кто-то перезапустить. Сторож делает это, если её не гладить вовремя.
Термистор NTC
Уравнение Стейнхарта–Харта в упрощённой форме: сопротивление в градусы через бета-коэффициент.
Усреднение по времени
Экспоненциальное сглаживание: одна переменная вместо буфера, коэффициент задаёт инерцию.
ArduinoJson: разбор и сборка
Шестая версия и седьмая различаются в первой же строке. Разбор чужого ответа, проверка ошибок и сборка своего.
BME280: три величины сразу
Датчик отдаёт не градусы, а сырые числа и заводские поправки — считает библиотека. Пример показывает, что из этого получается.
FreeRTOS: две задачи
Каждая задача со своим циклом и своей задержкой. loop() при этом остаётся третьей задачей.
FreeRTOS: задачи по ядрам
У ESP32 два ядра. xTaskCreatePinnedToCore прибивает задачу к одному из них — и это видно по xPortGetCoreID().
FreeRTOS: запас стека задачи
Переполнение стека задачи — частая и трудноуловимая авария. Запас лучше померить заранее.
LCD: бегущая строка
Текст длиннее шестнадцати символов показывается окном, которое ползёт по строке.
LCD: меню на двух кнопках
Список пунктов, курсор и выбор. Минимальный интерфейс, из которого вырастает любой прибор.
LCD: термометр
Датчик и дисплей вместе. Собственный символ градуса — потому что в наборе LCD его нет.
Serial: меню одной клавишей
Один символ — одно действие. Быстрый способ дать прибору отладочный интерфейс.