ESP32-CAM (AI-Thinker) с OV2640 — первое знакомство и настройка
Полный стартовый гайд по самой популярной камере на ESP32. Подключение, прошивка, запуск веб-сервера, съёмка фото на SD-карту по кнопке и подготовка к фотоловушке. Всё с нуля и за 15 минут.
Характеристики ESP32-CAM (AI-Thinker)
- Камера OV2640 2 МП (UXGA 1600×1200)
- Wi-Fi + Bluetooth 4.2
- Слот microSD (до 4 ГБ официально, работает до 128 ГБ)
- 4 МБ PSRAM — хватает на видео и стриминг
- Встроенная вспышка (GPIO4)
- Питание 5 В (встроенный регулятор)
Как прошить (два способа)
- Классика: FTDI-программатор 3.3 В
→ GPIO0 → GND (только на время прошивки)
→ U0R (GPIO3) → TX программатора
→ U0T (GPIO1) → RX программатора - Удобно: готовая плата с кнопками Flash/Reset
Установка в Arduino IDE
- Файл → Настройки → Дополнительные ссылки:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json - Инструменты → Плата → Менеджер плат → ESP32 → Установите последнюю версию
- Выберите плату: AI Thinker ESP32-CAM
- Порт → ваш COM
Первый запуск — CameraWebServer
// В примере раскомментируйте:
#define CAMERA_MODEL_AI_THINKER
Введите свой Wi-Fi и пароль → Прошить → Открыть Serial Monitor 115200 → Нажать Reset → Получить IP → Зайти в браузер
Готовый скетч: фото на SD по нажатию Reset
#include "esp_camera.h"
#include <SD_MMC.h>
#include <EEPROM.h>
#define CAMERA_MODEL_AI_THINKER
#include "camera_pins.h"
int pictureNumber = 0;
void setup() {
Serial.begin(115200);
camera_config_t config;
// (все настройки из camera_pins.h + стандартные)
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
// ... остальные пины
config.pixel_format = PIXFORMAT_JPEG;
config.frame_size = FRAMESIZE_UXGA;
config.jpeg_quality = 10;
config.fb_count = 2;
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) { Serial.printf("Camera init failed 0x%x", err); return; }
if (!SD_MMC.begin()) { Serial.println("SD Card Mount Failed"); return; }
EEPROM.begin(4);
pictureNumber = EEPROM.read(0) + 1;
takeSavePhoto();
EEPROM.write(0, pictureNumber);
EEPROM.commit();
esp_deep_sleep_start(); // уходим в сон до следующего Reset
}
void takeSavePhoto() {
digitalWrite(4, HIGH); delay(100);
camera_fb_t * fb = esp_camera_fb_get();
if (!fb) { Serial.println("Capture failed"); return; }
String path = "/PICTURE" + String(pictureNumber) + ".jpg";
File file = SD_MMC.open(path.c_str(), FILE_WRITE);
if (file) file.write(fb->buf, fb->len);
file.close();
esp_camera_fb_return(fb);
digitalWrite(4, LOW);
}
void loop() {}
Считает номер следующей фотографии из EEPROM и увеличивает его на 1.
Делает фото и сохраняет его на SD-карту под именем /PICTURE
Сохраняет обновлённый номер в EEPROM.
После съёмки уходит в глубокий сон (esp_deep_sleep_start()).
Что будет дальше (серия уроков)
- Фотоловушка на PIR HC-SR501
- Видеоловушка (запись 10–15 сек)
- Отправка фото в Telegram
- Автономная работа от аккумулятора + глубокий сон
- Распознавание лиц + доступ по лицу
Заключение
ESP32-CAM — самая мощная и дешёвая камера для IoT-проектов. За 10–15 минут вы получаете полноценный Wi-Fi стример, фотоловушку и базу для умного видеонаблюдения. Прошейте пример CameraWebServer — и вы уже готовы к любым экспериментам!
FAQ — ESP32-CAM (AI-Thinker) с OV2640
Почему ESP32-CAM не прошивается через обычный USB-кабель?
На плате нет встроенного USB-UART. Для прошивки требуется FTDI-программатор или плата с UART-конвертером. Соедините TX↔RX, подайте 5 В на VCC и обязательно замкните GPIO0 → GND на время прошивки.
Нужно ли питание 5 В или достаточно 3.3 В?
Рекомендуется подавать именно 5 В на вход 5V — на плате есть понижающий стабилизатор. Подача 3.3 В напрямую на 3V3 может вызвать нестабильную работу камеры или Wi-Fi, особенно при включении вспышки.
Как понять, что камера OV2640 исправна?
В примере CameraWebServer изображение должно появляться сразу после загрузки страницы. Если вывод чёрный или «артефакты», проверьте шлейф камеры — он часто неплотно вставлен. Полностью выньте и вставьте заново до щелчка, не перегибая кабель.
Почему ESP32-CAM не подключается к Wi-Fi?
Основные причины: слабое питание, неверный пароль, скрытая сеть, диапазон 5 ГГц или включенная изоляция клиентов (AP Isolation). ESP32-CAM работает только с 2.4 ГГц, а при падении напряжения Wi-Fi модуль часто не стартует.
Какой максимальный размер SD-карты поддерживается?
Формально заявлено до 4 ГБ (FAT16), но на практике прекрасно работают карты 8–128 ГБ в формате FAT32. Главное — не использовать exFAT, он не поддерживается SD_MMC.
Почему фото на SD сохраняются не всегда?
На ESP32-CAM SD и камера используют одни и те же линии, при слабом питании возможны ошибки записи. Также убедитесь, что карта достаточно быстрая (Class 10) и вставлена полностью. Рекомендуется использовать fb_count = 1 или 2 для стабильного захвата кадров.
Как включить глубoкий сон (deep sleep) правильно?
Достаточно вызвать esp_deep_sleep_start(). Плата отключает Wi-Fi и ядра CPU, остаётся только секция RTC. Для пробуждения используйте Reset либо таймер wakeup — esp_sleep_enable_timer_wakeup().
Почему изображение тормозит в веб-сервере?
Основная причина — слишком высокое разрешение (UXGA, SXGA) и низкая сила сигнала Wi-Fi. Для стабильного стрима используйте VGA или SVGA и разместите устройство ближе к роутеру.