Примеры проектов на ESP32
Примеры проектов на ESP32 — 199 готовых примеров со схемой и кодом. Откройте любой в браузере и запустите без платы и проводов.
Слежение за утечкой памяти
Куча, которая только уменьшается, — признак утечки. Здесь она создаётся намеренно, чтобы увидеть, как это выглядит.
Случайные числа
esp_random() берёт энтропию из аппаратного генератора. random() без засева даёт одну и ту же последовательность.
Термометр на индикаторе
Показать -3.7°C на семисегментном индикаторе: знак, десятые и буква. Буквы C знакогенератор не знает — значит рисуем сегментами са…
Файл во внутренней памяти
SPIFFS даёт обычные файлы поверх флеша: открыть, дописать, прочитать.
Шаговый двигатель
Полношаговая последовательность на четырёх выводах. Скорость ограничена паузой между шагами.
Энкодер KY-040: счётчик щелчков и кнопка
Ручка без упоров: поворот считается прерыванием по спаду CLK, направление — по уровню DT. У ESP32 прерывание можно повесить на люб…
FreeRTOS: две задачи
Каждая задача со своим циклом и своей задержкой. loop() при этом остаётся третьей задачей.
FreeRTOS: задачи по ядрам
У ESP32 два ядра. xTaskCreatePinnedToCore прибивает задачу к одному из них — и это видно по xPortGetCoreID().
FreeRTOS: запас стека задачи
Переполнение стека задачи — частая и трудноуловимая авария. Запас лучше померить заранее.
FreeRTOS: очередь между задачами
Правильный способ передать данные из задачи в задачу. Общая переменная без защиты рано или поздно подведёт.
NeoPixel: адресные светодиоды
Одна линия данных на всю ленту. Цвет каждого пикселя задаётся отдельно, показывается по show().
RGB: перебор цветов
Три канала ШИМ на один светодиод. Показывает, что цвет — это три независимые яркости.
Serial: разбор команд
Команда и аргумент, разделённые пробелом. Отсюда вырастает консоль прибора.
Антидребезг кнопки
Механический контакт при нажатии дребезжит несколько миллисекунд. Без фильтра одно нажатие считается десятком.
Аппаратный счётчик импульсов (PCNT)
То же, что «Счётчик импульсов на прерывании», но считает не скетч, а блок PCNT: без обработчика, без volatile и без потерь, когда…
Аппаратный таймер
Прерывание строго по расписанию, независимо от того, чем занят loop(). Точнее любого millis().
Барометр: тенденция за три часа
Погоду предсказывает не давление, а его изменение. Кольцевой буфер и разность с отсчётом трёхчасовой давности.
Веб-сервер: форма настроек
Форма и разбор полей через server.arg(): так прибору задают имя, яркость, пороги. Ползунок меняет скважность ШИМ — яркость видна п…
Звук: мелодия по нотам
Массив частот и длительностей. Пауза между нотами нужна, иначе они сливаются.
Кнопка через прерывание
Обработчик вместо опроса. Показывает volatile и IRAM_ATTR — без них работать не будет.
Несколько задач по времени
Три независимых периода в одном loop(). Каждая задача помнит своё время последнего запуска.
Потенциометр: чтение АЦП
analogRead и 12 бит разрешения. Значение 0…4095 на всю шкалу.
Пробуждение кнопкой
Просыпается не по времени, а по внешнему сигналу. Вывод должен быть из числа RTC-выводов.
Проверка выводов
Перебор безопасных выводов с переключением. Помогает найти обрыв в макетке.