Попался мне под руку модуль ESP32-CAM, включающий в себя, собственно, ESP32, а также камеру OV2640. Модуль является довольно-таки популярным решением, так что не обойдем стороной нюансы и вопросы, связанные с его использованием. А в этой статье организуем быстрый старт с ESP32-CAM. И, конечно, старт с этой платой нельзя считать полноценным без того, чтобы задействовать основные функции - а именно Wi-Fi подключение и получение видео-потока с камеры.
Начнем с более подробного рассмотрения:

На плате присутствуют:
- Беспроводной модуль ESP32-S с интегрированным Wi-Fi и Bluetooth контроллерами.
- Камера OV2640 - идет отдельно, но на плате предусмотрен разъем для ее подключения.
- Разъем для карт памяти micro-SD.
- Светодиод, который, если придерживаться логических соображений, видимо призван играть роль вспышки.
И, поскольку ESP32 не просто реализует связь по беспроводным интерфейсам, но и является полноценным контроллером сам по себе, то на плате его сигналы выведены на штыревые разъемы для дальнейшего использования. ESP32 имеет:
- 32-разрядный процессор, с тактовой частотой 160 или 240 МГц.
- Wi-Fi: 802.11 b / g / N
- Bluetooth: v4.2 BR/EDR and BLE
- Большое количество периферийных модулей, в том числе:
- SPI x 4
- ADC
- DAC x 2
- UART x 3
- CAN
- I2C x 2
- 520 КБ SRAM
И это еще далеко не полный список. Прошивается ESP32 по UART, поэтому я взял для этих целей USB-UART переходник на базе PL2303 (не USB-RS232(!), у этого переходника соответствующие требуемым уровни - 3.3 В):

Для подключения используются выводы:
- GPIO1 - U0TXD - подключается к Rx UART.
- GPIO3 - U0RXD - подключается к Tx UART.
Кроме того, для программирования модуля необходимо подтянуть вывод GPIO0 к земле. Соответственно, по окончанию прошивки подтяжку надо убрать. И вот так в итоге выглядит полное подключение:

Причем при подключении питания через вход 3.3В наблюдалось большое количество разнообразных проблем - прошивалось через раз, работать модуль отказывался в принципе и т. д. И эти проблемы разом устранились при подаче 5В питания через соответствующий вход (как на схеме выше).
Но при этом напряжение логических уровней на входах - строго 3.3 В! Сигналы 5 В могут повредить контроллер.
На этом с физическим подключением заканчиваем.
Итак, для быстрого запуска ESP32-CAM используем существующие примеры и библиотеки для Arduino IDE. И, поскольку я лично Arduino IDE никогда не пользовался, да и не собирался, то переходим к Шагу 0.
Шаг 0.
Установка Arduino IDE. С этим все просто - скачиваем с официального сайта, устанавливаем и запускаем.
Шаг 1.
Теперь в свежеустановленную IDE необходимо интегрировать поддержку нашего модуля ESP32. Идем в настройки (File - Preferences) и в нижней части окна настроек в Additional Boards Manager URLs добавляем строку:
https://dl.espressif.com/dl/package_esp32_index.json
В итоге получаем следующее:

Небольшое дополнение - если у вас в этой строке уже сохранена какая-либо ссылка (или ссылки), то можно без проблем добавить еще одну, разделять их следует просто запятой:
https://dl.espressif.com/dl/package_esp32_index.json, https://link2.com/dl/file2.json, https://link3.com/dl/file3.json
На этом закрываем окно настроек и переходим к Шагу 2.
Шаг 2.
Переходим в Boards Manager: Tools - Board - Boards Manager:

В открывшемся окне в поиске вводим "esp32", получаем один вариант и нажимаем на Install:

Ожидаем завершения операции и переходим к следующему этапу. Только предварительно в Tools - Board - ESP32 Arduino выбираем используемую плату. Разработчики IDE периодически перетасовывают и изменяют список доступных плат, итоговая задача тем не менее проста - нужно найти в списке свою и выбрать ее.
Шаг 3.
Открываем в Arduino IDE пример для работы с камерой. Для этого следуем в File - Examples - ESP32 - Camera - CameraWebServer:

