Top.Mail.Ru

Быстрый старт с ESP32 и камерой OV2640. Модуль ESP32-CAM.

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

Начнем с более подробного рассмотрения:

Модуль ESP32-CAM.

На плате присутствуют:

  • Беспроводной модуль 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 В):

USB-UART на базе PL2303.

Для подключения используются выводы:

  • GPIO1 - U0TXD - подключается к Rx UART.
  • GPIO3 - U0RXD - подключается к Tx UART.

Кроме того, для программирования модуля необходимо подтянуть вывод GPIO0 к земле. Соответственно, по окончанию прошивки подтяжку надо убрать. И вот так в итоге выглядит полное подключение:

Схема подключения ESP32-CAM.

Причем при подключении питания через вход 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

В итоге получаем следующее:

ESP32 в Arduino IDE.

Небольшое дополнение - если у вас в этой строке уже сохранена какая-либо ссылка (или ссылки), то можно без проблем добавить еще одну, разделять их следует просто запятой:

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:

Boards Manager Arduino IDE.

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

Библиотеки для ESP32.

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

Шаг 3.

Открываем в Arduino IDE пример для работы с камерой. Для этого следуем в File - Examples - ESP32 - Camera - CameraWebServer:

Camera Web Server пример.

Получаем готовый проект с инициализацией в функции 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 к земле:

Arduino IDE upload.

Завершающая часть успешного лога прошивки выглядит примерно так:

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:

Пример Web Server.
Видео-поток с камеры OV2640.

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

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

Подписаться
Уведомить о
guest

41 комментариев
Старые
Новые
Межтекстовые Отзывы
Посмотреть все комментарии
Никита
Никита
4 лет назад

Добрый день.
Сделал все по инструкции, при загрузке скетча пишет следующее: "Глобальные переменные используют 53552 байт (16%) динамической памяти, оставляя 274128 байт для локальных переменных. Максимум: 327680 байт.
Скетч слишком большой; прочитайте http://www.arduino.cc/en/Guide/Troubleshooting#size
Ошибка компиляции для платы ESP32 Wrover Module."
В чем может быть причина, и как исправить?

Денис
Денис
Ответ на комментарий  Никита
4 лет назад

Это инструкция для ESP 32 CAM. А в твоем комменте "ошибка компиляции ESP32 Wrover Module". У него даже камеры нет. Похоже, ты не ту плату выбрал в компиляторе. Или автор прикалывается.

Gres
Gres
Ответ на комментарий  Никита
3 лет назад

Выбрать правильно партицию или другую плату.

Deem
Deem
Ответ на комментарий  Никита
1 год назад

AI THINKER работает 100%

Deem
Deem
Ответ на комментарий  Deem
9 месяцев назад

У меня заработало так

ai_thinker_esp32-cam
Александр
Александр
3 лет назад

На этапе 7. После перезагрузки модуля в мониторе порта не читаемый текст и кубики. Не понять на какой ip заходить. И в сетях нет ssid камеры. Что делать?

Вадим
Вадим
Ответ на комментарий  Александр
3 лет назад

Если я правильно понял, то в сети и не будет ssid камеры. Это модуль должен подключиться к имеющейся сети wifi. А после этого в мониторе порта появится wifi conected итд. И появится адрес к которому прицепилась эта IP камера. Тогда на нее и можно будет зайти.

Gres
Gres
Ответ на комментарий  Александр
3 лет назад

выбрать справа внизу скорость порта 115200

Сергей
Сергей
3 лет назад

А что означает такой вывод в монитор, не подскажете?

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

Игорь
Игорь
Ответ на комментарий  Сергей
2 лет назад

И у меня такое же выводит, что делать кто подскажет????

Игорь
Игорь
Ответ на комментарий  Сергей
2 лет назад

раскомментированы несколько моделей камер, внимательно посмотрите скетч.

Дмитрий
Дмитрий
2 лет назад

Но при этом напряжение логических уровней на входах - строго 3.3 В! Сигналы 5 В могут повредить контроллер.

Это как это? у UART/RS232 вообще же уровни +/- 12 !

Дмитрий
Дмитрий
Ответ на комментарий  Aveal
2 лет назад

хорошо бы это в статье описать, а то я уже подключил свой USB/RS232 переходник к ESP32-CAM и видимо спалил ее!

слава
слава
2 лет назад

у меня не работало

Игорь
Игорь
2 лет назад

Всё работает! Плата немного другая подключился по адресу 192.168.1.230

Максим
Максим
1 год назад

Подскажите как сделать этот модуль точкой доступа, чтобы можно было передать изображение с камеры на телефон без роутера?

Сергей Доренко
Сергей Доренко
1 год назад

Добрый день! Не возникало ли у вас проблем с портами? Уже всё перебрал, драйвера переустановил, но причину понять не могу... после компиляции:

esptool.py v4.5.1

Serial port COM7

Connecting...

A serial exception error occurred: Write timeout

Note: This error originates from pySerial. It is likely not a problem with esptool, but with the hardware connection or drivers.

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

 не существует или плата не подключена к нему

Начал с вашей статьи, но у вас почему то библиотеку одну не видел. Эту проблему я решил, нашел на англоязычном сегменте решение - написал другой json. Также у них тоже была проблема с портами, но в чем дело я так и не понял... может, кто знает?

Сергей Доренко
Сергей Доренко
Ответ на комментарий  Aveal
1 год назад

добрый вечер! нет, windows

Сергей Доренко
Сергей Доренко
Ответ на комментарий  Aveal
1 год назад

Да, проверял. Более того, подключаюсь к тому, где драйвер (остальные видимо для bluetooth), но снова что-то не то

Руслан
Руслан
1 год назад

Подсоединить, раскомментировать... деграданство какое то. Где можно узнать какие сигналы подавать на пины камеры? По даташиту не получается(

Нуб
Нуб
1 год назад

ничего не работает!!!
где вы берёте эти библиотеки???
всё время пишет ошибку
разместите не ссылку а архив на библиотеку esp_cam.h
ничего не работает в ардуино, три месяца бьёмся всё перепробовали

Юрий
Юрий
1 год назад

Добрый день, появляется ошибка на 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
и тишина ...

подскажите пожалуйста, сталкивался ли кто-нибудь с подобной проблемой ?

Вадим
Вадим
1 год назад

доброго времени суток, подскажите пожалуйста, возможно задать в настройках камеры, чтоб она давала фото перевернутым на 180градусов, именно в прошивке самой камеры?! спасибо!

Алексей
Алексей
1 год назад

Автор - добавьте в статью схему подключения:

comment image

(Прошивка ESP32-Camera используя Arduino UNO)
Всё остальное подходит из статьи и работает.

Павел
Павел
7 месяцев назад

Проскакивала тут уже такая проблема, но никто не решил ее. Проблема в том что в ком порту белиберда, пробовал и скорости менять и настройки. На 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
 не существует или плата не подключена к нему

Alexander
Alexander
6 месяцев назад

Всем доброго время! Машинку сделал, прошил. Управление работает - норм. При нажатии на кнопку "Старт" камера выдаёт картинку (как будто она склеена из двух, и цветность - зелень какая-то). Но это картинка а не видео и через секунд 5 она пропадает на совсем, пока ESP не перезагрузишь. Не понимаю с чем связано. Кто-то в этом разбирается?

41
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x