Интернет-лаборатория роботов ZiZiBOT.RU

Проектирование и разработки в области робототехники и автоматизации технологических процессов. Производство готовых роботов и конструкторов для творчества. Консультации и обучение по электронике и программированию.

г. Юрга,
ул.Ленинградская 38/83

+7 923-503-6074

OV7670 без буфера FIFO передача видео по WiFi с обработкой на ESP32


Обсуждение возможности присоединения видеокамеры к Arduino идет довольно давно, но все разговоры сводились к элементарным расчетам, которые доказывали, что видеосигнал при помощи Arduino обработать невозможно. Об этом говорит как скорость работы контроллеров используемых для плат Arduino, так и отсутствие приемлемого количества оперативной памяти.
Часто обсуждались вопросы подключения самой простой и доступной по цене камеры OV7670. Но тактирование данной камеры имеет минимальную частоту 10МГц, а номинальная частота тактирования (при которой камера выдает «не размазанные» изображения) 24МГц. Мы же имеем частоту Arduino NANO, Mega, UNO 16Мгц, а требуется, чтобы обрабатывающий контроллер был значительно быстрее камеры, чтобы успевать принимать значения битов изображения.
Только современные Arduino платы способны на такое: Arduino Due , Intel Galileo. Но они дороги или  мало распространены.

OV7670
И здесь, как черт из табакерки, на арену выпрыгивают китайские производители контроллеров. Сначала появляется ESP8266, который был нами протестирован, но честно говоря, поговорка о том, что чего из него ни делай, а получается погодная станция, родилась не на пустом месте.  Попытки установить ESP8266 на мобильного робота и одновременно обеспечить адекватную работу обвески из датчиков у нас не получилось. Но, тем не менее, эти контроллеры пользуются определенным успехом, по крайней мере, их покупают.
Начав разработку, дети Поднебесной уже остановиться не могут, и следом выпускают новую версию контроллера ESP32, который не только получил адекватный запас GPIO, но и дополнительно получил второе ядро, и дополнительно (к поддержке WiFi протокола, который уже был на ESP8266) поддержку протокола Bluetooth.
Частота 160МГц, два 32-ных ядра, WiFI, BT, не оставили нас равнодушными, тем более идея сборки мобильного робота с камерой, которая передает изображение по WiFi витает уже давно.
Анализ документации по камере показал, что подключить ее к ESP32 вполне по силам. А позднее был найден пример подобного подключения на  github:

 

Ниже приводится схема подключения по программе указанной выше. Стоит заметить, что используется камера без буфера FiFO.
Исходная схема OV7670 + дисплей


Помимо камеры в примере к ESP32 подключен TFT дисплей.
Я не нашел поблизости дисплея и подключил только камеру. Более того использовался контроллер Lolin32 Lite, который не имеет разведенного вывода GPIO 21 и моя схема немного изменилась.
 OV7670 + ESP32 NO FIFO

Код использованный при проведении испытаний


С 5й ноги камеры контакт соединен с 23 GPIO  платы на основе ESP32. В программе убрано всё, что касается работы с дисплеем и изменен указанный выше GPIO.
Программный код будет по второй схеме прикреплен к данной статье.
Сначала из куска шлейфа IDE был создан шлейф для камеры, но потом для простоты (скорости) все было сделано на макетной плате.

Камера со шлейфом
На стандартную макетную плату  Lolin32 Lite становится так, что остаются с боков по одному контактному месту для соединений, а вот плата ESP-WROOM32 шире, и с одной стороны все контактные посадочные места оказываются под платой.
 WROOM32

LOLIN32 LITE
 
 
Вот такой пучёк проводов получился.
 OV7670 + LOLIN32 LITE

Модель в сборе ov7670 esp32
Установив прошивку и открыв Serial port на скорости 115200, можно убедиться, что плата завелась, а заодно узнать полученный ею адрес от вашей WiFi сети. И не забудьте в программе прописать ваше имя WiFi сети и пароль сети.
Чтобы получить информацию из Serial port следует: открыть Serial port, затем нажать на ESP32 кнопку Reset (Boot). После этого ESP32 перезагрузится и напечатает в порт информацию по подключению.
Информация по соединения ip-адрес

Теперь во внутренней сети потребуется компьютер или смартфон.
На нем в адресной строке браузера следует указать ip-адрес нашего устройства (здесь это 192.168.1.136). Все! Смотрим на картинки с камеры.

Картинка с камеры 1
 картинка с камеры в браузере 2
 
 Картинка с камеры в браузере 3
 
Честно говоря, качество полученной картинки не выдерживает никакой критики. Под большим вопросом и скорость передачи, отрисовка рисунка 320х240 шла довольно медленно и с задержкой в пару секунд. В итоге мы имеем загруженный под завязку ESP32 и 1-3 мутных кадра в секунду.
Выводы: камера OV7670 работает, но образец без буфера FiFo показывает на выходе изображение низкого качества, причины тому могут быть две – 1) большое время экспонирования полного кадра, что приводит к смазыванию картинки, 2)объектив без автофокуса с ручной фокусировкой, что затрудняет использование данной камеры в динамике (на мобильном роботе).
Использование камеры с внутренним буфером FiFo может немного улучшить ситуацию, но кардинально ничего не изменится.
Дальнейшие испытания пойдут в область использования готовых изделий, таких как смартфон  в качестве камеры робота (или подобное устройство с возможностью отдельной от контроллера робота трансляции видео в сеть).

 

Код использованный при проведении испытаний

 

X

Написать сообщение:

Укажите свой номер телефона И e-mail для обратной связи
- e-mail
И
- номер телефона

Текст сообщения: