RisalDash RisalDash

Гайд · ESP32-CAM · Камера

Как выжать хорошие фото из ESP32-CAM

ESP32-CAM соединяет ESP32 с 2 Мп камерой OV2640 за пару долларов — но плохой конфиг даёт огромные, размытые и медленно уходящие фото. Всё решают три настройки: формат пикселя, JPEG-качество и framesize. Вот что делает каждая и значения, что просто работают для Telegram, Google Drive и веб-дашборда.

ESP32-CAMOV2640КамераJPEGESP32
Настройки изображения ESP32-CAM / OV2640: формат пикселя, JPEG-качество и framesize
Формат, качество, разрешение — три строки конфига, что решают размер, чёткость и скорость.

1. Формат пикселя — бери JPEG

OV2640 умеет отдавать сырые форматы, но на голодной по памяти ESP32 это ловушка. Сырой RGB565 или YUV422 кадр не сжат — картинка 800×600 это почти мегабайт, она и не влезет спокойно, и не улетит быстро. JPEG сжимает её аппаратно до доли размера — так что для всего, что хранишь или шлёшь по Wi-Fi, это единственный разумный выбор.

ФорматСжатиеРазмерДля чего
JPEGвысокое (аппаратно)малыйTelegram, Drive, веб — почти всё
RGB565нет (сырой)большойобработка на устройстве / дисплей
YUV422нет (сырой)большойобработка цвета, конвертация
Grayscaleнизкоесреднийпростое зрение / детекция лиц

В коде — одна строка: config.pixel_format = PIXFORMAT_JPEG;

2. JPEG-качество — крутилка 0–63

Запутанно, но jpeg_quality — это на самом деле число сжатия: меньше значит лучше качество и больше файл, больше — сильнее сжатие, меньше и размытее. Диапазон 0–63.

Компромисс jpeg_quality: меньше значение = лучше и больше, больше = хуже и меньше
ЗначениеКачествоЗаметки
5очень чётко ★★★★★отличная детализация, большой файл
10чётко ★★★★хорошее качество, ещё крупный — рекомендуется
12сбалансировано ★★★сбалансированное качество, средний размер
20экономно ★★качество падает, маленький файл
30+сильное сжатие ★низкое качество, крошечный файл

Золотая середина: качество 10–12 — красиво и разумный размер. (На многих платах совсем низкие 0–4 требуют PSRAM, иначе съёмка падает.)

3. Framesize — разрешение

Потолок OV2640 — 1600×1200 (UXGA, 2 Мп), но больше не всегда лучше: каждый шаг вверх множит размер файла и время отправки. Бери наименьшее разрешение, что всё ещё показывает нужное.

Размеры кадра OV2640 в масштабе: QVGA, VGA, SVGA, XGA, SXGA, UXGA
РежимРазрешениеПикселейДля чего
QQVGA160×12019 200крошечное, экономия трафика
QVGA320×24076 800лёгкий мониторинг
CIF400×296118 400сбалансировано
VGA640×480307 200стандартный realtime-мониторинг
SVGA800×600480 000выбор для Telegram и Drive
XGA1024×768786 432больше деталей
SXGA1280×10241 310 720детальные фото
UXGA1600×12001 920 000максимум (2 Мп)

Конфиг, что просто работает

Собери вместе — и получишь маленькое, чёткое, быстро уходящее фото, повседневный сетап ESP32-CAM:

#include "esp_camera.h"

camera_config_t config;
// ... конфиг пинов вашей платы ESP32-CAM ...
config.pixel_format = PIXFORMAT_JPEG;    // сжато → мало и быстро слать
config.frame_size   = FRAMESIZE_SVGA;    // 800×600 — золотая середина IoT
config.jpeg_quality = 10;                // 0..63, меньше = лучше (и больше)
config.fb_count     = 1;                 // один буфер кадра — экономит RAM

esp_camera_init(&config);

Дальше — под задачу: детальные фото → UXGA + качество 10; Telegram / Google Drive → SVGA + качество 10 (лучший универсал); быстрый мониторинг → VGA + качество 12. Больше разрешение — больше деталей, но крупнее файл и дольше отправка. И помни: OV2640 нужна ESP32 с PSRAM, чтобы буферить крупные кадры.

Показать поток вживую? Отдай его с платы в веб-дашборде.