среда, 26 июля 2023 г.

Фотоаппарат на ESP32 CAM

 Популярный и недорогой (на момент написания данной статьи) модуль ESP32-CAM (http://alii.pub/69872w) имеет на своей плате разъем для подключения камеры и слот для подключения SD карты а также мощный микроконтроллер и кнопку т.е. имеет всё необходимое для постройки, на его основе, компактного, недорогого малогабаритного фотоаппарата. Также для того чтобы записать прошивку в модуль нужен USB-UART конвертер который нужно соединить с модулем по схеме:

О том как настроить среду Arduino и загрузить скетч в данный модуль можно почитать статью на странице: https://electe.blogspot.com/2022/03/esp32-cam.html. Готовый скетч фотоаппарата также уже существует поэтому не обязательно "изобретать велосипед"  и писать его заново. Можно просто скачать на странице: https://randomnerdtutorials.com/esp32-cam-take-photo-save-microsd-card/ после разобраться как он работает и возможно в последствии переделывать его под свои нужды. Резисторы в схеме выше нужны для ограничения тока на случай перепутывания выводов при подключении. Их можно заменить перемычками если защита от ошибок подключения не нужна. В скетче всю самую сложную работу с камерой и SD картой, на низком уровне, делают библиотеки поэтому скетч получается просто и короткий:
В начале скетча имеются подключения заголовочных файлов библиотек. Константа EEPROM_SIZE должна быть равна единице для того чтобы данный скетч исправно работал. Следующие константы задают пины для камеры. Переменная pictureNumber нужна для того чтобы фотографии имели названия с разными порядковыми номерами. строка
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
блокирует датчик понижения напряжения. Serial.begin(115200) -включает последовательный порт для отладки.
Далее заполняется структура config настройки камеры. Далее в строке
esp_err_t err = esp_camera_init(&config);
происходит инициализация камеры, после инициализируется SD карта функцией SD_MMC.begin(). Строкой
fb = esp_camera_fb_get();
делается фотография. Строки:
EEPROM.begin(EEPROM_SIZE);
  pictureNumber = EEPROM.read(0) + 1;
нужны для чтения текущего номера фотографии чтобы название следующей фотографии было иным нежели название текущей. В переменную path записывается путь на SD карте для хранения фотографии. Далее открывается файл, в него записывается фотография и файл закрывается. В строке: esp_camera_fb_return(fb);  освобождается переменная для хранения фотографии. Далее выключается светодиод и осуществляется перевод модуля в режим сна до следующей перезагрузки. 
Посмотреть видеорассказ о том как сделать фотоаппарат на модуле ESP32-CAM можно на видео: