ESP32-CAM (AI-Thinker) с OV2640 — первое знакомство и настройка

Полный стартовый гайд по самой популярной камере на ESP32. Подключение, прошивка, запуск веб-сервера, съёмка фото на SD-карту по кнопке и подготовка к фотоловушке. Всё с нуля и за 15 минут.

ESP32-CAM OV2640 подключение

Характеристики ESP32-CAM (AI-Thinker)

  • Камера OV2640 2 МП (UXGA 1600×1200)
  • Wi-Fi + Bluetooth 4.2
  • Слот microSD (до 4 ГБ официально, работает до 128 ГБ)
  • 4 МБ PSRAM — хватает на видео и стриминг
  • Встроенная вспышка (GPIO4)
  • Питание 5 В (встроенный регулятор)

Как прошить (два способа)

  1. Классика: FTDI-программатор 3.3 В
    → GPIO0 → GND (только на время прошивки)
    → U0R (GPIO3) → TX программатора
    → U0T (GPIO1) → RX программатора
  2. Удобно: готовая плата с кнопками Flash/Reset

Установка в Arduino IDE

  1. Файл → Настройки → Дополнительные ссылки:
    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
  2. Инструменты → Плата → Менеджер плат → ESP32 → Установите последнюю версию
  3. Выберите плату: AI Thinker ESP32-CAM
  4. Порт → ваш 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() {}

Инициализирует камеру AI-Thinker и карту SD_MMC.
Считает номер следующей фотографии из EEPROM и увеличивает его на 1.
Делает фото и сохраняет его на SD-карту под именем /PICTURE.jpg.
Сохраняет обновлённый номер в EEPROM.
После съёмки уходит в глубокий сон (esp_deep_sleep_start()).

Что будет дальше (серия уроков)

  1. Фотоловушка на PIR HC-SR501
  2. Видеоловушка (запись 10–15 сек)
  3. Отправка фото в Telegram
  4. Автономная работа от аккумулятора + глубокий сон
  5. Распознавание лиц + доступ по лицу

Заключение

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 и разместите устройство ближе к роутеру.

📁 Скачать примеры