NodeMCU и Telegram: управление с помощью чат-бота

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

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

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

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

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 довольно просто, благодаря развитой платформе и поддержке большого количества языков.

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

Реализация

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

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

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

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

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

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

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

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

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

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

Освещения:

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

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

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

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

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

Следующим шагом была настройка 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 очень легко конфигурируется (подробная инструкция по настройке этой системы).

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

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

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

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

Вывод

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

171

26.7k


171

Интернет вещей давно ворвался в повседневную жизнь – умный дом, умный телевизор и даже умный чайник. В этом курсе статей я помогу вам войти в мир интернета вещей и сэкономить при создании девайсов для дома. Встречайте первую статью из цикла уроков.

В данной статье мы подготовим Arduino IDE, бота в telegram и саму плату к работе. Для повторения урока вам понадобится плата Nodemcu, а также светодиод, пара соединительных проводов, breadboard на котором будет собрана схема. Для общения с компьютером воспользуемся micro usb проводом.

Схема подключения:

Схема абсолютно простая, главное не забыть про особенности распиновки nodemcu. Короткая нога светодиода в землю, длинная в пин D3.

Добавление nodemcu в Arduino IDE (подключение esp8266 пакета)

Esp8266 понадобится нам для работы с nodemcu в среде разработки Arduino IDE.

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

1. Запустите среду разработки — Arduino IDE

2. Откройте настройки

3. В поле «Дополнительные ссылки для Менеджера плат» вставьте ссылку на esp8266 пакет: http:/ /arduino.esp8266.com/versions/2.3.0/package_esp8266com_index.json

4. Перейдите в Инструменты – Плата – Менеджер плат

5. Прокрутите вниз. Найдите esp8266. Выберите версию 2.3.0. (или другую более новую). Установите.

6. В Инструменты – Плата выберите nodemcu. Остальные настройки платы выставятся автоматически.

Установка библиотеки Telegram

Для обработки полученных сообщений и отправки ответных реакций нам понадобится библиотека https://github.com/witnessmenow/Universal-Arduino-… . Советую установить ее вручную, так как могут возникнуть ошибки.

Создание бота telegram

Настало время создать нашего цифрового друга, который верно и покорно будет обрабатывать все наши команды. Откройте бота @BotFather. Для создания нового бота напишите /newbot. Следуйте инструкциям, выберите ему имя и логин и в конце скопируйте bot token, он понадобится при прошивке платы nodemcu.

Прошивка

В первом уроке рассмотрим все части прошивки детально.

Подключаем нужные библиотеки.

#include   #include 
#defi  const char* ssid = "yura";  const char* password = "0987654321s";  const char BotToken[] = "xxx";    
WiFiClientSecure net_ssl;  TelegramBot bot (BotToken, net_ssl);    
void setup() {  Serial.begin(9600);  WiFi.begin(ssid, password);  while (WiFi.status() != WL_CONNECTED) {  delay(500);  Serial.print(".");  }  Serial.println("");  Serial.println("WiFi connected");  Serial.println(WiFi.localIP());  bot.begin();  pinMode(LED, OUTPUT);  }    
message m = bot.getUpdates();    
if (m.text.equals("on")){  digitalWrite(LED, HIGH);  bot.sendMessage(m.chat_id, "The Led 1 is now ON");  }else if (m.text.equals("off")){  digitalWrite(LED, LOW);  bot.sendMessage(m.chat_id, "The Led 1 is now OFF");  }  

Скетч целиком можно скачать здесь: https://yadi.sk/d/R8TIz_t73XQcvG

Настало время прошивать микроконтроллер. Сначала меняем в скетче название и пароль от вашей Wi-Fi сети, потом меняем токен бота и пин к которому подключен светодиод. Загружаем скетч на плату.

Тестируем

Теперь, когда все установлено и прошито, можно посмотреть на работу устройства. Для включения и выключения светодиода используются команды on и off соответственно. Их надо просто отправить боту в сообщении. При подключении nodemcu к компьютеру, можно увидеть некоторую отладочную информацию в мониторе порта.

Заключение

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

Данная статья является собственностью Amperkot.ru. При перепечатке данного материала активная ссылка на первоисточник, не закрытая для индексации поисковыми системами, обязательна.

Поделиться:

