Сегодня мы собираемся собрать поворотную камеру видеонаблюдения. Эта камера подключена к WiFi, поэтому мы сможем контролировать дом или то, что камера видит с телефона в любом месте, либо в локальной сети, либо извне. Мы также добавим сервопривод, который заставляет камеру двигаться, чтобы мы могли увеличить угол обзора камеры. Помимо использования в качестве камеры безопасности, подобную камеру можно использовать для многих других целей, например, для проверки правильности работы 3D-принтера, чтобы остановить его в случае возникновения проблем. Но теперь, давайте начнем!

Нам понадобится
Чтобы построить эту камеру, нам понадобится плата ESP32, крошечная камера, которая поставляется вместе с ней, и адаптер USB-to-serial. Плата камеры ESP32 представляет собой обычную плату ESP32 с этой маленькой камерой на одной печатной плате. Для тех, кто не знает, ESP32 — это программируемая плата, похожая на Arduino, но с гораздо более мощным чипом и возможностью подключения к WiFi.
Чтобы увидеть, что видит камера с телефона или компьютера, и сделать снимки, мы будем использовать Home Assistant и ESPhome, но об этом мы поговорим позже.
Подготовка ESP32-cam


Сначала вам нужно подключить камеру к плате с помощью маленького разъема, который очень хрупок. Как только вы вставите разъем, вы можете опустить рычаг. Затем прикрепите камеру поверх платы на кусок двустороннего скотча. Камера ESP32 также имеет возможность вставлять микро SD, и хотя мы не будем использовать ее сегодня, она позволяет нам делать снимки и сохранять их.
Загрузка кода
Обычно платы Arduino и ESP также имеют USB-разъем для загрузки программы с компьютера. Однако у здесь нет usb-разъема, поэтому для подключения его к компьютеру для загрузки программы вам понадобится переходник usb-to-serial, который напрямую связывается с чипом через контакты. Чтобы загрузить программу, вы также должны соединить контакт 0 с землей. Для этого припаиваем к этим двум контактам перемычку. Поэтому, когда нужно запрограммировать плату, просто ставим перемычку между двумя контактами.



Подключение камеры к Home Assistant
Но теперь давайте взглянем на программное обеспечение, которое будет управлять камерой. Камера будет подключена к Home Assistant. Home Assistant — это система домашней автоматизации, которая работает локально и позволяет нам управлять всеми нашими устройствами домашней автоматизации, такими как умные лампочки и розетки, с одного интерфейса.
Для запуска Home Assistant используем Windows, работающий на виртуальной машине, но если он у вас есть, вы можете использовать Raspberry pi, который потребляет меньше энергии. Чтобы просмотреть данные со своего смартфона, вы можете загрузить приложение Home Assistant. Для подключения из-за пределов локальной сети можно использовать Nabu Casa Cloud, это самое простое решение, но оно платное. Есть и другие решения, но они не совсем безопасны.

