Не могу настроить фото на esp32cam, использую esp_camera

Есть кто работал с ESP32-cam (Ai thinker)? Нужна помощь - получается плохое качество фото. Задача: сделать фото с помощью esp и сохранить его на карту памяти. Проблема заключается в том что фотографии получается очень тёмными, но при этом при использовании стандартного примера с веб сервером, на него выводится приемлемая картинка. Используется камера OV2640, microSD Apacer 4GB форматированная в FAT32.
Что уже пробовали сделать:
-меняли модуль камеры, использовали три разных камеры OV2640
-как только не изменяли настройки в коде, например баланс белого, контроль экспозиции и т.п.

Пример настроек, выдающих темную картинку:
sensor_t * s = esp_camera_sensor_get();
s->set_brightness(s, -2); // -2 to 2
s->set_contrast(s, 0); // -2 to 2
s->set_saturation(s, -2); // -2 to 2
s->set_special_effect(s, 2); // 0 to 6 (0 - No Effect, 1 - Negative, 2 - Grayscale, 3 - Red Tint, 4 - Green Tint, 5 - Blue Tint, 6 - Sepia)
s->set_whitebal(s, 1); // 0 = disable , 1 = enable
s->set_awb_gain(s, 1); // 0 = disable , 1 = enable
s->set_wb_mode(s, 0); // 0 to 4 - if awb_gain enabled (0 - Auto, 1 - Sunny, 2 - Cloudy, 3 - Office, 4 - Home)
s->set_exposure_ctrl(s, 1); // 0 = disable , 1 = enable
s->set_aec2(s, 1); // 0 = disable , 1 = enable
s->set_ae_level(s, 2); // -2 to 2
s->set_aec_value(s, 0); // 0 to 1200
s->set_gain_ctrl(s, 1); // 0 = disable , 1 = enable
s->set_agc_gain(s, 30); // 0 to 30
s->set_gainceiling(s, (gainceiling_t)6); // 0 to 6
s->set_bpc(s, 0); // 0 = disable , 1 = enable
s->set_wpc(s, 1); // 0 = disable , 1 = enable
s->set_raw_gma(s, 1); // 0 = disable , 1 = enable
s->set_lenc(s, 1); // 0 = disable , 1 = enable
s->set_hmirror(s, 0); // 0 = disable , 1 = enable
s->set_vflip(s, 0); // 0 = disable , 1 = enable
s->set_dcw(s, 1); // 0 = disable , 1 = enable
s->set_colorbar(s, 0); // 0 = disable , 1 = enable

почему яркость в -2?

Здравствуйте, пробовал менять все параметры, хоть как-то логически связанные, яркость в том числе. И у этих всех параметров пробовал выставлять разное значение.

попробуйте, параметры по умолчанию

s->set_brightness(s, 0);     // -2 to 2
s->set_contrast(s, 0);       // -2 to 2
s->set_saturation(s, 0);     // -2 to 2
s->set_special_effect(s, 0); // 0 to 6 (0 - No Effect, 1 - Negative, 2 - Grayscale, 3 - Red Tint, 4 - Green Tint, 5 - Blue Tint, 6 - Sepia)
s->set_whitebal(s, 1);       // 0 = disable , 1 = enable
s->set_awb_gain(s, 1);       // 0 = disable , 1 = enable
s->set_wb_mode(s, 0);        // 0 to 4 - if awb_gain enabled (0 - Auto, 1 - Sunny, 2 - Cloudy, 3 - Office, 4 - Home)
s->set_exposure_ctrl(s, 1);  // 0 = disable , 1 = enable
s->set_aec2(s, 0);           // 0 = disable , 1 = enable
s->set_ae_level(s, 0);       // -2 to 2
s->set_aec_value(s, 300);    // 0 to 1200
s->set_gain_ctrl(s, 1);      // 0 = disable , 1 = enable
s->set_agc_gain(s, 0);       // 0 to 30
s->set_gainceiling(s, (gainceiling_t)0);  // 0 to 6
s->set_bpc(s, 0);            // 0 = disable , 1 = enable
s->set_wpc(s, 1);            // 0 = disable , 1 = enable
s->set_raw_gma(s, 1);        // 0 = disable , 1 = enable
s->set_lenc(s, 1);           // 0 = disable , 1 = enable
s->set_hmirror(s, 0);        // 0 = disable , 1 = enable
s->set_vflip(s, 0);          // 0 = disable , 1 = enable
s->set_dcw(s, 1);            // 0 = disable , 1 = enable
s->set_colorbar(s, 0);       // 0 = disable , 1 = enable

