суббота, 5 марта 2022 г.

Апгрейд прошивки ESP32-CAM включение светодиода на плате

Микроконтроллеры ESP32 имеют встроенные контроллеры WIFI а также достаточное количество памяти и производительности процессора для работы с камерой с низким разрешением и передачи потокового видео радиосигналами на другое устройство например на компьютер, смартфон или какой либо другой гаджет с wifi и экраном. Как правило в продаже имеются отладочные платы с такими микроконтроллерами на которых имеется разведенная антенна и обвязка для полноценной работы wifi а также стабилизатор напряжения (хотя к этому и надписям на плате нужно быть внимательнее чтобы случайно не испортить плату подачей неправильного напряжения на не тот пин). Также такие отладочные платы, при своих возможностях, отличаются небольшой ценой. Для работы именно с камерой имеются платы ESP32-CAM (http://alii.pub/69872w) на которых есть разъем для подключения камеры (например OV2640 или аналогичной). Обычно можно заказать данную плату вместе с камерой (которую позже надо будет аккуратно самостоятельно подключить в разъем так чтобы не сломать разъем или шлейф с дорожками от камеры) а также с дополнительной платой со стабилизатором напряжения (чтобы модуль можно было запитывать как  и Arduino через пин vin) и USB-UART конвертером чтобы можно было удобно загружать прошивку по USB проводу. При использовании данной платы также необходимо учитывать что микроконтроллер 3х вольтовый (как STM32) и на его пины нельзя подавать 5 и более вольт. Записать прошивку можно используя среду разработки Arduino IDE с установленной библиотекой для ESP32. Для организации WIFI камеры наблюдения можно использовать готовый пример поставляемый вместе с библиотекой. Однако в данный пример не дает возможности как либо еще по другому взаимодействовать с платой кроме как использовать камеру подключенную к ней. Если есть желание подключить какой либо дополнительный дистанционно управляемый орган управления то можно например сделать его в виде отдельного устройства например на обычной ардуине и радиомодуле. Но зачем это делать если уже есть один работающий канал связи по WIFI? Производительности микроконтроллера ESP32 и свободных пинов вполне хватит для дополнительных функций а пример с камерой можно дополнить небольшим количеством строк кода чтобы например удаленно включить встроенный на плате светодиод или подать 1 или 0 на свободный пин данной отладочной платы. Для загрузки прошивки в ESP32-CAM можно использовать USB-UART переходник подключенный по схеме:

Рисунок 1 - Схема для загрузки прошивки в ESP32-CAM

В данной схеме имеются необязательные резисторы для ограничения тока при неправильном подключении, а также переключатель для включения режима прошивки. Написать программу для ESP32 можно в какой нибудь специальной среде разработки коих не мало. Например можно использовать среду Arduino IDE с подключенной библиотекой для ESP32. Вместе с этой библиотекой также поставляется пример для данной платы для "превращения" её в WIFI камеру. Чтобы использовать данную библиотеку нужно установить последнюю версию Arduino IDE (или по крайней мере ту с которой можно использовать данную библиотеку). Далее нужно зайти в настройки во вкладке файл:

В появившемся окне в поле "Дополнительные ссылки для менеджера плат" вписать строку:

https://dl.espressif.com/dl/package_esp32_index.json

Если в данном поле уже имеется какая то другая строка то новую следует добавить через запятую. Далее нужно перейти в менеджер плат по вкладке инструменты
Найти библиотеку esp32 и установить
После установки библиотеки можно найти пример для ESP32-CAM по вкладке файл
Открыв пример нужно закоментировать строку 

#define CAMERA_MODEL_WROVER_KIT

и раскоментировать строку

//#define CAMERA_MODEL_AI_THINKER
Далее в *ssid записывается логин от WIFI роутера а в *password записывается пароль от WIFI роутера
После этого можно откомпилировать и вгрузить скетчь в плату (она при этом должна быть подключена к компьютеру через USB-UART переходник и переключатель режима загрузки должен быть замкнут) нажатием круглой кнопки со стрелочкой на право (при нормальном положении монитора) "загрузка" в Arduino IDE. Если скетчь нормально откомпилируется и загрузиться в плату то после этого можно перевести плату в обычный режим путем размыкания контактов переключателя режима загрузки. После чего открыть монитор последовательного порта и нажать кнопку перезагрузки на плате. В мониторе порта должен будет появиться ip адрес модуля ESP32-CAM. Если этот адрес в писать в поисковую строку браузера и перейти по нему то должен появиться веб интерфейс через который можно осуществлять просмотр потокового видео или фотографий от камеры а также изменять некоторые настройки. В этом интерфейсе внизу есть пара переключателей "Face Detection" и "Face Recognition".
Эти два переключателя отвечают за не самые нужные функции поэтому их можно задействовать для чего нибудь другого или дополнить чем нибудь другим. Для того чтобы не переделывать веб интерфейс можно использовать уже имеющиеся переключатели. При переключении переключателя отправляется запрос на модуль где вызывается функция cmd_handler() которую можно найти перейдя по вкладке app_httpd.cpp. При переключении переключателя "Face Detection" выполниться код в ветвлении else if(!strcmp(variable, "face_detect")) { } Поэтому в фигурные скобки можно поместить что нибудь, например подачу лог. 1 или лог. 0 на какой либо из свободных пинов или на пин со встроенным светодиодом (на данной плате это пин 4). Аналогично можно использовать и участок для переключателя "Face Recognition".
После компиляции и загрузки скетча, с данными поправками, появится возможность управлять светодиодом на плате через web интерфейс переключателями "Face Detection" и "Face Recognition". Видео по данной теме: