Модуль размером с почтовую марку, камера OV2640 и слот для microSD — всё, что нужно для самодельного видеонаблюдения. Прошивка, подключение, стрим в браузер и Home Assistant, запись на карту.
ESP32-CAM — это плата на базе ESP32 (микроконтроллер с Wi-Fi и Bluetooth) с разъёмом для камеры, слотом microSD и встроенной антенной. Размер — 27×40 мм. Стоимость — от 400 до 700 рублей в зависимости от продавца.
Подвох, конечно, есть. Это не IP-камера с ночной подсветкой, PTZ (поворотным механизмом) и облачным хранилищем. Это модуль для тех, кто готов повозиться: прошить, подключить, написать конфиг или скетч, напечатать корпус. Зато — никакого облака, никаких подписок, полный контроль.
Что внутри:
Чего нет: USB-разъёма. Вот это — главная особенность ESP32-CAM. Для прошивки нужен внешний USB-UART переходник. Или плата-переходник ESP32-CAM-MB, которая решает проблему.




ESP32-CAM — сам модуль. Голая плата с разъёмами.
ESP32-CAM-MB — плата-переходник с micro-USB и кнопками Reset/Boot. Модуль вставляется в неё как картридж. После вставки — подключаешь USB-кабель и прошиваешь без танцев с проводами.
Подключение ESP32-CAM-MB — буквально «воткнул и забыл». Если покупаешь впервые — бери комплект с MB-платой. Разница в цене — 100–150 рублей, а нервов экономит на тысячу.
Классический путь. Понадобится USB-UART переходник (CP2102 или CH340 — продаются за 100–200 рублей).
Подключение ESP32-CAM к переходнику:
| ESP32-CAM | USB-UART |
|---|---|
| 5V | 5V |
| GND | GND |
| U0R (GPIO 3) | TX |
| U0T (GPIO 1) | RX |
| GPIO 0 → GND | (перемычка для режима прошивки) |
# ⚠️ GPIO 0 нужно замкнуть на GND перед подачей питания — это переводит ESP32 в режим загрузки. После прошивки перемычку убери и перезагрузи.
В Arduino IDE (среда разработки):
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.jsonТестовый скетч — CameraWebServer:
File → Examples → ESP32 → Camera → CameraWebServer
Перед загрузкой:
cpp// В начале скетча раскомментируй нужную модель камеры:
#define CAMERA_MODEL_AI_THINKER // Для ESP32-CAM от AI-Thinker
// Укажи Wi-Fi:
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
Жми Upload. После прошивки — убери перемычку GPIO 0 → GND, нажми Reset. Открой Serial Monitor (115200 бод) — увидишь IP-адрес. Набери его в браузере — откроется веб-интерфейс с живым видеопотоком.
Если есть MB-плата — всё проще. Вставляешь модуль, подключаешь USB, выбираешь в Arduino IDE ту же плату AI Thinker ESP32-CAM. Перемычки не нужны — MB-плата сама управляет GPIO 0 через кнопку Boot.
Для прошивки: зажми кнопку Boot на MB-плате, нажми Reset, отпусти Boot — плата в режиме загрузки. Жми Upload.
Подключение ESP32-CAM-MB к прошивке — самый беспроблемный путь для начинающих.
ESPHome (фреймворк для создания прошивок умного дома) поддерживает ESP32-CAM. Если Home Assistant (платформа управления умным домом) уже настроен — это самый удобный вариант для видеонаблюдения.
yamlesphome:
name: garden-camera
friendly_name: "Камера сад"
esp32:
board: esp32dev
framework:
type: arduino
wifi:
ssid: "YOUR_WIFI_SSID"
password: "YOUR_WIFI_PASSWORD"
api:
encryption:
key: "сгенерированный_ключ"
ota:
platform: esphome
esp32_camera:
external_clock:
pin: GPIO0
frequency: 20MHz
i2c_pins:
sda: GPIO26
scl: GPIO27
data_pins: [GPIO5, GPIO18, GPIO19, GPIO21, GPIO36, GPIO39, GPIO34, GPIO35]
vsync_pin: GPIO25
href_pin: GPIO23
pixel_clock_pin: GPIO22
power_down_pin: GPIO32
resolution: 800x600
jpeg_quality: 12 # 10 = лучшее качество, 63 = максимальное сжатие
max_framerate: 15fps
idle_framerate: 0.2fps # В простое — почти не грузит
esp32_camera_web_server:
- port: 8080
mode: stream
- port: 8081
mode: snapshot
ESP32-CAM в ESPHome — прошил один раз по USB, дальше обновляешь по воздуху (OTA — обновление прошивки по Wi-Fi). Камера автоматически появится в Home Assistant.
Тут нюанс: ESPHome-прошивка для ESP32-CAM работает стабильнее стандартного CameraWebServer-скетча. Меньше зависаний, адекватное управление памятью. Но функциональность чуть ограничена — нет встроенного распознавания лиц и жестов, которые есть в примере от Espressif. Для видеонаблюдения это не критично.
Распиновка ESP32-CAM — важная тема, потому что свободных пинов мало. Камера и SD-карта забирают почти все GPIO.
Свободные для использования:
Заняты камерой (не трогать): GPIO 0, 4, 5, 18, 19, 21, 22, 23, 25, 26, 27, 32, 34, 35, 36, 39
GPIO 4 — светодиод-вспышка. Камерой не используется постоянно, можно включать программно:
cpppinMode(4, OUTPUT);
digitalWrite(4, HIGH); // Включить вспышку
delay(200);
digitalWrite(4, LOW); // Выключить
Итого: если используешь SD-карту — свободных пинов практически нет. Если SD не нужна — освобождается 4–5 GPIO для датчиков или реле. Распиновка ESP32-CAM заставляет тщательно планировать, что подключать.
ESP32-CAM при активном стриме потребляет 160–260 мА (пиково до 310 мА при включённой вспышке). Это прожорливо.
Варианты питания:
От аккумулятора 18650 (3.7V, Li-Ion) — работает, но недолго. При постоянном стриме — 3–5 часов на аккумуляторе 3000 мАч. Для таймлапса (снимок раз в минуту с deep sleep между снимками) — несколько дней.
# ⚠️ Дешёвые USB-кабели часто не тянут 300 мА — ESP32-CAM перезагружается при включении Wi-Fi. Если камера циклически ребутится — попробуй другой кабель или внешнее питание.
CameraWebServer и ESPHome отдают видеопоток через HTTP (MJPEG). Для серьёзных систем видеонаблюдения — Frigate (нейросетевой NVR — сетевой видеорегистратор), Blue Iris, Shinobi — нужен RTSP (протокол потокового видео в реальном времени).
ESP32-CAM умеет RTSP, но не из коробки. Нужна отдельная прошивка.
Проект Micro-RTSP на GitHub (ищи «micro-RTSP esp32-cam») — лёгкий RTSP-сервер для ESP32-CAM. После прошивки камера отдаёт поток по адресу rtsp://192.168.1.x:8554/mjpeg/1.
В Frigate:
yamlcameras:
garden:
ffmpeg:
inputs:
- path: rtsp://192.168.1.x:8554/mjpeg/1
roles:
- detect
detect:
width: 640
height: 480
Но честно: ESP32-CAM и RTSP — это компромисс. Разрешение низкое, FPS (кадров в секунду) — 10–15, задержка заметная. Для серьёзного видеонаблюдения лучше обычные IP-камеры. ESP32-CAM хорош для точек, где настоящая камера избыточна: наблюдение за 3D-принтером, проверка почтового ящика, камера в скворечнике.
ESP32-CAM снимает фото и записывает видео на microSD. Карту форматируй в FAT32 (до 32 ГБ без проблем, 64 ГБ — иногда капризничает).
cpp#include "esp_camera.h"
#include "FS.h"
#include "SD_MMC.h"
// Настройка камеры — код инициализации из CameraWebServer
// ...
void takePhoto() {
camera_fb_t *fb = esp_camera_fb_get();
if (!fb) {
Serial.println("Ошибка захвата");
return;
}
// Формируем имя файла
String path = "/photo_" + String(millis()) + ".jpg";
File file = SD_MMC.open(path.c_str(), FILE_WRITE);
if (file) {
file.write(fb->buf, fb->len);
file.close();
Serial.println("Сохранено: " + path);
}
esp_camera_fb_return(fb);
}
Для таймлапса — вызываешь takePhoto() каждые N секунд. Для экономии батареи — уходишь в deep sleep между снимками:
cppesp_sleep_enable_timer_wakeup(60 * 1000000); // 60 секунд
esp_deep_sleep_start();
ESP32-CAM просыпается, делает снимок, сохраняет на SD, засыпает. На SD 16 ГБ влезает ~50 000 фотографий в разрешении 640×480.
Запись видео на SD — технически возможна, но ESP32-CAM не хватает производительности для стабильной записи в формате AVI или MP4 при высоком разрешении. На 640×480 при 10 FPS — работает, но файлы получаются большими (MJPEG без аппаратного сжатия). На практике для непрерывной записи видео ESP32-CAM не годится — для этого нужна нормальная IP-камера.
Если прошил через ESPHome — камера автоматически появляется в Home Assistant как entity типа camera. Стрим, снэпшоты, автоматизации — всё работает.
Можно настроить автоматизацию: «сделать снимок, когда датчик движения PIR сработал, отправить в Telegram».
ESP32-CAM в Home Assistant через ESPHome — самый стабильный и управляемый вариант.
Если ESP32-CAM прошита стандартным CameraWebServer-скетчем — добавляешь в Home Assistant как generic MJPEG-камеру:
Settings → Devices & Services → Add Integration → Generic Camera
Still Image URL: http://192.168.1.x/capture
Stream Source: http://192.168.1.x:81/stream
ESP32-CAM + Telegram — популярный проект. Бот по команде делает снимок и отправляет в чат. Скетчи для этого есть на GitHub (ищи «esp32-cam telegram bot»). Полезно для удалённого мониторинга без Home Assistant.
Самая частая жалоба. Причины:
Неправильная экспозиция. Обычно помогает:
cppsensor_t *s = esp_camera_sensor_get();
s->set_brightness(s, 1); // -2 до 2
s->set_saturation(s, 0); // -2 до 2
s->set_whitebal(s, 1); // Авто баланс белого
s->set_exposure_ctrl(s, 1); // Автоэкспозиция
Если камера вставлена неплотно в разъём — тоже бывают артефакты. Вытащи, протри контакты, вставь до щелчка.
Wi-Fi + камера + HTTP-стрим — серьёзная нагрузка. Решения:
jpeg_quality = 15–20 вместо 10PCB-антенна на ESP32-CAM — слабая. Если камера за двумя стенами от роутера — связь будет нестабильной.
Варианты: поставить камеру ближе к точке доступа, использовать модуль с разъёмом U.FL и внешнюю антенну, или добавить Wi-Fi репитер рядом.
Мониторинг 3D-принтера. Камера смотрит на стол принтера, стрим в Home Assistant или OctoPrint. Увидел сбой — остановил печать удалённо.
Камера в скворечнике. ESP32-CAM + внешнее питание (или солнечная панель + аккумулятор). Таймлапс гнездования — снимок каждые 5 минут.
Дверной глазок. ESP32-CAM + PIR-датчик (инфракрасный датчик движения). Кто-то подошёл к двери — снимок в Telegram.
Видеодомофон. ESP32-CAM + кнопка + динамик. Вариант на замену китайским облачным домофонам. Проект требует больше работы, но без подписок и облаков.
Таймлапс стройки/ремонта. Снимок каждые 10 минут на SD-карту. За месяц — тысячи кадров, из которых собирается видео.
Честно: ESP32-CAM — это DIY-инструмент (самодельное решение), не готовый продукт. Не подходит, если:
Для серьёзного видеонаблюдения — бери IP-камеры (Hikvision, Dahua, Reolink). ESP32-CAM — для точечных задач, где обычная камера избыточна или не помещается.