почитать можно тут

Спасибо за помощь. С таким набором параметров проблема не ушла. На сайте, который Вы скинули, уже был. Есть еще варианты?

Эта камера не для фото, а для видео. Нужно несколько десятков кадров, прежде чем параметры устаканятся.

Здравствуйте, спасибо за ответ. Есть много примеров с хорошим фото с esp32cam, значит можно как-то этого добиться. Спустя несколько десятков кадров параметры не устаканились.

Дело не в пограмме, а в микросхеме ОЗУ (восьминожка, стоит рядом со стабилизатором). Китайцы туда при продаже модуля савят пустышку, потому как отдельно эта микросхема стоит чуть дороже самого модуля. А ресурсов микропоцессора не хватает, вот и получается у вас такие результаты. Я с этими модулями работал много. У всех тупо меняешь микросхему и всё начинает работать. Может сейчас и поменялось что то, но дуаю что вряд ли. Я обычно заказывал 6404L

1 лайк
  1. А как это определить программно, что ОЗУ нет реально?
  2. Может тыкнете носом, как вкл-откл видео (через Вайфай например), где это посмотреть и тп.

Хочу водосчетчики смотреть, но греется сильно, есть мысль вкл-посмотрел-откл. Иначе дырки надо в корпусе делать ))

Или так же просто фото самому себе слать, без разницы пока.

UPDATE: аа, всё, нашел!

Уже работает, непонятно только сколько жрет и выключает ли камеру.

Поставьте все в auto: и gain, и баланс. Остальные настройки вообще не трогайте. Поставьте качество jpeg равным, например, 4.

А чего не 2? Ниже 7 не имеет смысла, ИМХО.

unsigned int total;
  if ((total = heap_caps_get_total_size(MALLOC_CAP_SPIRAM) / 1024) > 0)
    printf("External SPIRAM total: %uMbytes, free: %u bytes\n", total / 1024, heap_caps_get_free_size(MALLOC_CAP_SPIRAM));
  else
    printf("No SPIRAM present\n");

где-то в коде мне попадалось про ОЗУ это, видимо есть всё.

Мне осталось только сделать чтобы не жрал по 160мА даром, думаю с какой стороны зайти. Просто с браузера чтобы вкл-откл делать. Или только вкл - а откл через время.

Смотреть я так понял проще в виде видео, жыпеги как-то то темные, то слишком светлые приходят, мне они пока не актуальны - достаточно глазами посмотреть, у меня неудобно водосчетчики стоят в мск, хоть какая-то польза будет от ардуинивания ))

А так 2шт у меня уже стоят в сортире, не глючат вроде, но жрут много, как-то это нехорошо. Напечатал к ним крепления, припаял круглые разъемы.

Виснет :). Размер файла между степенями сжатия 4 и 10 отличается в 5-6 раз.
С лупой не изучал отличия, камера так-то сама по себе честно сказать - говно.

…к слову, прошивка по вайфаю работает на удивление классно и быстро! быстрее, чем по кабелю. Там что, только частично обновляется прошивка чтоли? как-то удивительно быстро происходит. И удобно! поменял порт в Арудино ИДЕ на сетевой -и хоппа! поехало. Класс, не ожидал.

Со стороны пина pwdn на камере. Вроде бы пин 32. А после того, как камера погаснет (ей deinit надо вызвать перед тем как за пин 32 дергать), процессор сунуть в light sleep.

1 лайк

Да, это всё видел. В чужом коде не слишком удобно найти где что дергать. К тому же управление надо добавить, и чтобы вайфай оставался активным.

Вот как-раз пока тут писал подумал что идеально только включение сделать при заходе на адрес (сейчас там запускается стрим при этом), а отключать просто по таймеру. И проще, и не забудешь. Зашел - считал - закрыл браузер. Оно само через там 1-10минут, не важно, отключилось.