Получаем готовый проект с инициализацией в функции setup() и основным циклом программы в функции loop().
Шаг 4.
Теперь необходимо немного изменить код для того, чтобы плата и камера успешно заработали. Первым делом выбираем модель камеры. Осуществляется это комментированием ненужного и раскомментированием нужного:
// Select camera model //#define CAMERA_MODEL_WROVER_KIT //#define CAMERA_MODEL_ESP_EYE //#define CAMERA_MODEL_M5STACK_PSRAM //#define CAMERA_MODEL_M5STACK_WIDE #define CAMERA_MODEL_AI_THINKER
Второе изменение заключается в установке имени сети и пароля для подключения по Wi-Fi. К примеру:
const char* ssid = "home"; const char* password = "pass1234";
На этом с кодом заканчиваем и переходим к прошивке.
Шаг 5.
Подключение мы уже осуществили, так что на этом этапе чисто программные моменты. В меню Tools нам нужно задать актуальные параметры для программирования платы, в частности, номер COM-порта (плату мы уже выбрали на Шаге 2). Вот список настроек для моей платы:

Шаг 6.
Прошиваем плату, для этого нажимаем кнопку upload, не забыв предварительно подтянуть пин GPIO0 к земле:

Завершающая часть успешного лога прошивки выглядит примерно так:
Compressed 3072 bytes to 119... Wrote 3072 bytes (119 compressed) at 0x00008000 in 0.0 seconds (effective 1068.5 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin...
Шаг 7.
Отключаем подтяжку GPIO0 и запускаем Serial Monitor (Tools - Serial monitor):

Теперь можем перезапустить плату кнопкой Reset и на экране появятся строки, сигнализирующие об успешном подключении к сети Wi-Fi:
WiFi connected Starting web server on port: '80' Starting stream server on port: '81' Camera Ready! Use 'http://192.168.0.104' to connect
Шаг 8.
Собственно, остается только перейти в браузере по указанному ip-адресу, чтобы наглядно увидеть результат работы программы. Далее находим внизу кнопку Start Stream и получаем изображение с OV2640:


Можно потестировать имеющиеся настройки камеры, в частности интересны режимы распознавания лица. Кстати я видел много комментариев на разных площадках, что начиная с определенной версии эта функция работать перестала. Но на практике я с проблемами не столкнулся - все работает более чем корректно.
Включаем Face Detection и Face Recognition и далее кнопкой Enroll Face можно зарегистрировать человека. И впоследствии камера определит, находится ли в кадре зарегистрированное лицо или некое другое. В общем, все это можно попробовать, а наша сегодняшняя задача на этом выполнена, до скорых встреч 🤝




Добрый день.
Сделал все по инструкции, при загрузке скетча пишет следующее: "Глобальные переменные используют 53552 байт (16%) динамической памяти, оставляя 274128 байт для локальных переменных. Максимум: 327680 байт.
Скетч слишком большой; прочитайте http://www.arduino.cc/en/Guide/Troubleshooting#size
Ошибка компиляции для платы ESP32 Wrover Module."
В чем может быть причина, и как исправить?
А модуль точно такой же как на фото в статье?
Это инструкция для ESP 32 CAM. А в твоем комменте "ошибка компиляции ESP32 Wrover Module". У него даже камеры нет. Похоже, ты не ту плату выбрал в компиляторе. Или автор прикалывается.
Выбрать правильно партицию или другую плату.
AI THINKER работает 100%
У меня заработало так
У меня пишет "Ошибка компиляции для платы AI Thinker ESP32-CAM" что делать?
На этапе 7. После перезагрузки модуля в мониторе порта не читаемый текст и кубики. Не понять на какой ip заходить. И в сетях нет ssid камеры. Что делать?
Видимо проблема с кодировкой.
Если я правильно понял, то в сети и не будет ssid камеры. Это модуль должен подключиться к имеющейся сети wifi. А после этого в мониторе порта появится wifi conected итд. И появится адрес к которому прицепилась эта IP камера. Тогда на нее и можно будет зайти.
выбрать справа внизу скорость порта 115200
А что означает такой вывод в монитор, не подскажете?
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:10944
load:0x40080400,len:6388
entry 0x400806b4
И у меня такое же выводит, что делать кто подскажет????
раскомментированы несколько моделей камер, внимательно посмотрите скетч.
Это как это? у UART/RS232 вообще же уровни +/- 12 !
Добрый день, это разные вещи, RS232: -12В / 12В. Модуль UART у микроконтроллеров имеет уровни, соответствующие его технологии. К примеру, USART STM32 - 3.3В / 0В, UART AVR - 5В / 0В.
хорошо бы это в статье описать, а то я уже подключил свой USB/RS232 переходник к ESP32-CAM и видимо спалил ее!
Добавлю )
у меня не работало
Всё работает! Плата немного другая подключился по адресу 192.168.1.230
Отлично!
Подскажите как сделать этот модуль точкой доступа, чтобы можно было передать изображение с камеры на телефон без роутера?
Вот простейший пример для точки доступа накидал:
/*---------------------------------------------------------------------------*/ #include <WiFi.h> /*---------------------------------------------------------------------------*/ const char* SSID = "My Access Point"; const char* pass = "11223344"; WiFiServer server(80); /*---------------------------------------------------------------------------*/ void setup() { WiFi.softAP(SSID, pass); IPAddress ip = WiFi.softAPIP(); Serial.print("My IP address is: "); Serial.println(ip); server.begin(); } /*---------------------------------------------------------------------------*/ void loop() { // Handle clients etc } /*---------------------------------------------------------------------------*/Но(!) Я рекомендую в сторону асинхронного сервера сразу смотреть, можно использовать библиотеку: https://github.com/me-no-dev/ESPAsyncWebServer
Тогда что-то вроде:
/*---------------------------------------------------------------------------*/ #include <WiFi.h> #include <WiFiClient.h> #include <WiFiServer.h> #include <AsyncTCP.h> #include <ESPAsyncWebServer.h> /*---------------------------------------------------------------------------*/ const char* SSID = "My Access Point"; const char* pass = "11223344"; AsyncWebServer server(80); /*---------------------------------------------------------------------------*/ void setup() { WiFi.softAP(ssid, password); IPAddress ip = WiFi.softAPIP(); Serial.print("My IP address is: "); Serial.println(ip); server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) { request->send(200, "text/plain", "Hello World"); }); server.begin(); } /*---------------------------------------------------------------------------*/ void loop() { } /*---------------------------------------------------------------------------*/А, ну это, соответственно, если веб-сервер потребуется поднять. Если не нужно, то все, что касается сервера выкидывается.
Добрый день! Не возникало ли у вас проблем с портами? Уже всё перебрал, драйвера переустановил, но причину понять не могу... после компиляции:
Начал с вашей статьи, но у вас почему то библиотеку одну не видел. Эту проблему я решил, нашел на англоязычном сегменте решение - написал другой json. Также у них тоже была проблема с портами, но в чем дело я так и не понял... может, кто знает?
Добрый день! Это не на macOS случайно?
добрый вечер! нет, windows
А порт в системе отображается? В диспетчере устройств.
Да, проверял. Более того, подключаюсь к тому, где драйвер (остальные видимо для bluetooth), но снова что-то не то
А можете скрин скинуть с com-портами?
Подсоединить, раскомментировать... деграданство какое то. Где можно узнать какие сигналы подавать на пины камеры? По даташиту не получается(
https://github.com/SimpleMethod/STM32-OV2640
https://github.com/STMicroelectronics/stm32-ov2640
ничего не работает!!!
где вы берёте эти библиотеки???
всё время пишет ошибку
разместите не ссылку а архив на библиотеку esp_cam.h
ничего не работает в ардуино, три месяца бьёмся всё перепробовали
Доброго времени суток, в чем конкретно проблема/ошибка?
Пару недель назад на удаленном объекте надо было ESP32 прошить из Arduino IDE, скидывал ребятам ссылку на статью, все гладко прошло без моего участия.
Я настолько заинтересовался, что провел эксперимент! Для эксперимента нужен абсолютно незнакомый с данной тематикой человек, в моем случае рядом оказался подходящий бухгалтер. Бухгалтер отличный, но о существовании микроконтроллеров как таковых не подозревает) Итак, дал статью и попросил на своем ПК повторить в точности шаги с нуля - все получилось, установилось, открылось, собралось, электрическими подключениями я уже мучать не стал...
Добрый день, появляется ошибка на 7 шаге:
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:1344
load:0x40078000,len:13964
load:0x40080400,len:3600
entry 0x400805f0
и тишина ...
подскажите пожалуйста, сталкивался ли кто-нибудь с подобной проблемой ?
Добрый день, а какой именно модуль?
доброго времени суток, подскажите пожалуйста, возможно задать в настройках камеры, чтоб она давала фото перевернутым на 180градусов, именно в прошивке самой камеры?! спасибо!
Доброго времени!
Модуля нет под рукой проверить, навскидку можно попробовать функцию set_vflip(), что-то вроде:
Второй аргумент - 0 или 1. По скетчу примера можно посмотреть, какие по умолчанию значения используются.
Автор - добавьте в статью схему подключения:
(Прошивка ESP32-Camera используя Arduino UNO)
Всё остальное подходит из статьи и работает.
Проскакивала тут уже такая проблема, но никто не решил ее. Проблема в том что в ком порту белиберда, пробовал и скорости менять и настройки. На FT232 не работает и на Prolific 2303 тоже самое. ESP8266 пишет все как положено на скорости 74880 бод. Скорости для ESP32CAM ставил разные, ничего не помогает. Среда ARDUINO 1.8.9 при заливке выдает такую ошибку:
Arduino: 1.8.9 (Windows 7), Плата:"AI Thinker ESP32-CAM, 240MHz (WiFi/BT), QIO, Huge APP (3MB No OTA/1MB SPIFFS), 80MHz, None, Disabled"
ВНИМАНИЕ: Категория '' в библиотеке ESP Insights не является действительной. Установка на 'Uncategorized'
ВНИМАНИЕ: Категория '' в библиотеке ESP RainMaker не является действительной. Установка на 'Uncategorized'
ВНИМАНИЕ: Категория '' в библиотеке WiFiProv не является действительной. Установка на 'Uncategorized'
Скетч использует 1506945 байт (47%) памяти устройства. Всего доступно 3145728 байт.
Глобальные переменные используют 70212 байт (21%) динамической памяти, оставляя 257468 байт для локальных переменных. Максимум: 327680 байт.
esptool.py v4.5.1
Serial port COM21
Connecting......................................
A fatal error occurred: Failed to connect to ESP32: Invalid head of packet (0xFF): Possible serial noise or corruption.
For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html
выбранный последовательный порт For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html
не существует или плата не подключена к нему
Всем доброго время! Машинку сделал, прошил. Управление работает - норм. При нажатии на кнопку "Старт" камера выдаёт картинку (как будто она склеена из двух, и цветность - зелень какая-то). Но это картинка а не видео и через секунд 5 она пропадает на совсем, пока ESP не перезагрузишь. Не понимаю с чем связано. Кто-то в этом разбирается?
Доброго времени ) А какая плата используется?
сделал все по инструкции, в итоге, serial monitor пишет всё таким знаком�
Обычно так бывает, если baudrate неверный.
спасибо, теперь нормально
как это исправить?
Навскидку - возможно несколько типов камер выбраны или не тот тип.
как понять какая у меня камера?
Как модуль выглядит? Какая модель?
камера: 8225n v2.0 171026
Ну вероятно CAMERA_MODEL_AI_THINKER, можете сам модуль сфотографировать?
вот модуль
А он прошился нормально?
да
В Tools > Board выбран AI Thinker и задефайнен тоже он?
Скиньте по возможности все настройки, которые с железом связаны, из Arduino IDE.
Он кстати постоянно перезапускается с таким логом или просто не запускается?
load:0x40080404,len:3504
entry 0x400805cc
...ets Jul 29 2019 12:21:46
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4832
load:0x40078000,len:16460
load:0x40080400,len:4
load:0x40080404,len:3504
entry 0x400805cc
Выдает такую ошибку после перезапуска платы, что делать?Раскоментировал ТОЛЬКО 1 МОДЕЛЬ камеры #define CAMERA_MODEL_AI_THINKER
а на самой камере(на шлейфе) если что написано
HDF3M
-811
-V1
T
БУДУ ОЧЕНЬ РАД И БЛАГОДАРЕН ВАШЕЙ ПОМОЩИ МУЧАЮСЬ ЦЕЛЫЙ ДЕНЬ
Доброго времени суток!
Вообще конкретно этот лог выглядит как нормальный процесс запуска.
Еще раз здравствуйте!Спасибо за ваш ответ,если это нормальный лог запуска то где IP?
Это из Serial Monitor лог?
Да.
Скинь скрин с логом плз и модель платы.
скрин лога
вот фото платы(брал из интернета но плата точно ESP32-CAM)
вот нашел фото
Видимо на этапе подключения к сети уже проблемы, добавь в setup() вывод в лог в разных местах, чтобы понять, до какого этапа все нормально (если вообще setup() вызывается)
судя по всему
ошибка кода здесь (не вывелась цифра 7)
есть идеи что можно сделать?
SSID и пароль точно верные? Там видно, что точки выводятся, значит плата пытается подключиться, но статус в WL_CONNECTED не переходит.
Перезагрузка роутера помогла!
СПАСИБО ВАМ ОГРОМНОЕ!
Даже спустя 6 лет после публикации вы помогаете начинающим как я)
Отлично, рад что все получилось!