К старту курса по разработке на С++ рассказываем, как самостоятельно собрать 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: он выложил последнюю версию кода). Всю информацию о коде смотрите по ссылке.

Чтобы запрограммировать модуль камеры, соединяем его с конвертером FTDI, работающим с USB и последовательным портом, как показано на схеме выше. Здесь подключаем пин GPIO 0 к GND, что позволяет программировать ESP. Нажимаем кнопку сброса на задней части платы модуля камеры, чтобы включить режим флеш-памяти перед загрузкой.

2. ESP32.json

Прежде чем переходить к коду, добавим во вкладку Preferences («Предпочтения») в Arduino IDE ссылку ESP32 .json, дающую доступ к примерам кода, библиотекам и так далее:

3. Заполнение параметров в коде

Открываем загруженный код камеры слежения ESP32-CAM_MJPEG2SD:

Раскомментируем строку CAMERA_MODEL_AI_THINKER, если у вас эта плата:

Вводим необходимые параметры, такие как модель камеры, а также учётные данные WiFi:

Дополнительно вводим данные FTP, чтобы получать записанные видео удалённо:

4. Загрузка кода на плату

Выбираем плату, скорость загрузки, частоту и режим флеш-памяти, схему разделов, основной уровень отладки и COM-порт:

Нажимаем Upload  («Загрузить»). Загрузка на плату небыстрая: чуть подождём:

Ссылка на код.

5. Подготовка ESP32-CAM и получение IP-адреса

Обязательно отсоединяем провод от IO0 к GND:

И нажимаем кнопку сброса:

Вставляем в слот модуля карту MicroSD. Минимум 4 Гб:

И получаем уникальный IP-адрес с монитора порта. Нужная кнопка в правом верхнем углу Arduino IDE.

6. Веб-сервер ESP32-CAM

После ввода IP-адреса в веб-браузер при включённой камере появится такая страница:

Нажав кнопку Start Stream («Начать трансляцию»), начинаем просмотр видеопотока:

Последняя версия кода даёт возможность начинать и останавливать запись вручную. Ранее запись запускалась лишь при обнаружении движения.

7. Сборка камеры

Для корпуса выбираем контейнер или материал, с которым легко работать. С вставкой железа в сплющенную трубу из ПВХ (показана ниже) возникли проблемы, поэтому используем цилиндрический пластиковый контейнер. Подробнее об этом читайте далее.

На картинке не совсем те детали, что использовались.

Для сборки понадобится
  • ESP32-CAM;

  • плата для заряда батарей TP4056 1S;

  • Li-Ion батарея 18650 3,7 В;

  • ползунковый мини-переключатель SPDP или тумблер 3 A;

  • красный светодиод 3 мм;

  • резистор мощностью 1/4 Вт 220 Ом;

  • антенна;

  • провод диаметром 0,51 мм;

  • крепёжный винт GoPro.

8. Подключение платы для внешней антенны

Выпаиваем резистор 0 Ом, соединяющий ESP с его антенной на плате:

И припаиваем его, подключая ESP к порту внешней антенны:

Этот этап нужен, чтобы увеличить диапазон для подключения собственной антенны.

9. Подключение источника питания ESP32-CAM

Подключаем к батарее зарядную плату TP4056 4,2 В (соединения B+ и B– от платы к батарее показаны выше):

К клеммам батареи подключаем входы платы рядом с портом Micro USB:

10. Работа с соединениями компонентов

Выпаиваем штыревые разъёмы ESP32-CAM с обеих сторон и удлиняем их, припаивая обратно с проводами.

Добавляем индикатор питания (красный светодиод):

Чтобы не запутаться, подбираем цвета проводов по их назначению:

11. Схема соединений

По этой простой схеме подключений должна получиться домашняя камера слежения со всем её железом.

12. Выбор батарей и корпуса

Сначала был плоский Li-Ion аккумулятор, я заменил его на батареи, более компактные для нового, цилиндрического корпуса:

Чтобы камера работала хорошо, лучше использовать батарею ёмкостью более 2000 мА·ч:

В итоге параллельно использовали 2 батареи 18650 по 3,7 В и 2600 мА·ч, что дало в сумме 5200 мА·ч. Приличная ёмкость.

