- PVSM.RU - https://www.pvsm.ru -

Управляем домом через Telegram

В настоящее время системы управления умным домом становятся все популярнее. Централизованный интерфейс, который управляет устройствами по всему дому, помогает экономить время и позволяет гораздо эффективнее контролировать ваше жилище. Реализацией своего видения подобных систем занимаются как именитые бренды: Apple, Amazon и Google, встраивая их в свою инфраструктуру, так и умельцы, собирающие подобные системы на базе платформы Arduino.

Наша же цель была следующей: создать систему, которая будет доступна на большом количестве устройств и не будет привязана к какому-либо месту. Отличный вариантом для реализации управления оказался бот для мессенджера Telegram. Telegram имеет приложения на всех основных платформах, а так же web-версию. Доступ к нему можно получить из любого места, нужно лишь иметь аккаунт.

Из модулей мы выбрали следующие:

• Управляемая RGB светодиодная лента
• Управляемая розетка
• Датчик температуры
• Датчик освещенности (он используется для автоматического включения освещения)

Что нам понадобится

1. Raspberry Pi 3

Маленький, но удаленький компьютер, не нуждающийся в представлении, его мощности нам с головой хватит для этих задач. Третья версия хороша наличием встроенного Wi-Fi модуля, так что нам не придется думать о стороннем адаптере.

2. Модули ESP8266

Их нам понадобится 4 штуки. Мы использовали ESP-12F, но вообще разницы нет: ESP-1 будет вполне достаточно. Так же готовые платы NodeMCU помогут сэкономить вам время и силы.

3. Светодиодная лента

Мы взяли управляемую RGB-ленту на контроллерах WS2812b, хотя, впрочем, тут подойдет любая лента, работающая на 5В и поддерживаемая платформой Arduino.

4. Датчики температуры и освещения

Мы использовали модуль BH1750 для определения освещенности в комнате и DS18B20 для температуры. Основными критериями были доступность, поддержка платформой Arduino и возможность работы с 3.3В логикой ESP8266.

5. Реле

Субмодуль MOD-1CH для Arduino может пропускать до 10А тока и управляется 5В, аналогов для 3.3В мы не нашли, так что для управления использовали транзистор в ключевом режиме.

6. Telegram-бот

Непосредственное управление всей системой будет осуществляться при помощи бота Telegram, запущенного на Raspberry: это позволит системе быть легкодоступной на любой платформе из любой точки мира. Создавать бота для Telegram довольно просто, благодаря развитой платформе и поддержке большого количества языков.

Таким образом вся наша система будет выглядеть примерно так:

image

Реализация

Первым делом протестируем модули.

image

Готовые печатные платы адаптируют расстояние между пинами, что заметно облегчает пайку, а также содержат в себе необходимые резисторы, соединяющие пины CH_PD и GPIO2 с Vcc.

К сожалению, модули ESP8266 питаются и работают на 3.3В, а не на 5, как Arduino. Преобразовать напряжение можно с помощью готового модуля-преобразователя, но можно и спаять схему на основе линейного стабилизатора AMS1117, как это сделали мы.

image

Следующий этап – программирование.

К счастью, платформа ESP8266 поддерживается Arduino IDE, что открывает нам множество возможностей. Для непосредственной загрузки прошивки на модуль мы будем использовать Arduino Nano, однако то же самое можно сделать и через обычный USB-UART преобразователь. Не следует забывать про разницу напряжений у Arduino и ESP.

Схема получилось такой:

image

Кнопка нужна для того, чтобы замкнуть пин GPIO1 на GND при подаче питания на модуль и, тем самым, перевести его в режим программирования.

Далее настраиваем Arduino IDE, чтобы она понимала ESP (подробная инструкция со всеми ссылками [1]) и пробуем записать тестовый скетч на моргание светодиодом.

image

После удачного мигания мы приступили к пайке всех модулей. С датчиком температуры и освещения все довольно стандартно.

Температуры:

image

image

Освещения:

image

image

А вот лента и умная розетка вызвали некоторые трудности.

