Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
Помогли мы вам |
Но до сравнительно недавнего времени, если 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, но если ты хочешь добиться лучшего качества, то можно подключить и другие.
Вот список необходимого ПО:
Итак, что же мы будем делать? Как ты уже, наверное, догадался, судя по тому, что я выбрал плату с камерой, — систему видеонаблюдения. Но не простую, с постоянной трансляцией, а с возможностью мгновенно получить фотографию. Управлять ею мы будем через Telegram-бота, а чтобы не пришлось покупать статический IP-адрес, для общения бота и девайса используем протокол MQTT.
MQTT (Message Queuing Telemetry Transport) — это легковесный протокол передачи сообщений, который используется для обмена данными между устройствами в интернете вещей (IoT). Он призван обеспечивать надежную связь между множеством устройств, которые работают с ограниченными ресурсами и могут быть подключены к интернету только временно или с периодическими задержками.
MQTT работает по принципу «издатель — подписчик», где одни устройства могут публиковать сообщения в топики (topics), а другие подписываться на них, чтобы получать сообщения, которые им нужны. Протокол предоставляет гибкий и простой способ передачи сообщений, что делает его идеальным для использования в системах IoT, где устройства могут иметь разные функциональные возможности и ограничения.
Перед тем как непосредственно перейти к программированию, необходимо настроить так называемый MQTT-брокер. Это сервер, на котором располагаются топики и к которому подключаются подписчики и издатели.
Разумеется, можно настроить его самостоятельно, например используя Mosquitto. Но стоит только подумать, что, кроме самого брокера, придется настраивать сервер, беспокоиться о его безопасности и так далее, как желание заниматься проектом куда‑то пропадает.
Так что в качестве брокера мы будем использовать сервис shiftr.io. Его бесплатного тарифа нам хватит с головой. Среди достоинств этого сервиса — интуитивно понятный интерфейс, подробная документация и визуализация всей системы. На главной странице твоего проекта можно увидеть, какие топики созданы и какое в них было последнее сообщение, какие устройства подключены, а когда начнутся рассылки пакетов — их тоже будет видно!
Чтобы наши устройства — телеграм‑бот и ESP32 Cam — могли взаимодействовать с нашим MQTT-брокером, необходимо выпустить токен. Это можно сделать в настройках твоего пространства.
После этого в списке токенов появится такой элемент: mqtt://
, где xakep
— это логин, а utBmi6LTWS7b4l5
— пароль. Запомни их, они нам еще пригодятся. Инфраструктура настроена, можно приступать к программированию.
Для программирования ESP32 на MicroPython существует несколько IDE. Я остановил свой выбор на ESP32 MPY-Jama — опенсорсном решении со множеством удобных функций.
Одна из них — графический интерфейс для утилиты esptool. Которую, впрочем, все равно нужно установить через pip: pip
.
Мы будем использовать специальную прошивку для ESP32 Cam, она доступна в этом GitHub-репозитории. Скачиваем файл прошивки и, используя IDE, прошиваем, не забыв перед этим отформатировать Flash-память.
Теперь мы можем подключиться и загрузить необходимые файлы на нашу плату. Для работы, кроме встроенных библиотек, нам понадобятся библиотеки micropython-umqtt.
и micropython-umqtt.
. Их можно установить с помощью встроенного менеджера пакетов upip. Для этого подключись к интернету через Wi-Fi, а затем выполни следующие команды:
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")
Теперь у нас все готово для работы. Чтобы облегчить задачу, я написал небольшую библиотечку — со всеми необходимыми функциями. Давай посмотрим, что в нее входит.
Вначале импортируем необходимые библиотеки:
network
— для подключения к интернету;umqtt.robust
— для взаимодействия с MQTT-брокером;camera
- в этой библиотеке находятся функции для работы с камерой;time
— похож на одноименную библиотеку из обычного Python;machine
— это базовый модуль MicroPython, позволяющий управлять пинами.# Импорт библиотек
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, теперь рассмотрим остальные.
|
|