??? ????????? ESP8266 ? ??????? ???? Telegram

?????: Mike(admin) ?? 20-11-2017, 20:25

Wi-Fi ?????? ESP8266 ?? ?????????? ?????????????????? ????? ????????????? ??????? ??????????? ??? ?????????? ????????? ????????? ?????. ?? ???????? ????? ? ???????? ? ????? ?????. ????? ????, ?? ????? ????????? ????? ????????.

???, ????? ??? ?????? ??????? ??????? Telegram ???? ? ?????????? ??????? ?????????? ??????? ESP8266. ? ?????? ????????? ?????????? ??????? ?????? ????, ??? ??? ???????.

??? ?????? ????? ??????? ?????????? ????????-???? ? ???????? ?? ? ????? ?????????? Arduino IDE, ? ??????? ??????? ????? ??????????????? ESP8266. ???? ?????????? ????? ????? ?? ??????? (github.com/CasaJasmina/TelegramBot-Library). ??? ?????????? ????????? ??? ????????? ???? Telegram ?? ????? Arduino-???????? ????????? ? ????????????????? ? API ??????????? Telegram. ?????? ESP8266 ????? ????? ???????????? Arduino/Genuino MKR1000 ??? Arduino Zero ? ?????? WiFi shield 101.

????????? ? ??????? ??? ????? ???????? ??? ????? ?????????? ? IDE, ?????? ? ????: Sketch — include Library — Add .Zip library. ??? ????? ?????????? ?????????? ?????????? ArduinoJson (github.com/bblanchon/ArduinoJson).

?????? ????? ????????? ???? Telegram. ?????????? Telegram ?? ???? ??????? ??? ??????? ? ??????? Botfather. ????? Botfather ???????? ?????? ?????? ????. ?? Botfather ?? ?????? ????? ?????.

???? ???????? ??? ??? ?????????? ESP8266 ? ??????? ???? Telegram. ??????? ? ???? ??????? ?????? ????? ???? wifi ? ????? ????, ? ????? ????????? ???. ? ?????? ??????? ????????? ?????? ???????? ? ????????? ?????????.

  #include    #include    #define LED 1 /?????  const char* ssid     = "xxxxx";   const char* password = "yyyyy";   // ????????????? ???? Telegram   const char BotToken[] = "xxxxxxxxx";   WiFiClientSecure net_ssl;   TelegramBot bot (BotToken, net_ssl);   void setup()    {     Serial.begin(115200);     while (!Serial) {}  delay(3000);     // ???????? ??????????? ? ????? Wifi     Serial.print("Connecting Wifi: ");     Serial.println(ssid);     while (WiFi.begin(ssid, password) != WL_CONNECTED)          {       Serial.print(".");       delay(500);     }     Serial.println("");     Serial.println("WiFi connected");     bot.begin();     pinMode(LED, OUTPUT);     }     void loop()    {     message m = bot.getUpdates(); // ?????? ????? ?????????     if (m.text.equals("on"))          {       digitalWrite(LED, 1);        bot.sendMessage(m.chat_id, "The Led is now ON");     }     else if (m.text.equals("off"))          {       digitalWrite(LED, 0);        bot.sendMessage(m.chat_id, "The Led is now OFF");     }     }  

?? ??????????? ???? ????? ????? ??????, ??? ? ??????? ????????? ? Telegram ????? ????????? ??????? ESP8266.


?????? ??? ??????



&nbsp&nbsp&nbsp?????????? ??? ?? ??????? ? ??????????????? ??????? digitrode.ru.
&nbsp&nbsp&nbsp???? ?? ??????, ????? ?????????? ? ???????? ????????? ???????? ????, ? ???? ?????? ???????,
&nbsp&nbsp&nbsp?? ????? ?????????? ??? ??????, ??????????? ????? ????? ?? ??? ????????.

?????????

6468

—> 1

?????????: ???????????????? ? ???????????????, ??????, ??????????

????????? ??????????, ?? ????? ?? ???? ??? ???????????????????? ????????????. ?? ??????????? ??? ?????????????????? ???? ????? ?? ???? ??? ????? ??????.

???????????:

???????? ???????????

Рейтинг автора
5
Подборку подготовил
Андрей Ульянов
Наш эксперт
Написано статей
168
Ссылка на основную публикацию
Похожие публикации