13. Подготовка железа к установке в корпус

Отмечаем и сверлим отверстия для выступающих из корпуса частей:

Выбираем корпус для камеры, состоящий из двух частей: с таким легко работать. Лучше распечатать его на 3D-принтере.

14. Установка в корпус

Клеим двусторонний скотч или ленту на батареи и модуль ESP32-CAM (сверху и снизу):

Вставляем их в корпус:

Места с выступающими компонентами герметизируем термоклеем:

15. Защита от воды

Крепим детали к корпусу термоклеем, если нужно:

Чтобы вода не попала внутрь, место стыка половинок заклеиваем изолентой:

Нарезаем кусочки резины и вставляем в любые зазоры/отверстия, например порт Micro USB сзади и слот SD-карты спереди вверху:

16. Тестирование камеры

Вставляем карту MicroSD в слот камеры, а кусочек резины обратно, включаем камеру переключателем сзади, и находим веб-сервер IP-камеры (см. этапы 5 и 6):

Процедура запуска камеры и поиска её веб-сервера та же, но без нажатия кнопки сброса, ведь снова программировать камеру не нужно:

В меню веб-сервера камеры нажимаем кнопку Start Stream («Начать трансляцию») и получаем видеопоток в реальном времени:

17. Панель видеопотока

На этой панели есть вся подробная информация о ходе записи, освещённости (в ночное время), свободном месте на карте памяти, а также о дате и о температуре камеры. Здесь даже кнопкой переключается светодиод на плате ESP, отображается движение, обнаруженное ИИ, меняется чувствительность определённых функций и т. д.:

Чтобы менять разрешение записи (не только просмотра), открываем вкладку разрешения и выбираем более низкое или даже более высокое (наибольшее — 1600 × 1200). Во вкладке Get Folder («Получить папку») просматриваем записанные видео, нажимая кнопку Start Stream:

18. Крепление к стене

Можно взять держатель или кронштейн для крепления камеры к стене или любой другой поверхности. Здесь используется комплект креплений для экшн-камеры:

19. Включение камеры через USB

Подключаем источник питания на 5 В к зарядному модулю Micro USB (с кабелем от зарядника телефона) в задней части камеры:

Прикреплённая к стене камера должна работать постоянно:

Так идёт подзарядка батарей и непрерывное питание ESP32-CAM.

Батарея пригодится, если нужно снимать там, где нет розетки. Но на всю ночь её не хватит.

20. Очистка

Заполненную карту microSD извлекаем, подключаем к компьютеру и просматриваем файлы .MJPEG в проигрывателе:

21. Запись

В левой части экрана телефона отображается состояние Recording («Запись»):

Когда в кадре есть движение, камера записывает, когда его нет — прекращает запись.

22. Заключение

Вот и всё:

Теперь у вас есть собственная классная WiFi камера слежения:

Она сделает ваш дом ещё безопаснее:

В репозитории на GitHub есть код с расширениями, дополнительной информацией, характеристиками и возможностями ESP32-CAM MJPEG2SD.

Видео

Продолжить погружение в IT вы сможете на наших курсах:

Узнайте подробности здесь.

Другие профессии и курсы

