Показаны сообщения с ярлыком ESP32. Показать все сообщения
Показаны сообщения с ярлыком ESP32. Показать все сообщения

суббота, 13 сентября 2025 г.

Автоматическая съемка на ESP32 CAM с пироэлектрическим датчиком движения

 Недорогие и доступные по цене модули ESP32-CAM можно использовать в качестве камеры с автоматической съемкой при наличии движения каких нибудь теплых объектов напр. людей или животных, если дополнить такой модуль пироэлектрическим инфракрасным PIR сенсором. Такой способ съемки хорош тем что т.о. экономиться место в постоянной памяти и т.о. камера может работать дольше, без необходимости перезаписи старых снимков. Также т.о. время работы продлевается за счет более низкого потребления т.к. камера работает только при наличии движения, пропуская те промежутки времени когда не происходит ничего интересного. Для организации такой системы даже не обязательно писать новый скетчь. Можно взять скетчь для фотоаппарата (который находиться на странице по ссылке https://electe.blogspot.com/2023/07/esp32-cam.html), записать его в модуль (если он ещё не записан) и дополнить систему ПИР сенсором с инверторои на транзисторе

подпаять выход транзистора нужно к пину кнопки на плате который соединен с пином reset микроконтроллера т.к. отдельно выведенного пиа Reset на плате нет. 

Таким нехитрым способом можно получить недорогое полезное устройство для автоматической съемки при наличии движения и сохранения фотографий на SD карту. Однако если например добавить возможность отправки изображения по WIFI (что данный модуль позволяет реализовать) то можно напр. организовать отправку фотографий на какой нибудь сервер или в телеграм через бота. Чтобы даже в случае поломки камеры, сохранить результаты её работы. Но для этого естественно поблизости д.б. работающий WIFI роутер (маршрутизатор который раздает интернет). Если же например есть какая то ситуация когда такого нет (ну напр. нужно выяснить какой медведь ворует мёд из улья в лесу) то возможно подойдет такая простая система с SD картой. Результат можно посмотреть на видео:



Адрес биткоин кошелька для поддержки блога - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g

суббота, 24 мая 2025 г.

Тепловизор на AMG88xx модуле тепловой инфракрасной матрице

 Тепловизионные камеры или, по другому, тепловизоры бывают полезными во многих областях т.к. позволяют визуализировать тепловое инфракрасное излучение недоступное человеческому глазу и т.о. как бы увидеть распределение температуры на какой либо поверхности какого либо тела, рассматриваемого в тепловизор. Однако такие камеры, как правило, очень не дешёвые но недорогими бывают модули на основе которых можно сделать тепловизор. Рассмотрим модуль тепловой инфракрасной матрицы AMG8833 это, на момент написания данной статьи, самый дешевый модуль тепловизора. Его матрица состоит из 8 на 8 тепловых датчиков. Т.е. всего 64 штуки. Это не очень много и разрешение данной матрицы не очень велико. Однако же всё таки некоторое подобие изображения можно получить используя данный модуль. Данный модуль можно подключить по I2C к Arduino, ESP32 и другим подобным. Я выбрал ESP32 чтобы можно было использовать смартфон как дисплей. Проще всего написать скетчь будет используя библиотеку. Заходим в менеджер библиотек среды Ардуино и вписываем AMG. Нажимаем кнопку "установка"

а в следующем окне "Install all"
После окончания установки можно открыть пример 
с получением данных пикселей матрицы

В данном примере мы видим инициализацию, 

запуск, 

получение пикселей в матрицу

и вывод данных в последовательный порт.

Если откомпилировать и загрузить скетч
то можно увидеть эти данные в мониторе последовательного порта среды Ардуино.
Чтобы было удобнее пользоваться модулем как тепловизором
можно сделать вывод изображение на экран смартфона в привычном для тепловизоров виде.
Для этого я написал специальный скетч на основе рассмотренного в одном
из предыдущих видео и рассмотренного только что примера.
В начале подключаются заголовочные файлы библиотек,
задается идентификатор и пароль, 
настройки айпи адреса. Далее есть код HTML страницы которая будет отображаться на экране смартфона
На этой странице есть canvas для изображения из камеры,
поле для вывода максимальной и минимальной температуры,
кнопка смены кадра или кнопка "сдлеать снимок",
меню для выбора диапазона температур чтобы видеть отличия в цветах на разных разницах температур
В скрипте есть прием данных в формате json
а также отрисовка разноцветных квадратиков в цикле.
В функции инициализации есть инициализация модуля и WIFI точки доступа
а также выдача клиенту HTML страницы и данных в формате json и в конце запуск сервера. 
В основном цикле сбор данных с модуля и вывод на uart на всякий случай.
Полный код можно скопировать здесь:
 
Результат можно посмотреть на видео:

Адрес биткоин кошелька для поддержки блога - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g

воскресенье, 16 июня 2024 г.

Получение координат с GPS модуля GY-GPS6mv2

 Обычному человеку, обычно не составляет труда определить свое местоположения по виду который он определяет глазами и подсознательно сверяет с "картой" в своей голове и тем не менее иногда человек может заблудиться. Такой способ определения своего местоположения - очень не просто реализовать для электронного устройства т.к. будет нужен большой объем памяти, для хранения карты, и высокая производительность процессора для работы эмулятора нейронной сети или какого либо другого сопоставителя информации с камеры и внутренней карты. К тому же понадобиться камера что уже само по себе сильно увеличивает требования к аппаратному обеспечению а если используется искусственная нейронная сеть то удовлетворительный результат её работы, на самом деле, не гарантируется даже при очень хорошем её обучении. К счастью есть более простой и надежный способ определения своих координат в пространстве. Они могут быть определены по искусственным спутникам земли системы GPS. Есть также система beidou и ГЛОНАСС но, на практике, сигналы со спутников GPS ловятся лучше, хотя тоже не всегда так хорошо как хотелось бы. Для приема сигналов от спутников системы глобального позиционирования GPS существуют недорогие модули GY-GPS6mv2. Такой модуль взаимодействует с внешними приборами по интерфейсу UART.

 Чтобы проверить его работу можно использовать USB-UART переходник увидеть данные, которые он передает, можно в мониторе последовательного порта среды Arduino IDE. Или же можно скачать специальную программу от производителя по ссылке  https://www.u-blox.com/en/product/u-center

Для подключения к модулю, есть кнопочка слева вверху.

Чтобы программа показала координаты и точку расположения модуля нужно сначала дождаться пока модуль поймает сигналы с хотя бы 4х спутников, если вообще поймает. Без этого модуль не сможет определить координаты. Если модуль поймал сигналы то на нем начнет периодически мигать светодиод. Также координаты можно определить из сообщений которые он присылает в монитор порта. Координаты находятся в строке начинающейся с $GPGGA
перед запятой с буквой N находиться широта т.е. градус угла между плоскостью экватора и линией от центра земли до модуля, перед запятой с буквой E находиться востоная долгота т.е. градус угла между линией от Гринвича до центра и линией от модуля до центра земли т.е. широта ориентирует вдоль оси земли и параллельно экватору и говорит  насколько далеко мы от него в градусах от 0 до 90 а долгота показывает насколько далеко мы от полукруга с концами на полюсах и проходящего через Гринвич тоже в градусах. 
Обычно настройки модуля по умолчанию таковы что им можно пользоваться, для получения координат, не выполняя дополнительных настроек. На многих микроконтроллерах имеется интерфейс UART поэтому проблем с подключением модуля быть не должно. Его можно подключить например к Ардуино или ESP32. Рассмотрим далее скетч для робота, с модулем ESP32, которым можно управлять со смартфона и получить координаты местоположения робота на экран смартфона, по нажатию кнопки.
 
Данный код можно скопировать в Arduino IDE но textarea_ надо заменить на textarea т.к. с textarea данный код сюда нормально не вставляется, поэтому пришлось сделать такую замену.
В отличии от ESP8266, нужно использовать функцию ledcWrite() вместо analogWrite(). Прием от модуля осуществляется функцией Serial.read() после байт нужно преобразовать к типу char, отсечь спецсимволы конца строки и затолкать данные в массив символов далее этот массив можно обработать выделив нужную строку т.к. строку начинающуюся с $GPGGA т.к. в ней содержаться координаты. Строку можно распарсить на стороне сервера и лучше сделать именно так чтобы сам робот мог принимать какие то решения на основе своего положения но я пока решил не заморачиваться, передал данные клиенту где парсинг на джаваскрипте осуществляется гораздо проще. А именно двоиным разбиением строки сначала по символу 'N' потом на запятые
и выделением нужных концов для широты и также для долготы только в начале разбиаение по 'E'  с запятой естественно чтобы в результатах её не было. Испытания робота можно посмотреть на видео:


Адрес биткоин кошелька для поддержки блога - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g 

КАРТА БЛОГА (содержание)

среда, 26 июля 2023 г.

Фотоаппарат на ESP32 CAM

 Популярный и недорогой (на момент написания данной статьи) модуль ESP32-CAM (http://alii.pub/69872w) имеет на своей плате разъем для подключения камеры и слот для подключения SD карты а также мощный микроконтроллер и кнопку т.е. имеет всё необходимое для постройки, на его основе, компактного, недорогого малогабаритного фотоаппарата. Также для того чтобы записать прошивку в модуль нужен USB-UART конвертер который нужно соединить с модулем по схеме:

О том как настроить среду Arduino и загрузить скетч в данный модуль можно почитать статью на странице: https://electe.blogspot.com/2022/03/esp32-cam.html. Готовый скетч фотоаппарата также уже существует поэтому не обязательно "изобретать велосипед"  и писать его заново. Можно просто скачать на странице: https://randomnerdtutorials.com/esp32-cam-take-photo-save-microsd-card/ после разобраться как он работает и возможно в последствии переделывать его под свои нужды. Резисторы в схеме выше нужны для ограничения тока на случай перепутывания выводов при подключении. Их можно заменить перемычками если защита от ошибок подключения не нужна. В скетче всю самую сложную работу с камерой и SD картой, на низком уровне, делают библиотеки поэтому скетч получается просто и короткий:
В начале скетча имеются подключения заголовочных файлов библиотек. Константа EEPROM_SIZE должна быть равна единице для того чтобы данный скетч исправно работал. Следующие константы задают пины для камеры. Переменная pictureNumber нужна для того чтобы фотографии имели названия с разными порядковыми номерами. строка
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
блокирует датчик понижения напряжения. Serial.begin(115200) -включает последовательный порт для отладки.
Далее заполняется структура config настройки камеры. Далее в строке
esp_err_t err = esp_camera_init(&config);
происходит инициализация камеры, после инициализируется SD карта функцией SD_MMC.begin(). Строкой
fb = esp_camera_fb_get();
делается фотография. Строки:
EEPROM.begin(EEPROM_SIZE);
  pictureNumber = EEPROM.read(0) + 1;
нужны для чтения текущего номера фотографии чтобы название следующей фотографии было иным нежели название текущей. В переменную path записывается путь на SD карте для хранения фотографии. Далее открывается файл, в него записывается фотография и файл закрывается. В строке: esp_camera_fb_return(fb);  освобождается переменная для хранения фотографии. Далее выключается светодиод и осуществляется перевод модуля в режим сна до следующей перезагрузки. 
Посмотреть видеорассказ о том как сделать фотоаппарат на модуле ESP32-CAM можно на видео:


понедельник, 8 мая 2023 г.

ESP32-CAM выделение границ на изображении перекресным оператором Робертса

Одной из задач машинного зрения является отделение одних объектов, на изображении, от других. А одним из путей решения данной задачи может быть например выделение границ путем определения переходов цветов на изображении. Одним из ранних алгоритмов для этого является выделение границ перекресным оператором робертса. Существуют более современные алгоритмы (оператор Собеля, оператор Айверсона и т.д.) но оператор Робертса является простым и быстрым по этому используется поныне и подходит для недорогой платы за 5 долларов. Реализовывать алгоритмы машинного зрения можно проще, используя например javascript библиотеку opencv. Но такой подход работает только если есть связь модуля с компьютером т.к. opencv слишком тяжелая и ресурсозатратная библиотека для модуля ESP32-CAM если нужна автономность (которая может быть важна для автоматизации) то алгоритмы машинного зрения нужно реализовывать на стороне сервера. В данном блоге уже есть статья о том как получить массив пикселей с фотографии модуля ESP32 CAM. (см. датчик цвета на ESP32-CAM -> https://electe.blogspot.com/2022/11/esp32-cam.html). Далее, после того как массив пикселей получен, можно подвергать его воздействию всевозможных алгоритмов с целью их исследования. Массив пикселей содержит 3 байта на каждый пиксель. Один байт для яркости синей составляющей, один для зеленой и один для красной. Именно в таком порядке, как было выяснено ранее, компоненты располагаются в получаемом массиве.

Однако для понимания работы алгоритма порядок не важен. Предположим что каждый пиксель имеет всего одну компоненту яркости т.е. изображение не цветное. В таком случае для определения границы какого либо объекта в какой либо точке на изображении из 4х пикселей можно найти корень из суммы квадратов разностей двух пикселей находящихся на разных диагоналях:
или сумму модулей разностей яркостей пикселей на диагоналях. Будут ли использоваться модули или корень - не важно с точки зрения результата абстрактного алгоритма но для работы на реальном процессоре, вариант с модулями более предпочтителен т.к. его быстродействие будет больше. Суть метода заключается в том что с какой бы стороны на какую не менялся цвет, в этом перекрестии, это изменение будет выражено положительным значением результата вычисления данной формулы. Для того чтобы увидеть границы объектов, на изображении, нужно пройтись данной формулой по всем этим точкам из 4 пискелей со смещением на один пиксель на каждой итерации не затрагивая крайние справа и снизу пиксели всего изображения т.к. они сильно не повлияют на результат какой либо реальной фотографии с не очень низким разрешением. Прелесть этого метода (помимо быстродействия) также заключается в том что результат вычисления можно записывать в ту же самую матрицу из которой берутся яркости пикселей изображения, что не требует дополнительного выделения оперативной памяти чем её экономит. Прежде чем применить данный алгоритм к цветному изображению, можно сначала пройтись по всей матрице и усреднить значение трех компонент яркости каждого пикселя или же пройтись оператором Робертса по каждым компонентам в отдельности. Как будет показано в видео, внизу страницы, на практике визуально результат получается практически одинаковым.

Код скетча можно скопировать из текстового поля:

Данный код является переделкой примера который скачивается вместе с библиотекой для данного модуля для среды Arduino. Код длинный а его полный разбор будет ещё длиннее поэтому лучше сосредоточиться на более интересных вещах. А разбор работы именно с аппаратными возможностями данного модуля, возможно будут выделены в отдельные статьи в данном блоге. Код алгоритма Робертса помещен в функцию capture_handler т.к. она вызывается после того как делается снимок, который можно разобрать на пиксели и обработать данным алгоритмом, после чего отправить результат по WIFI для просмотра на каком либо устройстве типа смартфона. Для того чтобы не было необходимости в роутере для получения результата. Добавлена возможность работы модуля в режиме точки доступа. В переменную ssid нужно записать название WIFI сети которую создаст модуль и к которой нужно будет подключиться для получения результата. В переменную password нужно записать пароль который нужно будет ввести при подключении к WIFI сети которую создаст модуль. IP адрес который нужно будет ввести в адресной строке браузера, после подключения к сети, можно посмотреть в мониторе последовательного порта среды Arduino IDE после запуска которого на модуле нужно будет нажать кнопку "reset" (единственная кнопка которая имеется на данном модуле) чтобы этот адрес появился. Модуль, при этом, должен быть подключен к компьютеру через usb-uart переходник. Схему такого подключения а также то как загрузить скетчь в данный модуль, можно посмотреть на странице  https://electe.blogspot.com/2022/03/esp32-cam.html

В функцию cmd_handler можно добавить возможность включать и выключать светодиод чтобы влиять на способность модуля распознавать границы объектов путем изменения освещения этих объектов остальные возможности из этой функции можно удалить чтобы  не занимали место в коде и не заставляли тратить много времени на его вертикальный скролинг.

В функции index_handler нужно найти вызов функции httpd_resp_set_hdr и поменять там строку GZIP на html чтобы можно было делать клиентскую часть на обычном html не конвертируя его в GZIP это удобнее и к томуже GZIP имеет меньший размер чем html только при больших размерах кода, при малых получается обратный эффект. Строка с HTML кодом клиентской части передается вторым параметром в функцию httpd_resp_sendstr. Чтобы текст можно было продолжить на следующей строке, можно ставить разделители обратные слеши. На фронтэнде т.е. клиентской стороне будет картинка с результатом обработки фотографии, кнопка чтобы сделать фотографию и выполнить обработку, кнопка чтобы включить/выключить освещение светодиодом и ссылка для перехода на страницу с результатом обработки фотографии. Также видно что в коде есть конструкция для того чтобы картинка бралась из сервера а не из кэша.

Алгоритм робертса в функции capture_handler будет реализовываться только в случае успешной конвертации фотографии в формат RGB888. Изображение состоит из пикселей, пиксель состоит из 3х составляющих красной, зеленой и синей на каждую состаляющую выделено 8 байт если усреднить составляющие то можно получить черно-белое изображение в данной реализации это делается на каждой итерации цикла для 4х соседних пикселей поэтому циклы проходят по всем пикселям кроме тех что в последней строке и последнем столбце для определения границы из правого нижнего пикселя вычитается левый верхний и из этой разницы берется модуль. Далее тоже самое производиться с оставшимися диагональными пикселями. Если берется модуль то, на самом деле, не важно какой из какого вычитаются главное чтобы это вычитание было перекресным в данной же реализации используется тренарный оператор для большей переносимости кода. После чего эти разницы по модулю складываются и получается результат, чем светлее пиксель тем резче переход цветов. Вот примерно такие получаются результаты обработки фотографий данным модулем с данным скетчем:

Это результаты обработки фотографий после усреднения всех пикселей, результаты обработки по пикселям каждой компоненты выглядят немного по другому и если присмотреться то можно увидеть отдельные цвета но в целом видно что в основном компоненты складываясь дают, как бы, просто переход по уровню яркоти:
Посмотреть результат работы также можно на видео:



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

Датчик цвета на ESP32-CAM

 Модуль ESP32-CAM (http://alii.pub/69872w) может быть не только обычной дистанционной камерой для просмотра области пространства на которую она направлена но и также выполнять некоторые манипуляции с визуальными данными которые этот модуль получает и также самостоятельно принимать некоторые решения на основе этих данных. Микроконтроллер ESP32 имеет достаточно неплохую производительность (по сравнению с другими микроконтроллерами рассматриваемыми ранее в данном блоге) что позволяет использовать его для обработки изображений и машинного зрения. Ранее, в данном блоге, появилась статья про датчик цвета на основе Raspberry pi 3 и USB камеры - https://electe.blogspot.com/2020/05/usb-raspberry-pi.html. Датчик цвета сделать получилось но работал от крайне медленно. На получение снимка, его обработку, сохранение, конвертирование и всё стальное в сумме уходило более одной секунды что было видно без специальных таймеров замера времени. Если к этой задержке прибавить время более сложной операции, нежели просто усреднение цветов пикселей, то скорость работы наверняка также не порадует. Более быстрой работы устройства можно добиться исключив ненужные действия из процесса. Добиться этого на Raspberry pi c USB камерой будет не просто т.к. придется работать с камерой на более низком программном уровне + добавляются ограничения по скорости передачи данных по USB. Эти проблемы можно было решить применением специальной камеры для Raspberry pi но на тот момент такие камеры стоили гораздо дороже чем USB камеры. Модуль же ESP32-CAM сам по себе не дорогой, имеет небольшие размеры и используя его и среду разработки Arduino IDE можно получить доступ к пикселям изображений делаемых камерой без больших сложностей. Конечно на данный модуль нельзя установить такую тяжёлую библиотеку как opencv но в большинстве случаев её функционал избыточен по тому что не всегда необходимо делать с изображениями все преобразования которые может данная библиотека. Чтобы модуль ESP32-CAM мог показать что он правильно поработал с пикселями и определил цвет, можно дополнить его например RGB светодиодом который будет показывать какой цвет обнаружил модуль. Конечно можно использовать имеющийся в модуле WIFI или bluetooth или даже uart (если совсем лень) но светодиод кажется нагляднее. При этом его не следует направлять в ту сторону куда смотрит камера, иначе модуль будет определять тот цвет который сам же и создает что приведет к положительной обратной связи всей системы и более трудному выводу её из устойчивого состояния. Схема может выглядеть например так:

Рисунок 1 - Схема датчика цвета на ESP32-CAM

Модуль может питаться автономно от пауэрэнка даже без отключения программатора - это может быть удобно т.к. для перепрограммироания нужно делать только одно пересоединение. Скетч не сильно сложный и может быть такой:
В начале, как всегда, подключаются заголовочные файлы. После нужно добавить константы которые копируются из файла с константами примера для камеры. Константы нужно скопировать из блока для используемого модуля, в данном случае для ai thinker. В функции setup() включается последовательный порт для отладки. Далее заполняется структура для настройки и инициализации камеры. После чего имеется необходимая для запуска устройства последовательность строк скопированная из скетча примера. Далее делается инициализация камеры функцией esp_camera_init и проверка этой инициализации. После совершаются настройки. Снижается разрешение кадра чтобы сделать его быстрее и увеличивается насыщенность цвета чтобы датчик лучше различал цвета. Далее пины к которым подключен светодиод настраиваются на выход. В начале основного цикла объявлен указатель на структуру типа camera_fb_t который заполняется функцией esp_camera_fb_get после взятия фотографии от камеры. Если оно прошло неудачно то в последовательный порт передается соответствующее сообщение. Далее обявляются некоторые специальные переменные суть которых отражена в их названиях. Функцией dl_matrix3du_alloc выделяется память для матрицы изображения. Если этого сделать не получилось то оригинальное изображение возвращается функцией esp_camera_fb_return и в последовательный порт передается сообщение о неудаче. Далее заполняются специальные переменные. После чего функцией fmt2rgb888 изображение из камеры преобразуется из формата jpeg в формат rgb888 т.е. в обычный набор пикселей в котором на каждую компоненту цвета выделено по 8 бит. После успешного конвертирования набор пикселей будет доступен через указатель out_buf из которого можно извлекать пиксели так же как из обычного массива (такие особенности языка си) через квадратные скобки. Несмотря на то что в аббревиатуре RGB буква R, обозначающая красный, стоит на первом месте. Извлекать компоненты цвета из out_buf следует в обратном порядке т.е. синяя компонента первого пикселя будет в out_buf[0], зеленая в out_buf[1], красная в out_buf[2], синяя компонента второго пикселя будет в out_buf[3] и т.д. Конец этого хранилища записан в переменной out_len которую можно использовать для завершения цикла перебора пикселей. Для каждой компоненты цвета находиться среднее арифметическое после чего, обычным сравнением, определяется какая компонента преобладает и в соответствии с ней загорается нужный свет RGB светодиода. В конце выделенная память освобождается функцией dl_matrix3du_free. Результат работы датчика можно посмотреть на видео:

суббота, 2 апреля 2022 г.

Управляемый по wifi автомобиль с камерой на ESP32-CAM

 Дистанционно управляемое транспортное средство с камерой передающей изображение на экран может иметь много применений а также это весьма интересная штука. Такую штуку можно сделать на основе модуля ESP32-CAM (http://alii.pub/69872w) для чего его нужно дополнить самим транспортным средством и драйверами для его управления через данный модуль. В простейшем случае транспортным средством может быть какая либо колесная платформа поворачивающаяся по танковой схеме. Если исключить возможность заднего хода то электрическая схема всей конструкции может быть очень простой:

Рисунок 1 - Схема радиоуправляемого автомобиля с камерой

В схеме имеется гальваническая развязка силовой и логической части для защиты модуля ESP32-CAM. Используются оптроны 4N33 с током коллектора до 100мА. Это не очень большой ток поэтому моторы должны быть соответственно не очень мощными или оптроны должны быть мощнее в случае использования мощных двигателей. Модуль следует подготовить, об этом есть статья https://electe.blogspot.com/2022/03/esp32-cam.html. После того как пароль от wifi вписан нужно найти то ветвление (во вкладке app_httpd.cpp) в котором прописывалось включение светодиода но только теперь добавить строки для управления пинами 12 и 13 например так:
    else if(!strcmp(variable, "left")) 
    {
      pinMode(12,OUTPUT);
      digitalWrite(12,HIGH);
      pinMode(13,OUTPUT);
      digitalWrite(13,LOW);
    } 
    else if(!strcmp(variable, "right"))
    {
      pinMode(12,OUTPUT);
      digitalWrite(12,LOW);
      pinMode(13,OUTPUT);
      digitalWrite(13,HIGH);
    }
    else if(!strcmp(variable, "forward"))
    {
      pinMode(12,OUTPUT);
      digitalWrite(12,HIGH);
      pinMode(13,OUTPUT);
      digitalWrite(13,HIGH);
    }
    else if(!strcmp(variable, "stop"))
    {
      pinMode(12,OUTPUT);
      digitalWrite(12,LOW);
      pinMode(13,OUTPUT);
      digitalWrite(13,LOW);
      pinMode(12,INPUT);
      pinMode(13,INPUT);
    }  
Теперь чтобы модуль заработал осталось поменять соответствующим образом фронтенд который накодится по вкладке camera_index.h. В коде на этой вкладке есть 2 массива для разных камер. Нужно выбрать массив с камерой которая используется и заменить его содержимое. Для этого можно например скопировать его содержимое в программу для разархивации из формата .gz в .html потом изменить html код, после чего сжать его программой архиватором в формат .gz и содержимое переместить в выбранный массив. html код который будет работать с кодом выше может выглядеть например так:
Это довольно минималистичный веб интерфейс без излишеств, только с изображением для вывода потокового видео и кнопками для управления автомобилем. Основная функция в данном коде -fetch() для отправки get запроса с командами управления моторами. А также тег img для отображения видео. В сжатом виде данный код будет выглядеть так:
Удивительно, но после сжатия размер занимаемой памяти увеличился. Возможно сжатие начнет работать нормально при больших html кодах поэтому тут можно не экономить и сделать большую и красивую веб страницу. Но конечно же в разумных пределах т.е. не стоит например подключать react или другой большой фреймворк. Модуль может этого не потянуть даже со сжатием. В результате после внесения данных поправок в стандартный скетч и загрузки его в автомобиль, получается интересная радиоуправляемая по wifi со смартфона или компьютера машинка, тест драйв которой можно посмотреть на видео:
КАРТА БЛОГА (содержание)