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

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

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

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

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

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

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

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

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

Александр
Александр
2 лет назад

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

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

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

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

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

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

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

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 и видимо спалил ее!

слава
слава
1 год назад

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

Игорь
Игорь
1 год назад

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

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

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

Сергей Доренко
Сергей Доренко
11 месяцев назад

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

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
11 месяцев назад

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

Сергей Доренко
Сергей Доренко
Ответ на комментарий  Aveal
11 месяцев назад

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

Руслан
Руслан
10 месяцев назад

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

Нуб
Нуб
10 месяцев назад

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

Юрий
Юрий
7 месяцев назад

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

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

Вадим
Вадим
6 месяцев назад

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

Алексей
Алексей
2 месяцев назад

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

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