Простое подключение управляющего входа ленты к ESP результата не дало. Оно и не удивительно, ведь WS2812b требует на управляющий вход минимум 70% от входа VCC (50.7=3.5), и 3.3В платы явно недостаточно. Однако мы нашли костыль интересный способ запустить их без использования повышающего преобразователя. Если диоду требуется минимум 0.7Vcc для реакции на сигнал и мы не можем увеличить уровень этого сигнала, то надо уменьшить Vcc! Да, светодиоды будут гореть не так ярко, однако нам не надо запитывать таким образом всю ленту; хватит и одного диода. Передавая сигнал далее по цепочке, светодиод использует уже уровень Vcc для формирования сигнала, чего вполне хватает для «нормального» светодиода. Таким образом, подключив первый диод в ленте к питанию через диод, который «съедает» около 0.6В, мы получаем отлично работающую ленту, напрямую управляемую из нашего модуля ESP8266. А чуть более тусклый первый светодиод мы оставили для отладочных нужд: отображать состояние подключения к сети.

Вот что вышло:

image

image

Нашу умную розетку мы хотели разместить полностью в корпусе от старой розетки с таймером. Туда должны были влезть: сам ESP-12F, блок питания для него и реле, управляющее розеткой. Однако, разместив там реле и блок питания, мы так и не смогли вместить там еще и модуль ESP. Поэтому пришлось приделать снизу еще маленькую коробочку.

image

Итог получился не таким элегантным как мы хотели изначально, зато это было цельное устройство, которое надо было просто воткнуть в розетку.

image

image

Следующим шагом была настройка Raspberry. План был такой: наши модули подключаться к точке доступа Wi-Fi, которой является Raspberry, а, точнее, к её встроенному Wi-Fi модуль. На Raspberry запущен Telegram-bot, который находится со всеми модулями в локальной сети и может без проблем обмениваться с ними http-запросами. К интернету это все подключено через Ethernet.

Для осуществления этого плана мы использовали два пакета:

  • hostapd – позволяет использовать встроенный wi-fi модуль как точку доступа
  • dnsmasq – объединяет в себе DHCP и DNS сервера.

Мы пытались добиться относительной независимости кода и устройств, поэтому все запросы выполнялись не на ip-адреса, а на имена из придуманной зоны .sh (light.sh, socket.sh и т.д.). Для этого мы для каждого модуля настроили статические ip-адреса и добавили на эти адреса DNS записи, соответствующие модулям. Благо dnsmasq очень легко конфигурируется (подробная инструкция по настройке этой системы [2]).

И, наконец, непосредственно бот.

Мы писали бота на Python, используя библиотеку python-telegram-bot. Нами был разработан кнопочный интерфейс, что упрощает управление, превращая устройство в своеобразный пульт ДУ:

image

image

Исходный бота код можно изучить здесь [3].

И, чтобы им не пользовался кто попало, мы поставили защиту паролем.

Вывод

Конечно, мы не создали какой-либо революционной системы, существует огромное количество более целостных и продуманных реализаций. Модули температуры и освещения можно было бы сделать автономными, благо у ESP8266 есть специальный режим ожидания, в котором она потребляет очень мало энергии. Можно было бы добавить легкую пользовательскую расширяемость, не требующую изменения исходного кода и перенастройки сетевых подключений и еще много чего. Однако цель всего этого проекта была совсем не в этом. В первую очередь мы хотели создать простую систему, которая могла вполне быть создана кем угодно у себя в доме и не требовала бы серьезной подготовки и затрат. А самое главное: мы хотели научиться многим вещам, пока мы делали этот проект. И если практичность и функциональность нашего решения можно еще долго дорабатывать, то знания, полученные нами в процессе планирования и воплощения в жизнь этой системы, определенно стоили потраченных усилий.

Автор: ThandorOne

Источник [4]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/umny-j-dom/255638

Ссылки в тексте:

[1] подробная инструкция со всеми ссылками: https://geektimes.ru/post/271754/

[2] подробная инструкция по настройке этой системы: https://frillip.com/using-your-raspberry-pi-3-as-a-wifi-access-point-with-hostapd

[3] здесь: https://mega.nz/#F!WRdnjSiR!6QZSzk-03rUdp1PeyMTjxw

[4] Источник: https://geektimes.ru/post/289309/