Категория > Новости > Зоркий глаз. Собираем и программируем на Python устройство для видеонаблюдения - «Новости»
Зоркий глаз. Собираем и программируем на Python устройство для видеонаблюдения - «Новости»9-05-2023, 07:37. Автор: Green |
Cython, браузерный Brython, позволяющий работать с Java Jython и множество библиотек на все случаи жизни. Но до сравнительно недавнего времени, если Python-программист хотел сделать девайс для умного дома или машинку на радиоуправлении, он был вынужден либо использовать Arduino и волей‑неволей учить C++, либо довольствоваться микрокомпьютером вроде Raspberry Pi и искать (а порой и писать свои) библиотеки для управления теми или иными китайскими модулями. Иногда вообще приходилось создавать хтонических чудовищ, подключая проводом Arduino к Raspberry и опрашивая датчики через serial port, но все равно при этом нужно было писать прошивку для Arduino или другого контроллера на C++. Читайте также - Соль — незаменимое минеральное вещество для крупно-рогатого скота. Рацион животных, потребляющих растительный корм, содержит недостаточное количество натрия и хлора. Лизунцы по доступным ценам. Но уже примерно пять лет, если судить по дате моей статьи про MicroPython, можно заниматься DIY-проектами, не переключаясь с одного языка программирования на другой. За это время многое в мире MicroPython поменялось, вышли новые сборки, появились одни библиотеки и полностью перестали поддерживаться другие, а Arduino официально приняла MicroPython в свою экосистему. С каждым годом число поддерживающих MicroPython плат растет, но значительный их процент все еще базируется на ESP32. И действительно, у этого контроллера масса достоинств, таких как встроенные Wi-Fi и BLE, а еще, если говорить честно, отсутствие конкурентов в том же ценовом диапазоне. Но вот что касается плат, базирующихся на этом контроллере, — тут глаза разбегаются. Это и базовые версии от WeMos, целые наборы и модули от M5Stack и LILYGO. Не отстают, кстати, и российские инженеры: магазин iArduino не так давно выпустил свою отладочную плату Piranha. К тому же нельзя забывать про Великий Китайский Ноунейм, которым завален «Алиэкспресс». Кстати, в нашем проекте мы будем использовать одну из таких плат — ESP32 Cam (я так и не смог разобраться, кто же ее официальный производитель). Как несложно догадаться по названию, это модуль на основе ESP32 с подключенной камерой, чаще всего это OV2640, но если ты хочешь добиться лучшего качества, то можно подключить и другие. Pinout Map Вот список необходимого ПО:
Итак, что же мы будем делать? Как ты уже, наверное, догадался, судя по тому, что я выбрал плату с камерой, — систему видеонаблюдения. Но не простую, с постоянной трансляцией, а с возможностью мгновенно получить фотографию. Управлять ею мы будем через Telegram-бота, а чтобы не пришлось покупать статический IP-адрес, для общения бота и девайса используем протокол MQTT. infoMQTT (Message Queuing Telemetry Transport) — это легковесный протокол передачи сообщений, который используется для обмена данными между устройствами в интернете вещей (IoT). Он призван обеспечивать надежную связь между множеством устройств, которые работают с ограниченными ресурсами и могут быть подключены к интернету только временно или с периодическими задержками. MQTT работает по принципу «издатель — подписчик», где одни устройства могут публиковать сообщения в топики (topics), а другие подписываться на них, чтобы получать сообщения, которые им нужны. Протокол предоставляет гибкий и простой способ передачи сообщений, что делает его идеальным для использования в системах IoT, где устройства могут иметь разные функциональные возможности и ограничения. Настройка инфраструктурыПеред тем как непосредственно перейти к программированию, необходимо настроить так называемый MQTT-брокер. Это сервер, на котором располагаются топики и к которому подключаются подписчики и издатели. Разумеется, можно настроить его самостоятельно, например используя Mosquitto. Но стоит только подумать, что, кроме самого брокера, придется настраивать сервер, беспокоиться о его безопасности и так далее, как желание заниматься проектом куда‑то пропадает. Так что в качестве брокера мы будем использовать сервис shiftr.io. Его бесплатного тарифа нам хватит с головой. Среди достоинств этого сервиса — интуитивно понятный интерфейс, подробная документация и визуализация всей системы. На главной странице твоего проекта можно увидеть, какие топики созданы и какое в них было последнее сообщение, какие устройства подключены, а когда начнутся рассылки пакетов — их тоже будет видно! Пример, как может все отображаться Чтобы наши устройства — телеграм‑бот и ESP32 Cam — могли взаимодействовать с нашим MQTT-брокером, необходимо выпустить токен. Это можно сделать в настройках твоего пространства. После этого в списке токенов появится такой элемент: ESP32 CamДля программирования ESP32 на MicroPython существует несколько IDE. Я остановил свой выбор на ESP32 MPY-Jama — опенсорсном решении со множеством удобных функций. Одна из них — графический интерфейс для утилиты esptool. Которую, впрочем, все равно нужно установить через pip: Так выглядит загрузчик Мы будем использовать специальную прошивку для ESP32 Cam, она доступна в этом GitHub-репозитории. Скачиваем файл прошивки и, используя IDE, прошиваем, не забыв перед этим отформатировать Flash-память. Теперь мы можем подключиться и загрузить необходимые файлы на нашу плату. Для работы, кроме встроенных библиотек, нам понадобятся библиотеки import network import upip # Не забудь вставить имя своей Wi-Fi-сети и пароль от нее def wifi_setup(): global sta_if sta_if.active(True) sta_if.scan() sta_if.connect('SSID', 'PASSWORD') print("Waiting for Wifi connection") while not sta_if.isconnected(): time.sleep(1) print("Connected to WiFi") wifi_setup() upip.install("micropython-umqtt.robust") upip.install("micropython-umqtt.simple") Теперь у нас все готово для работы. Чтобы облегчить задачу, я написал небольшую библиотечку — со всеми необходимыми функциями. Давай посмотрим, что в нее входит. Вначале импортируем необходимые библиотеки:
# Импорт библиотек import network from umqtt.robust import MQTTClient import camera import time import machine # Инициализация глобальных переменных sta_if = network.WLAN(network.STA_IF); # Wi-Fi-модуль camera.init(0, format=camera.JPEG, fb_location=camera.PSRAM) # Непосредственно камера mqtt_client = None # Заготовка для MQTT-клиента led = machine.Pin(4, machine.Pin.OUT) # Встроенный светодиод С одной из функций библиотеки мы познакомились раньше, когда подключались к Wi-Fi, теперь рассмотрим остальные. Перейти обратно к новости |