К старту курса по разработке на С++ рассказываем, как самостоятельно собрать IP-камеру с обнаружением движения. За подробностями приглашаем под кат, где вы найдёте много фотографий и видео на Youtube-канале автора, за которым наблюдают более 30 000 человек. Хотя не все хорошие WiFi камеры наблюдения дороги, большинство из них стоят немало, особенно если брать для дома сразу несколько. Сегодня мы за небольшие деньги (около 20 долларов, цена зависит от того, что у вас уже есть) сделаем беспроводную камеру с модулем ESP32-CAM AI thinker WiFi (одной из лучших макетных плат для камер), чтобы наблюдать за происходящим в доме или снаружи. Введя уникальный IP-адрес в браузере, с этой камеры можно войти на веб-сервер и просматривать видео, а также менять настройки на боковых панелях управления. Благодаря коду, когда что-то или кто-то движется перед камерой, начинается запись, а записанные видеофайлы .MJPEG сохраняются на SD-карту. В камере слежения есть ещё много функций, но о них позже. А сейчас приступим к её сборке. Вот ссылка на видео проекта на YouTube. модуль ESP32-CAM с датчиком камеры OV2640 на 2 Мпикс; конвертер с USB-порта FTDI на последовательный (для программирования) + соединительные провода между гнёздами; карта microSD на 4 Гб (карта памяти TF); антенна с фиксатором; литий-ионный зарядный модуль TP4056 на 1 ячейку; батарея 18650 3,7 В 2600 мАч (2 шт.); ползунковый мини-переключатель SPDT (лучше тумблер 3 A); провода диаметром 0,51 мм; красный светодиод 3 мм; резистор на 220 Ом; цилиндрический пластиковый контейнер (выбор корпуса камеры — за вами); крепление камеры к стене для GoPro. Загружаем код ESP32-CAM_MJPEG2SD в ESP32-CAM (спасибо пользователю s60sc на GitHub: он выложил последнюю версию кода). Всю информацию о коде смотрите по ссылке. Чтобы запрограммировать модуль камеры, соединяем его с конвертером FTDI, работающим с USB и последовательным портом, как показано на схеме выше. Здесь подключаем пин GPIO 0 к GND, что позволяет программировать ESP. Нажимаем кнопку сброса на задней части платы модуля камеры, чтобы включить режим флеш-памяти перед загрузкой. Прежде чем переходить к коду, добавим во вкладку Preferences («Предпочтения») в Arduino IDE ссылку ESP32 .json, дающую доступ к примерам кода, библиотекам и так далее: Открываем загруженный код камеры слежения ESP32-CAM_MJPEG2SD: Раскомментируем строку CAMERA_MODEL_AI_THINKER, если у вас эта плата: Вводим необходимые параметры, такие как модель камеры, а также учётные данные WiFi: Дополнительно вводим данные FTP, чтобы получать записанные видео удалённо: Выбираем плату, скорость загрузки, частоту и режим флеш-памяти, схему разделов, основной уровень отладки и COM-порт: Нажимаем Upload  («Загрузить»). Загрузка на плату небыстрая: чуть подождём: Ссылка на код. Обязательно отсоединяем провод от IO0 к GND: И нажимаем кнопку сброса: Вставляем в слот модуля карту MicroSD. Минимум 4 Гб: И получаем уникальный IP-адрес с монитора порта. Нужная кнопка в правом верхнем углу Arduino IDE. После ввода IP-адреса в веб-браузер при включённой камере появится такая страница: Нажав кнопку Start Stream («Начать трансляцию»), начинаем просмотр видеопотока: Последняя версия кода даёт возможность начинать и останавливать запись вручную. Ранее запись запускалась лишь при обнаружении движения. Для корпуса выбираем контейнер или материал, с которым легко работать. С вставкой железа в сплющенную трубу из ПВХ (показана ниже) возникли проблемы, поэтому используем цилиндрический пластиковый контейнер. Подробнее об этом читайте далее. На картинке не совсем те детали, что использовались. ESP32-CAM; плата для заряда батарей TP4056 1S; Li-Ion батарея 18650 3,7 В; ползунковый мини-переключатель SPDP или тумблер 3 A; красный светодиод 3 мм; резистор мощностью 1/4 Вт 220 Ом; антенна; провод диаметром 0,51 мм; крепёжный винт GoPro. Выпаиваем резистор 0 Ом, соединяющий ESP с его антенной на плате: И припаиваем его, подключая ESP к порту внешней антенны: Этот этап нужен, чтобы увеличить диапазон для подключения собственной антенны. Подключаем к батарее зарядную плату TP4056 4,2 В (соединения B+ и B– от платы к батарее показаны выше): К клеммам батареи подключаем входы платы рядом с портом Micro USB: Выпаиваем штыревые разъёмы ESP32-CAM с обеих сторон и удлиняем их, припаивая обратно с проводами. Добавляем индикатор питания (красный светодиод): Чтобы не запутаться, подбираем цвета проводов по их назначению: По этой простой схеме подключений должна получиться домашняя камера слежения со всем её железом. Сначала был плоский Li-Ion аккумулятор, я заменил его на батареи, более компактные для нового, цилиндрического корпуса: Чтобы камера работала хорошо, лучше использовать батарею ёмкостью более 2000 мА·ч: В итоге параллельно использовали 2 батареи 18650 по 3,7 В и 2600 мА·ч, что дало в сумме 5200 мА·ч. Приличная ёмкость. Отмечаем и сверлим отверстия для выступающих из корпуса частей: Выбираем корпус для камеры, состоящий из двух частей: с таким легко работать. Лучше распечатать его на 3D-принтере. Клеим двусторонний скотч или ленту на батареи и модуль ESP32-CAM (сверху и снизу): Вставляем их в корпус: Места с выступающими компонентами герметизируем термоклеем: Крепим детали к корпусу термоклеем, если нужно: Чтобы вода не попала внутрь, место стыка половинок заклеиваем изолентой: Нарезаем кусочки резины и вставляем в любые зазоры/отверстия, например порт Micro USB сзади и слот SD-карты спереди вверху: Вставляем карту MicroSD в слот камеры, а кусочек резины обратно, включаем камеру переключателем сзади, и находим веб-сервер IP-камеры (см. этапы 5 и 6): Процедура запуска камеры и поиска её веб-сервера та же, но без нажатия кнопки сброса, ведь снова программировать камеру не нужно: В меню веб-сервера камеры нажимаем кнопку Start Stream («Начать трансляцию») и получаем видеопоток в реальном времени: На этой панели есть вся подробная информация о ходе записи, освещённости (в ночное время), свободном месте на карте памяти, а также о дате и о температуре камеры. Здесь даже кнопкой переключается светодиод на плате ESP, отображается движение, обнаруженное ИИ, меняется чувствительность определённых функций и т. д.: Чтобы менять разрешение записи (не только просмотра), открываем вкладку разрешения и выбираем более низкое или даже более высокое (наибольшее — 1600 × 1200). Во вкладке Get Folder («Получить папку») просматриваем записанные видео, нажимая кнопку Start Stream: Можно взять держатель или кронштейн для крепления камеры к стене или любой другой поверхности. Здесь используется комплект креплений для экшн-камеры: Подключаем источник питания на 5 В к зарядному модулю Micro USB (с кабелем от зарядника телефона) в задней части камеры: Прикреплённая к стене камера должна работать постоянно: Так идёт подзарядка батарей и непрерывное питание ESP32-CAM. Батарея пригодится, если нужно снимать там, где нет розетки. Но на всю ночь её не хватит. Заполненную карту microSD извлекаем, подключаем к компьютеру и просматриваем файлы .MJPEG в проигрывателе: В левой части экрана телефона отображается состояние Recording («Запись»): Когда в кадре есть движение, камера записывает, когда его нет — прекращает запись. Вот и всё: Теперь у вас есть собственная классная WiFi камера слежения: Она сделает ваш дом ещё безопаснее: В репозитории на GitHub есть код с расширениями, дополнительной информацией, характеристиками и возможностями ESP32-CAM MJPEG2SD. Продолжить погружение в IT вы сможете на наших курсах: Профессия C++ разработчик Профессия Этичный хакер Узнайте подробности здесь. Data Science и Machine Learning Профессия Data Scientist Профессия Data Analyst Курс «Математика для Data Science» Курс «Математика и Machine Learning для Data Science» Курс по Data Engineering Курс «Machine Learning и Deep Learning» Курс по Machine Learning Python, веб-разработка Профессия Fullstack-разработчик на Python Курс «Python для веб-разработки» Профессия Frontend-разработчик Профессия Веб-разработчик Мобильная разработка Профессия iOS-разработчик Профессия Android-разработчик Java и C# Профессия Java-разработчик Профессия QA-инженер на JAVA Профессия C#-разработчик Профессия Разработчик игр на Unity От основ — в глубину Курс «Алгоритмы и структуры данных» Профессия C++ разработчик Профессия Этичный хакер А также Курс по DevOps Все курсы