Таким образом, из приложения Home Assistant мы сможем увидеть живое видео с камеры. Для подключения камеры к Home Assistant мы будем использовать ESPhome. ESPhome — это надстройка, которая позволяет нам подключать платы ESP к Home Assistant через Wi-Fi. Чтобы подключить камеру ESP32 к ESPhome, выполните следующие действия:
- Установите плагин ESPhome в Home Assistant.
- На панели инструментов ESPhome нажмите «Новое устройство» и «Продолжить».
- Дайте вашему устройству имя
- Выберите ESP8266 или плату, которую вы использовали
- Скопируйте полученный ключ шифрования, он нам понадобится позже
- Нажмите РЕДАКТИРОВАТЬ, чтобы увидеть код устройства.
- Под esp32: вставьте этот код (с комментариями framework: и type:)
esp32: board: esp32cam #framework: #type: arduino
- Под Wi-Fi введите свой Wi-Fi ssid и пароль
- Чтобы сделать соединение более стабильным, вы можете дать плате статический IP-адрес с помощью этого кода:
wifi: ssid: yourssid password: yourwifipassword manual_ip: # Set this to the IP of the ESP static_ip: 192.168.1.61 # Set this to the IP address of the router. Often ends with .1 gateway: 192.168.1.1 # The subnet of the network. 255.255.255.0 works for most home networks. subnet: 255.255.255.0
- В конце кода вставьте эту часть:
esp32_camera: name: Telecamera 1 external_clock: pin: GPIO0 frequency: 20MHz i2c_pins: sda: GPIO26 scl: GPIO27 data_pins: [GPIO5, GPIO18, GPIO19, GPIO21, GPIO36, GPIO39, GPIO34, GPIO35] vsync_pin: GPIO25 href_pin: GPIO23 pixel_clock_pin: GPIO22 power_down_pin: GPIO32 resolution: 800x600 jpeg_quality: 10 vertical_flip: False output: - platform: gpio pin: GPIO4 id: gpio_4 - platform: ledc id: pwm_output pin: GPIO2 frequency: 50 Hz light: - platform: binary output: gpio_4 name: Luce telecamera 1 number: - platform: template name: Servo Control min_value: -100 max_value: 100 step: 1 optimistic: true set_action: then: - servo.write: id: my_servo level: !lambda 'return x / 100.0;' servo: - id: my_servo output: pwm_output transition_length: 5s
Первая часть кода под esp32_camera: определяет все выводы для фактической камеры. Потом под light: определяется светодиод камеры. В конце кода определяется серводвигатель, а значение, используемое сервоприводом для установки угла поворота, считывается из Home Assistant под number:.
В конце код должен выглядеть так. Каждому устройству дается свой ключ шифрования.
esphome: name: camera-1 esp32: board: esp32cam #framework: # type: arduino # Enable logging logger: # Enable Home Assistant API api: encryption: key: "encryptionkey" ota: password: "password" wifi: ssid: "yourssid" password: "yourpassword" # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Camera-1 Fallback Hotspot" password: "password" captive_portal: esp32_camera: name: Telecamera 1 external_clock: pin: GPIO0 frequency: 20MHz i2c_pins: sda: GPIO26 scl: GPIO27 data_pins: [GPIO5, GPIO18, GPIO19, GPIO21, GPIO36, GPIO39, GPIO34, GPIO35] vsync_pin: GPIO25 href_pin: GPIO23 pixel_clock_pin: GPIO22 power_down_pin: GPIO32 resolution: 800x600 jpeg_quality: 10 vertical_flip: False output: - platform: gpio pin: GPIO4 id: gpio_4 - platform: ledc id: pwm_output pin: GPIO2 frequency: 50 Hz light: - platform: binary output: gpio_4 name: Luce telecamera 1 number: - platform: template name: Servo Control min_value: -100 max_value: 100 step: 1 optimistic: true set_action: then: - servo.write: id: my_servo level: !lambda 'return x / 100.0;' servo: - id: my_servo output: pwm_output transition_length: 5s
- После завершения кода мы можем нажать «Установить», подключить последовательный адаптер ESP32 к нашему компьютеру с помощью USB-кабеля и следовать инструкциям на экране, чтобы загрузить код, как вы видели в последнем шаге.
- Когда ESP32-камера подключена к WiFi, мы можем перейти к настройкам Home Assistant, где мы, вероятно, увидим, что Home Assistant обнаружил новое устройство.
- Нажмите «Настроить» и вставьте туда ключ шифрования, который вы скопировали ранее.
После загрузки программы вы можете удалить перемычку между землей и контактом 0 и включить питание платы (если перемычка не удалена, плата не будет работать). Если вы посмотрите на журналы устройства, вы должны увидеть, что ESP32-камера подключается к WiFi. На следующих шагах мы увидим, как настроить приборную панель Home Assistant для просмотра живого видео с камеры, для перемещения серво и для съемки фотографий с камеры.
Соединения
После того, как мы запрограммировали ESP32, мы можем удалить USB-адаптер для последовательного порта и подключить плату непосредственно к контакту 5 В. И на данный момент камере не хватает только корпуса, в котором ее можно было бы установить. Однако оставлять камеру неподвижной скучно, поэтому добавим сервопривод, чтобы она двигалась.Подключаем коричневый и красный провода серводвигателя к источнику питания, а желтый провод, который является сигналом, к контакту 2 ESP32. На картинке ниже вы можете найти схему.


