![](https://habrastorage.org/getpro/habr/upload_files/d04/d02/ced/d04d02ced532a7add4477df812df3949.jpg)
К старту курса по разработке на С++ рассказываем, как самостоятельно собрать 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.
1. Программирование ESP32-CAM
Загружаем код ESP32-CAM_MJPEG2SD в ESP32-CAM (спасибо пользователю s60sc на GitHub: он выложил последнюю версию кода). Всю информацию о коде смотрите по ссылке.
![](https://habrastorage.org/getpro/habr/upload_files/963/52a/7f3/96352a7f31a0e727f60964a1a1b8d1ac.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/f73/56a/e4b/f7356ae4b1baf06bb21dbe46bde2befc.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/32f/d4e/58d/32fd4e58d1ea5802f4d29d9948ed9b5e.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/35e/296/0a9/35e2960a9384018a9188ad53bd979251.jpeg)
Чтобы запрограммировать модуль камеры, соединяем его с конвертером FTDI, работающим с USB и последовательным портом, как показано на схеме выше. Здесь подключаем пин GPIO 0 к GND, что позволяет программировать ESP. Нажимаем кнопку сброса на задней части платы модуля камеры, чтобы включить режим флеш-памяти перед загрузкой.
2. ESP32.json
Прежде чем переходить к коду, добавим во вкладку Preferences («Предпочтения») в Arduino IDE ссылку ESP32 .json, дающую доступ к примерам кода, библиотекам и так далее:
![](https://habrastorage.org/getpro/habr/upload_files/684/91e/8c7/68491e8c78e799ce192fbea62b255531.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/06c/163/6cc/06c1636ccb2e5812e307ec5733e3579f.jpg)
3. Заполнение параметров в коде
Открываем загруженный код камеры слежения ESP32-CAM_MJPEG2SD:
![](https://habrastorage.org/getpro/habr/upload_files/479/593/b3c/479593b3c8c17bc0545a1c3b9dc9e699.jpg)
Раскомментируем строку CAMERA_MODEL_AI_THINKER, если у вас эта плата:
![](https://habrastorage.org/getpro/habr/upload_files/f9a/6d9/1dc/f9a6d91dc60f3f5e41f6bf450ab4cb9c.jpg)
Вводим необходимые параметры, такие как модель камеры, а также учётные данные WiFi:
![](https://habrastorage.org/getpro/habr/upload_files/179/500/f83/179500f836eb72daa2337da6b8024ea8.jpg)
Дополнительно вводим данные FTP, чтобы получать записанные видео удалённо:
![](https://habrastorage.org/getpro/habr/upload_files/418/ddf/f5d/418ddff5d58d5bc3d5c636be253df8b6.jpg)
4. Загрузка кода на плату
Выбираем плату, скорость загрузки, частоту и режим флеш-памяти, схему разделов, основной уровень отладки и COM-порт:
![](https://habrastorage.org/getpro/habr/upload_files/2e6/64a/028/2e664a028a5f0211990242fbc9eafc35.jpg)
Нажимаем Upload («Загрузить»). Загрузка на плату небыстрая: чуть подождём:
![](https://habrastorage.org/getpro/habr/upload_files/d13/f0f/8b6/d13f0f8b63e88005a7554434c7c540a3.jpg)
Ссылка на код.
5. Подготовка ESP32-CAM и получение IP-адреса
Обязательно отсоединяем провод от IO0 к GND:
![](https://habrastorage.org/getpro/habr/upload_files/89f/5df/f67/89f5dff67e955494df1f83b20a8c56bc.jpg)
И нажимаем кнопку сброса:
![](https://habrastorage.org/getpro/habr/upload_files/71c/46f/c45/71c46fc45768e1510da806c154f94f0b.jpg)
Вставляем в слот модуля карту MicroSD. Минимум 4 Гб:
![](https://habrastorage.org/getpro/habr/upload_files/347/a48/f97/347a48f9757d2a9cf48f9414c9441dcf.jpg)
И получаем уникальный IP-адрес с монитора порта. Нужная кнопка в правом верхнем углу Arduino IDE.
![](https://habrastorage.org/getpro/habr/upload_files/bac/7a8/8a7/bac7a88a739f748b4a5684a6f7040c80.jpg)
6. Веб-сервер ESP32-CAM
После ввода IP-адреса в веб-браузер при включённой камере появится такая страница:
![](https://habrastorage.org/getpro/habr/upload_files/785/963/69f/78596369fb6ced2063e597d4e43a7b96.jpg)
Нажав кнопку Start Stream («Начать трансляцию»), начинаем просмотр видеопотока:
![](https://habrastorage.org/getpro/habr/upload_files/59c/bfc/3df/59cbfc3dfa3bef04a7271b7d808007dc.jpg)
Последняя версия кода даёт возможность начинать и останавливать запись вручную. Ранее запись запускалась лишь при обнаружении движения.
7. Сборка камеры
Для корпуса выбираем контейнер или материал, с которым легко работать. С вставкой железа в сплющенную трубу из ПВХ (показана ниже) возникли проблемы, поэтому используем цилиндрический пластиковый контейнер. Подробнее об этом читайте далее.
![](https://habrastorage.org/getpro/habr/upload_files/801/e5a/9ad/801e5a9add16e3c279017a965a44b475.jpg)
На картинке не совсем те детали, что использовались.
Для сборки понадобится
ESP32-CAM;
плата для заряда батарей TP4056 1S;
Li-Ion батарея 18650 3,7 В;
ползунковый мини-переключатель SPDP или тумблер 3 A;
красный светодиод 3 мм;
резистор мощностью 1/4 Вт 220 Ом;
антенна;
провод диаметром 0,51 мм;
крепёжный винт GoPro.
8. Подключение платы для внешней антенны
![](https://habrastorage.org/getpro/habr/upload_files/724/c86/c7a/724c86c7a071eae9bd044876f5e3d5d5.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/a76/7ea/057/a767ea057db5ad4945f9875f559ac5db.jpg)
Выпаиваем резистор 0 Ом, соединяющий ESP с его антенной на плате:
![](https://habrastorage.org/getpro/habr/upload_files/189/959/ba3/189959ba38a065831c4e2624f62afdf3.jpg)
И припаиваем его, подключая ESP к порту внешней антенны:
![](https://habrastorage.org/getpro/habr/upload_files/670/bfb/d98/670bfbd984d69be3b6b8fb1de5244a71.jpg)
Этот этап нужен, чтобы увеличить диапазон для подключения собственной антенны.
9. Подключение источника питания ESP32-CAM
![](https://habrastorage.org/getpro/habr/upload_files/ff0/16b/324/ff016b324edff34639c399ee0a93bd3f.jpeg)
Подключаем к батарее зарядную плату TP4056 4,2 В (соединения B+ и B– от платы к батарее показаны выше):
![](https://habrastorage.org/getpro/habr/upload_files/c48/06a/38c/c4806a38c49e0b315e01eab12b04434a.jpg)
К клеммам батареи подключаем входы платы рядом с портом Micro USB:
![](https://habrastorage.org/getpro/habr/upload_files/436/2ae/8f3/4362ae8f3b6bdd633d2b68c5c0ae0ea6.jpg)
10. Работа с соединениями компонентов
![](https://habrastorage.org/getpro/habr/upload_files/62a/6ee/3c0/62a6ee3c0db159882d962a03aaa04e32.jpg)
Выпаиваем штыревые разъёмы ESP32-CAM с обеих сторон и удлиняем их, припаивая обратно с проводами.
![](https://habrastorage.org/getpro/habr/upload_files/95f/809/6a9/95f8096a9e4c88a8fd221a1a8f9fc5b2.jpg)
Добавляем индикатор питания (красный светодиод):
![](https://habrastorage.org/getpro/habr/upload_files/702/b49/0b0/702b490b0cf6f2caf17e256b05e7dec3.jpg)
Чтобы не запутаться, подбираем цвета проводов по их назначению:
![](https://habrastorage.org/getpro/habr/upload_files/37b/9c2/9a6/37b9c29a67739d3467bd7156eff05734.jpg)
11. Схема соединений
![](https://habrastorage.org/getpro/habr/upload_files/a1b/cdb/69a/a1bcdb69a0124740d7e04fc3117357a4.jpg)
По этой простой схеме подключений должна получиться домашняя камера слежения со всем её железом.
12. Выбор батарей и корпуса
Сначала был плоский Li-Ion аккумулятор, я заменил его на батареи, более компактные для нового, цилиндрического корпуса:
![](https://habrastorage.org/getpro/habr/upload_files/7b8/39f/f62/7b839ff6299bd223a6247f43609d9a5e.jpg)
Чтобы камера работала хорошо, лучше использовать батарею ёмкостью более 2000 мА·ч:
![](https://habrastorage.org/getpro/habr/upload_files/687/89c/e1f/68789ce1feb1ada4a8c3efa212910daa.jpg)
В итоге параллельно использовали 2 батареи 18650 по 3,7 В и 2600 мА·ч, что дало в сумме 5200 мА·ч. Приличная ёмкость.
![](https://habrastorage.org/getpro/habr/upload_files/e2e/665/e4e/e2e665e4e5cb5aa06507d749bcf3c65a.jpg)
13. Подготовка железа к установке в корпус
Отмечаем и сверлим отверстия для выступающих из корпуса частей:
![](https://habrastorage.org/getpro/habr/upload_files/418/015/c87/418015c875790476968bf9d2e37e773a.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/875/fad/33e/875fad33e4b028979866717b75ccb35f.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/67b/681/2e4/67b6812e44467c07ab7bcbbfd0928ff4.jpg)
Выбираем корпус для камеры, состоящий из двух частей: с таким легко работать. Лучше распечатать его на 3D-принтере.
14. Установка в корпус
Клеим двусторонний скотч или ленту на батареи и модуль ESP32-CAM (сверху и снизу):
![](https://habrastorage.org/getpro/habr/upload_files/b96/f90/93c/b96f9093c9fea8d549812f54210065d1.jpg)
Вставляем их в корпус:
![](https://habrastorage.org/getpro/habr/upload_files/f70/308/60a/f7030860a79feec26aa3ac34092908d2.jpg)
Места с выступающими компонентами герметизируем термоклеем:
![](https://habrastorage.org/getpro/habr/upload_files/550/4c9/193/5504c91934f95811de79dc1f63c819e5.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/aa3/ca1/c0b/aa3ca1c0b1331ca7068a84878199257a.jpg)
15. Защита от воды
Крепим детали к корпусу термоклеем, если нужно:
![](https://habrastorage.org/getpro/habr/upload_files/cc2/0a3/8e9/cc20a38e95a847bcfbe1f7963bfc030e.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/6fd/11a/a6c/6fd11aa6c3526f6c5ef446fb333d1d67.jpg)
Чтобы вода не попала внутрь, место стыка половинок заклеиваем изолентой:
![](https://habrastorage.org/getpro/habr/upload_files/769/cb3/a92/769cb3a9209a9eaf76d5c456f0b1c161.jpg)
Нарезаем кусочки резины и вставляем в любые зазоры/отверстия, например порт Micro USB сзади и слот SD-карты спереди вверху:
![](https://habrastorage.org/getpro/habr/upload_files/e02/fbc/f30/e02fbcf30f44fe7b9b0b2f9eed292850.jpg)
16. Тестирование камеры
Вставляем карту MicroSD в слот камеры, а кусочек резины обратно, включаем камеру переключателем сзади, и находим веб-сервер IP-камеры (см. этапы 5 и 6):
![](https://habrastorage.org/getpro/habr/upload_files/5a7/ce3/33c/5a7ce333cd4bc87af7db88e019c03d93.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/286/e5e/325/286e5e3259c3bfcb6a46d5a57f4b7b9b.jpg)
Процедура запуска камеры и поиска её веб-сервера та же, но без нажатия кнопки сброса, ведь снова программировать камеру не нужно:
![](https://habrastorage.org/getpro/habr/upload_files/a99/dfc/dcc/a99dfcdcc9cdfbcccec3f43e8bdbe21b.jpg)
В меню веб-сервера камеры нажимаем кнопку Start Stream («Начать трансляцию») и получаем видеопоток в реальном времени:
![](https://habrastorage.org/getpro/habr/upload_files/560/43a/ec0/56043aec0d6016267191973a2afe582b.jpg)
17. Панель видеопотока
На этой панели есть вся подробная информация о ходе записи, освещённости (в ночное время), свободном месте на карте памяти, а также о дате и о температуре камеры. Здесь даже кнопкой переключается светодиод на плате ESP, отображается движение, обнаруженное ИИ, меняется чувствительность определённых функций и т. д.:
![](https://habrastorage.org/getpro/habr/upload_files/62c/2cd/7d4/62c2cd7d4edd9f547b98428c46de7399.jpg)
Чтобы менять разрешение записи (не только просмотра), открываем вкладку разрешения и выбираем более низкое или даже более высокое (наибольшее — 1600 × 1200). Во вкладке Get Folder («Получить папку») просматриваем записанные видео, нажимая кнопку Start Stream:
![](https://habrastorage.org/getpro/habr/upload_files/4d1/473/531/4d14735315fa99d6d6cb4d9e33d32a07.jpg)
18. Крепление к стене
Можно взять держатель или кронштейн для крепления камеры к стене или любой другой поверхности. Здесь используется комплект креплений для экшн-камеры:
![](https://habrastorage.org/getpro/habr/upload_files/8bf/dd8/301/8bfdd8301d32a9c2713285df9c41ad05.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/c3e/ac2/f3f/c3eac2f3fa555007bb4a61e77b0fdae8.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/557/473/b88/557473b88f838a45940126782550245e.jpg)
19. Включение камеры через USB
Подключаем источник питания на 5 В к зарядному модулю Micro USB (с кабелем от зарядника телефона) в задней части камеры:
![](https://habrastorage.org/getpro/habr/upload_files/5d6/a18/3be/5d6a183bedfc825aac14ae7d4e639ded.jpg)
Прикреплённая к стене камера должна работать постоянно:
![](https://habrastorage.org/getpro/habr/upload_files/31d/a48/9c8/31da489c8b1dea4cf77c4361366b3b9e.jpg)
Так идёт подзарядка батарей и непрерывное питание ESP32-CAM.
![](https://habrastorage.org/getpro/habr/upload_files/736/244/10f/73624410f2c4ba4edafa31ec98c92447.jpg)
Батарея пригодится, если нужно снимать там, где нет розетки. Но на всю ночь её не хватит.
20. Очистка
Заполненную карту microSD извлекаем, подключаем к компьютеру и просматриваем файлы .MJPEG в проигрывателе:
![](https://habrastorage.org/getpro/habr/upload_files/e79/963/fe9/e79963fe9acde15803a08c64bdd6982c.jpg)
21. Запись
В левой части экрана телефона отображается состояние Recording («Запись»):
![](https://habrastorage.org/getpro/habr/upload_files/f99/b4d/db7/f99b4ddb7e03c7daace13aa4bad86eee.jpg)
Когда в кадре есть движение, камера записывает, когда его нет — прекращает запись.
![](https://habrastorage.org/getpro/habr/upload_files/a77/ea7/963/a77ea796377c586b78ec026d8a9feccd.jpg)
22. Заключение
Вот и всё:
![](https://habrastorage.org/getpro/habr/upload_files/323/9fc/e24/3239fce24d3931e338e2d2c3b0ba8e4f.jpg)
Теперь у вас есть собственная классная WiFi камера слежения:
![](https://habrastorage.org/getpro/habr/upload_files/115/624/86c/11562486c81a0e3447db186615881d86.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/c51/311/de9/c51311de94b87dfc964ea98cbb5fed9f.jpg)
Она сделает ваш дом ещё безопаснее:
![](https://habrastorage.org/getpro/habr/upload_files/6fe/285/fc1/6fe285fc17ae0ca55dfb98c315ab544b.jpg)
В репозитории на GitHub есть код с расширениями, дополнительной информацией, характеристиками и возможностями ESP32-CAM MJPEG2SD.
![](https://habrastorage.org/getpro/habr/upload_files/c03/cde/55b/c03cde55bb69d9c46f05ea4b2ee952c0.jpg)
Видео
Продолжить погружение в IT вы сможете на наших курсах:
![](https://habrastorage.org/getpro/habr/upload_files/80b/13f/f74/80b13ff74b3075f58619491214a87927.png)
Узнайте подробности здесь.
Другие профессии и курсы
Data Science и Machine Learning
Python, веб-разработка
Мобильная разработка
Java и C#
От основ — в глубину
А также