Галерея проектов
Любой проект можно открыть, запустить и сделать своей копией. У каждого примера есть разбор: что на схеме, какие библиотеки нужны и что делает код.
Глубокий сон по таймеру
Основной режим для приборов на батарее: проснуться, замерить, отправить, уснуть. После пробуждения setup() начинается заново.
Жизнь на матрице
Игра «Жизнь» на поле 8×8 с замыканием краёв. Считается в двух буферах — иначе клетки видят соседей уже нового поколения.
Измерение напряжения делителем
АЦП принимает максимум 3.3 В. Делитель расширяет диапазон, а коэффициент возвращается в коде.
Кодовый замок
Ввод накапливается в строку и сравнивается с образцом. Сброс по звёздочке.
Конфиг в JSON и в памяти
Настройки хранятся строкой JSON в NVS: одно поле вместо десяти ключей, и добавить новое можно не ломая старое.
Матрица: рисунок и мигание
Картинка хранится восемью байтами — по байту на строку. Так её удобно и рисовать в коде, и отправлять.
Матричная клавиатура 4x4
Шестнадцать кнопок на восьми выводах. Сканирование по строкам и чтение столбцов.
Минимум и максимум за сеанс
Накопление статистики без массива: достаточно двух переменных и первого замера.
Несколько задач по времени
Три независимых периода в одном loop(). Каждая задача помнит своё время последнего запуска.
Ночник
Темнее — ярче. Обратная пропорция и гистерезис, чтобы лампа не моргала на границе.
Порог с гистерезисом
Один порог заставляет выход дребезжать у границы. Два порога — нет.
Причина перезагрузки
После неожиданного рестарта первое, что нужно знать: питание, сторож или паника.
Расписание: свет по часам
Включать нагрузку в заданные часы. Проверка написана так, чтобы работать и на промежутке через полночь.
Сдвиговый регистр: восемь выходов из трёх проводов
Аппаратный SPI и 74HC595: восемь светодиодов на трёх проводах. На выходы байт попадает только когда отпущена защёлка — до этого он…
Семисегментный: счётчик
Та же микросхема, другой индикатор. Цифры рисует она сама — если включить знакогенератор.
Сеть как источник, часы как резерв
Сеть точнее, но её может не быть. Микросхема всегда на месте, но уходит. Правильная схема — сверять первым вторым.
Сканер шины I2C
Первое, что запускают, когда датчик на шине не отвечает: перебор всех адресов.
Слежение за утечкой памяти
Куча, которая только уменьшается, — признак утечки. Здесь она создаётся намеренно, чтобы увидеть, как это выглядит.
Счётчик пересечений луча
Фоторезистор как датчик прохода. Считается фронт, а не уровень, иначе один проход даст сотню срабатываний.
Термометр с буквой
Показать -3.7C на четырёх разрядах: знак, десятые и буква. Сегменты приходится задавать руками.
Ультразвук: измерение расстояния
Импульс 10 мкс на TRIG, длительность ответа на ECHO. Расстояние — это время полёта, делённое пополам.
Файл во внутренней памяти
SPIFFS даёт обычные файлы поверх флеша: открыть, дописать, прочитать.
Форматирование вывода
Ширина поля, знаки после запятой, шестнадцатеричный вид. Читаемый лог экономит куда больше времени, чем кажется.
Часы с мигающим двоеточием
Отдельного двоеточия у индикатора нет: это старший разряд второй цифры. Отсюда и способ им мигать.