ESP32-CAM – стоп-кадр из видеопотока, сохранение на SD-карту, просмотр и удаление
ESP32-CAM с камерой OV2640 позволяет не только транслировать видео по Wi-Fi, но и сохранять любой кадр на microSD-карту одним нажатием кнопки в веб-интерфейсе. При этом поток не прерывается, а все фотографии можно сразу просмотреть, скачать или удалить — без извлечения карты. Идеальное решение для систем видеонаблюдения, умного дома и IoT-проектов своими руками.
В этом проекте реализован полноценный веб-сервер: живая трансляция, изменение разрешения до SXGA (1280×1024), регулировка яркости вспышки, контрастности, насыщенности и качества JPEG. Список файлов сортируется по дате, последний сохранённый кадр выделяется, удаление происходит мгновенно.
Всё работает на стандартном примере CameraWebServer из библиотеки ESP32 без дополнительных библиотек.
Необходимые компоненты
- Модуль ESP32-CAM (AI-Thinker)
- Камера OV2640 (идёт в комплекте)
- MicroSD-карта (до 4 ГБ FAT32 рекомендуется)
- Программатор FTDI или USB-TTL (5В/3.3В)
- Источник питания 5В 1–2А
Подключение
- SD-карта вставляется в слот на плате ESP32-CAM
- Питание только 5В (не 3.3В!)
- GPIO0 на землю при прошивке
- Антенна наружу для лучшего Wi-Fi
Как это работает
- ESP32 запускает веб-сервер и потоковое видео (MJPEG)
- При нажатии кнопки «Сохранить» текущий кадр из буфера сохраняется в JPEG на SD-карту
- Имя файла — дата и время (2025-11-18_12-34-56.jpg)
- Функция listDir() сканирует карту и выводит отсортированный список
- Клик по файлу — просмотр в том же окне, кнопка «Delete» — удаление
- Все настройки (разрешение, качество, яркость вспышки) меняются на лету
Пример кода
#include "FS.h"
#include "SD_MMC.h"
#include "esp_camera.h"
// Функция для захвата и сохранения фото
void capturePhoto() {
camera_fb_t *fb = esp_camera_fb_get();
if(!fb){
Serial.println("Camera capture failed");
return;
}
String path = "/pic_" + String(millis()) + ".jpg";
File file = SD_MMC.open(path.c_str(), FILE_WRITE);
if(file){
file.write(fb->buf, fb->len);
file.close();
Serial.printf("Saved: %s (%u bytes)\n", path.c_str(), fb->len);
} else {
Serial.println("Ошибка открытия файла на SD");
}
esp_camera_fb_return(fb);
}
// Функция для получения списка файлов в HTML-таблице
String getFileListHTML() {
String list = "| Delete | File | Size | View |
|---|---|---|---|
| Delete | "; list += "" + name + " | "; list += "" + String(file.size()) + " bytes | "; list += "View |
Проверка директории перед openNextFile().
Генерация HTML-таблицы для удобного просмотра и удаления файлов.
Фото сохраняются с уникальными именами на основе millis().
Преимущества
- Снимок одним кликом без остановки видео
- Полный контроль файлов через браузер
- Не нужно доставать SD-карту
- Работает на любом разрешении до 1600×1200
- Полностью автономно после прошивки
- Легко интегрируется в системы умного дома
Применение
- Скрытое видеонаблюдение и охрана
- Фотоловушки на движение (дополняется PIR-датчиком)
- Видеорегистратор для двора/гаража
- Контроль сотрудников и посетителей
- Документирование событий в реальном времени
- База для систем распознавания лиц и номеров
Заключение
ESP32-CAM с функцией стоп-кадра и управлением файлами на SD-карте — готовое решение для видеонаблюдения своими руками. Никаких облачных сервисов, всё хранится локально и доступно в один клик. Прошейте пример, направьте камеру на нужный объект — и получайте доказательства по нажатию кнопки!