Комментарии (28)


  1. hecategram
    17.01.2022 21:55
    +6

    Первый момент. За 25 енотов можно взять на али поворотную камеру слежения. С реальной матрицей в 3 мегапикселя. Плюс с уже готовой программой для слежения через мобильное приложение. Если набрать купоны то выйдет еще дешевле.

    Теперь насчет ЕSP32. Реально с нее можно получить не большое разрешение. Все эти сказки про 1600 на 1200 это сказки. Она может и даст его, на частоту кадров тут надежды нет.

    Плюс это все добро в работе на больших разрешениях реально греется.

    В общем решение это для очень скромных задач. Ну и для поиграться тоже пойдет.


    1. happy-cat
      18.01.2022 00:31

      А пример можно? (хотя бы название)
      И еще - хочу в подьезде на пожарной лестнице установить неприметную камеру, желательно вообще незаметную (задолбали ссать на стены и переворачивать банки с окурсками), но есть опасение что за малогабаритные камеры можно и присесеть (что то там было пару лет назад как средства слежения что то такое, не помню уже)

      Спасибо скажу сразу тк аккаунт на 1 комент в сутки.


      1. Elsajalee
        18.01.2022 03:46

        В приницпе, можно и без Ali, только неповортую. Tapo C100, ~2200 в настоящий момент. C200 - повортная, около ~2700. Увы, они приметные.

        А если хотите неприметную, то их, аналоговых, полно много лет как. Размер меньше штекера "тюльпан". Более того, по запросу "mini camera wifi" полно толщиной с палец, вот за них как раз можно и получить.


      1. MedicusAmicus
        18.01.2022 09:16
        +3

        Лучше приметную. Большую, с моргающим светиком. И не обязательно - камеру, достаточно муляжа.
        Ну найдете ссыкуна - дальше что? А так - место уже не укромное, под наблюдением.

        А за банки окурков в подъезде - по ушам бить. Курильщика. Покурил - выбрось.


        1. danilishei
          18.01.2022 14:53

          Согласен. За муляж камеры точно не сядешь. И отпугнёт кого надо. А сломают - не жалко


    1. fk0
      18.01.2022 01:17
      +1

      Камера с готовой программой слежения через мобильное приложение может быть как раз бесполезной тратой денег. Купил пару таких, Tapo и Xiaomi... Если вкратце: там целый ворох проблем и для задач уровня сигнализации/видеонаблюдения их толком использовать невозможно, бесполезная игрушка. Особенно Xiaomi. Tapo хотя бы потенциально можно для чего-то приспособить.

      В чём проблемы: основная -- нет возможности видеопоток с камеры отправлять на какой-либо свой сервер. У Xiaomi такой возможности вообще нет. Можно только смотреть через приложение на андроиде. У Tapo можно через rtsp получать с камеры видео, но на самом деле это несколько неудобно (сильно забивает канал -- подразумевает локальный, а не удалённый сервер). В идеале конечно хотелось бы видео с очень низким frame rate и/или просто через http получать буквально 5 кадров в секунду в motion jpeg.

      Для Xiaomi обещали "облако", но пишут оно есть только для китайских версий, а у продаваемых в РФ -- нет.

      Все камеры пишут на SD-карточку, но толку с этого ровно ноль: если в помещение проникает посторонний, то первым делом он заберёт карточку или камеру с собой. Поэтому хотелось бы писать на какой-то сервер стоящий в сторонке.

      Функции сигнализации тоже с проблемами. У Xiaomi -- штатный механизм нотификаций андроида не используется, вместо этого только свой сервер и, фактически, либо постоянно работающая программа и постоянно разряжающаяся батарея, либо нет тревоги от "датчика движения". У Tapo используется штатный механизм и батарею телефона не сажает. Но опять же что произошло можно увидеть только подключившись к камере удалённо и скачав видео с карточки. А если кто-то вломился и быстро отключил камеру -- ничего не узнаешь.

      Да и просто факт отключения питания ни камерами, ни сервером фирмы производителя никак не замечается. Камера может сломаться, отключиться, и если регулярно не смотришь -- никогда не узнаешь. Равно как и для сигнализации такое решение не годится (отключил электричество -- и ничего не работает).

      Ну и само собой камеры не включаются, не настраиваются, и не работают без интернета, без доступа к серверу фирмы производителя. Который не известно будет ли работать через 5 лет, не будет ли окончена поддержка камер. Будут ли выпускаться мобильные приложения для следующих версий андроида и т.д. и т.п.

      И наконец неприятно, что картинка с камеры постоянно идёт в сеть. Да мало ли кто там смотреть будет. Прецеденты были. Хочется без облаков и в рамках своей закрытой от инета VPN.

      Раньше делал системы на основе сервака с линуксом и motion. И обычной (без облаков) ethernet/wifi камеры. К сожалению такие камеры существенно дороже. И понятно почему -- сегментация рынка. На базе такой камеры можно построить полноценное решение. Где траффик с камеры измеряется не мегабайтами, а килобайтами, где злоумышленнику бесполезно ломать и вырывать камеру, где картинка не уходит в чужое облако, где посмотреть можно не только с мобильника, а с любого компьютера и любое число камер одновременно...


      1. system22
        18.01.2022 09:16

        Поставил на даче несколько noname камер по 20-30$ и NVR в укромном месте на который пишется все видео. Если кто-то оторвет камеры, то записи все равно останутся. К тому же, по движению отправляются фотки на почту.. На мой взгляд это удобнее чем писать в облако. Китайское облако использую только для просмотра онлайн или скачивания записей, поскольку ip серый.


        1. la_stik
          18.01.2022 14:09

          Добрый день

          Не осталось ли ссылок на камеры?

          Спасибо


        1. AKYLA
          19.01.2022 01:43

          Аналогично, только ещё вотвсепогодном ящике (собственного изготовления, железный ящик плюс вентилятор с фильтром, аналоговыми реле влажности и температуры, если вырубили электричество и сильно холодно, то при продаже питания, в начале нагревается корпус и только потом запуск, лишняя влага вытягивается спец кулером). Стоит raspberry на котором node-red, на него с камер приходят алерты движения, дёргается камера на скриншот, который в свою очередь отправляется в телеграм. В планах идентификация по лицу (хотя в камерах есть функция). Такая система своими руками в разы дешевле и мощнее.


      1. edogs
        19.01.2022 02:10

        Для Xiaomi обещали «облако», но пишут оно есть только для китайских версий, а у продаваемых в РФ — нет.
        Все камеры пишут на SD-карточку, но толку с этого ровно ноль: если в помещение проникает посторонний, то первым делом он заберёт карточку или камеру с собой. Поэтому хотелось бы писать на какой-то сервер стоящий в сторонке.
        В чём проблемы: основная — нет возможности видеопоток с камеры отправлять на какой-либо свой сервер. У Xiaomi такой возможности вообще нет. Можно только смотреть через приложение на андроиде.
        само собой камеры не включаются, не настраиваются, и не работают без интернета, без доступа к серверу фирмы производителя.
        картинка с камеры постоянно идёт в сеть.
        Используем Xiaomi YI Home Camera, из коробки — трэшачок, но по инструкциям с 4pda настроили все очень чудесно, т.к. там на камере какой-то урезанный юникс и в принципе народ уже много наколхозил для них. В результате работают и облака и фтп и телнет и тревожные видео в телеграм и запрет вещания в китай и работа без интернет и т.д. и т.п. Прочитайте там в топике в шапке инфу, все грамотно сведено в хороший faq с инструкциями.


      1. Kybb
        19.01.2022 08:30

        Погуглите dafang hack. Я две свои Xiaomi так перевел на rtsp.


  1. count_enable
    17.01.2022 22:09
    +12

    Перевод базового видеоурока по Ардуино на Хабре. Купить детальки, скачать прошивку даже не пытаясь разобраться что она делает, заклеить корпус синей изолентойскотчем. Уровень конструктора для 7-8 летних детей.

    Как камера оно очень убогое, ибо ESP32 не имеет паралельного интерфейса камеры и работает с ней очень медленно. Спасает ситуацию сама камера (ov2640) у которой есть JPEG/CIF кодек, что позволяет гнать упакованные данные сразу на сервер.


    1. N-Cube
      18.01.2022 09:39

      Вы очень недооцениваете детей - они как раз уйму вопросов задают, как все устроено и работает, так что для детей это вообще никак не годится. Вот от Raspberry Pi фаундэйшен есть интересные камеры со сменной оптикой и тьюторилами по программированию от детского уровня и до распознавания видеопотока, машинным обучением и проч.


      1. count_enable
        18.01.2022 11:56

        Вот в 8 лет они будут задавать вопросы почему нужно зарядное устройство и почему вайфай не ловит за 5 км, в 9 лет начнут разбирать код прошивки, в 10 перепишут его на нормальный С, в 11 поймут что экспрессиф убогий и перейдут на платформу получше.


        1. N-Cube
          18.01.2022 12:34
          +1

          Шкала вопросов по возрастам намного более нелинейна :) А по esp - что лучше вы знаете как доступный AT модем? К RPI (и ардуино, не к ночи будь помянуты) вайфай модулем их и ставят.


          1. count_enable
            18.01.2022 14:09

            Как Wi-Fi модем оно ещё неплохое, как МК ниже среднего. Очень плохое качество софта и документации от производителя. Я сам ими пользуюсь, но без особого удовольствия. Как ардуинка поиграться ещё ничего, но коммерческая разработка на этих модулях малоприятна.

            У TI есть серия CC3200 - есть и вай-фай, и интерфейс камеры с дма, правда со своими подводными камнями тоже.


            1. N-Cube
              18.01.2022 15:03

              Так их и используют как модем, в основном, и даже прошивку можно не обновлять - и так ок. Что еще нужно? И замены им в таком качестве я не знаю. Дальше, камеры на OV2640 есть даже I2C/SPI, к любому микроконтроллеру подключить можно, они дороже, но детям как раз.


              1. count_enable
                18.01.2022 15:15

                SPI там нет. I2C там есть только для конфигурации, изображение по нему не получить.

                С SPI есть Arducam - интересное извращение - камера, ПЛИС от Lattice, статическое ОЗУ. Потребляет, греется, стоит как десяток этих самых ESP32-CAM, и всё только для того чтобы в конце получить данные на вожделенной ардуине.


                1. N-Cube
                  18.01.2022 15:23

                  Так я про Arducam и говорю, как раз на OV2640. Двухмегапиксельная стоит втрое дороже esp-cam, зато и к MicroBit подключить можно и к RPI Pico, что нам и нужно. Если вы другое простое решение с камерой (для MicroBit) знаете, поделитесь.


                  1. count_enable
                    18.01.2022 15:47

                    Зачем так упорно держаться за неудобную платформу? К распберри проще всего подключить официальные камеры с MIPI. Для машинного зрения на МК можно взять OpenMV и к нему приделать хоть ESP, хоть MicroBit.

                    Amazon: Arducam 26$, ESP32-CAM 18$. За три штуки.


                    1. N-Cube
                      18.01.2022 15:53

                      Странный поворот... Много ли детей возраста 4—8 лет вы научили использовать машинное зрение на RPI?:) микробит с его скрэтч-подобным языком здесь самое то.


                      1. count_enable
                        18.01.2022 16:29

                        Я вообще сугубо отрицательно отношусь к обучению 4-8 леток машинному зрению. Точнее, не считаю подобное "обучением".

                        Для ардуиноподобных можно взять обычную OV, лучше с разрешением поменьше, типа OV7670, использовать QQVGA и тогда на битбэнге можно получить несколько кадров в секунду. Упомянутый ESP32-CAM тоже прокатит, на нём тоже можно скретч использовать.


                      1. N-Cube
                        18.01.2022 16:35

                        Так зачем тогда это рекомендуете? Детям всего лишь хочется поставить камеру на машинку с микробитом и подкрасться к охотящемуся геккону и так далее. Arducam тут вполне подходит. Как подключить ESP32-CAM к MakeCode для микробит я не знаю, у вас есть пруфы, что это легко и просто? Нет, свое расширение для ESP32-CAM писать я не буду - мне не интересно.


  1. dobergroup
    18.01.2022 02:16

    "Режим вспышки". Flash mode там в оригинале был?

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


  1. ECRV
    18.01.2022 02:48
    +1

    Идея интересная, посмотри ещё что такое kendryte k210 чип, у него тоже есть схожий модуль для камеры. Это МК, не Линукс. При желании можно переделать код, или даже запилииь распознавание лиц. Стоит тоже не дорого. Такая статья была бы поинтереснее


    1. longtolik
      18.01.2022 08:22

      Под распознавание лиц уже сделали K210. А я подключил черно-белую камеру с global shutter для машинного зрения (datamatrix в частности). Интересно, что китайцы, видимо, пытались, но результата нету.


  1. leonidy85
    18.01.2022 12:12

    Тоже есть такая камера, но я ее немного по другому настроил, по срабатыванию датчику движения она делает несколько фото и шлет в телегу.


  1. Cvet04eG
    19.01.2022 20:49

    Хотел такую камеру поставить на лестничной клетке и запитать от подъездного освещения. Пока тестил на кухне понял, что при скачках напряжения или кратковременных выключениях электричества камера зависает и надо ручками ее перезагружать. Хотя сосед купил на Али готовое решение с облаком и мобильным приложением в тридорога, а у него так же при скачках зависает, а качество не намного лучше.