Создание корпуса
Теперь нужно превратить тестовую схему во что-то более похожее на готовый продукт. Поэтому напечатаем на 3D-принтере все детали, чтобы сделать небольшую коробку, в которую можно установить камеру. Ниже вы можете найти файлы .stl для 3D-печати.
Пропускаем серводвигатель и силовые провода через отверстия в маленькой коробке. Затем приклеиваем камеру ESP32 к крышке, совместив камеру с отверстием. Устанавливаем серводвигатель на кронштейн, который будет удерживать камеру, и закрепим его двумя болтами. Прикрепим скобу к небольшой коробке двумя винтами, чтобы камеру можно было наклонять. Чтобы винты внутри не касались кабелей, защитим их термоусадочной трубкой. Затем закрываем крышку с камерой четырьмя винтами. На этом этапе осталось только собрать основу. Пропустим вал серводвигателя через отверстие в основании и прикрутим к валу маленький рычаг. Затем приклеим рычаг к основе. Таким образом, серводвигатель может поворачивать камеру на 180 градусов.


Вот мы и закончили сборку камеры. Для питания можно использовать любой блок питания на 5В. Используя отверстия в основании, мы можем прикрутить камеру к стене или деревянной поверхности.
Настройка панели управления Home Assistant

Чтобы увидеть живое видео с камеры, включить светодиод и переместить двигатель из интерфейса Home Assistant, нам нужны четыре карты на панели управления Home Assistant.
- Первая — это карточка просмотра изображений , которая позволяет просматривать живое видео с камеры. В настройках карты просто выберите объект камеры и установите режим просмотра камеры на автоматический (это важно, потому что, если вы установите его в режиме реального времени, камера всегда отправляет видео и перегревается).
- Затем нам нужна кнопка, чтобы делать фотографии с камеры. Это немного сложнее. Сначала нам нужно зайти в надстройку «Редактор файлов» (если у вас ее нет, вы можете установить ее из магазина надстроек) в папку конфигурации и создать новую папку для сохранения фотографий, в данном случае называемую камерой.Ниже приведен код текстового редактора для кнопки.
show_name: true show_icon: true type: button tap_action: action: call-service service: camera.snapshot data: filename: /config/camera/telecamera_1_{{ now().strftime("%Y-%m-%d-%H:%M:%S") }}.jpg #change the entity name above with the name of the entity of your camera target: entity_id: - camera.telecamera_1 #change the entity name with the name of the entity of your camera name: Take photo icon_height: 50px icon: mdi:camera hold_action: action: none
- В камере тоже есть светодиод, хоть он и не способен осветить всю комнату. Для этого используем другую кнопку-карту, которая переключает яркость светодиода при нажатии.
- Последняя карта — это карта управления, которую настроим для управления серводвигателя. Итак, с этой картой у нас есть очень простой ползунок для управления углом мотора и для перемещения камеры.
Как это работает


Наконец-то камера работает, и в приложении Home Assistant видим то, что видит камера в режиме реального времени. Из приложения также можем заставить камеру двигаться, перемещая ползунок, чтобы смотреть на большее пространство. Как уже говорили, в камере также есть светодиод, хотя свет, который он излучает, не позволяет вам видеть ночью. Из приложения можно делать снимки с камеры, но нельзя снимать видео. Сделанные снимки можно увидеть в папке, которую мы создали ранее в Home Assistant. Чтобы вывести камеру на новый уровень, вы можете подключить камеру к датчику движения или датчику открытия двери, который при обнаружении движения сделает снимок с помощью камеры.
Теги: #esp