Как подключить esp8266 к 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 довольно просто, благодаря развитой платформе и поддержке большого количества языков.
Таким образом вся наша система будет выглядеть примерно так:
Реализация
Первым делом протестируем модули.
Готовые печатные платы адаптируют расстояние между пинами, что заметно облегчает пайку, а также содержат в себе необходимые резисторы, соединяющие пины 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 (5x0.7=3.5), и 3.3В платы явно недостаточно. Однако мы нашли костыль интересный способ запустить их без использования повышающего преобразователя. Если диоду требуется минимум 0.7xVcc для реакции на сигнал и мы не можем увеличить уровень этого сигнала, то надо уменьшить Vcc! Да, светодиоды будут гореть не так ярко, однако нам не надо запитывать таким образом всю ленту; хватит и одного диода. Передавая сигнал далее по цепочке, светодиод использует уже уровень Vcc для формирования сигнала, чего вполне хватает для «нормального» светодиода. Таким образом, подключив первый диод в ленте к питанию через диод, который «съедает» около 0.6В, мы получаем отлично работающую ленту, напрямую управляемую из нашего модуля ESP8266. А чуть более тусклый первый светодиод мы оставили для отладочных нужд: отображать состояние подключения к сети.
Нашу умную розетку мы хотели разместить полностью в корпусе от старой розетки с таймером. Туда должны были влезть: сам ESP-12F, блок питания для него и реле, управляющее розеткой. Однако, разместив там реле и блок питания, мы так и не смогли вместить там еще и модуль ESP. Поэтому пришлось приделать снизу еще маленькую коробочку.
Итог получился не таким элегантным как мы хотели изначально, зато это было цельное устройство, которое надо было просто воткнуть в розетку.
Для осуществления этого плана мы использовали два пакета:
- hostapd – позволяет использовать встроенный wi-fi модуль как точку доступа
- dnsmasq – объединяет в себе DHCP и DNS сервера.
Мы пытались добиться относительной независимости кода и устройств, поэтому все запросы выполнялись не на ip-адреса, а на имена из придуманной зоны .sh (light.sh, socket.sh и т.д.). Для этого мы для каждого модуля настроили статические ip-адреса и добавили на эти адреса DNS записи, соответствующие модулям. Благо dnsmasq очень легко конфигурируется (подробная инструкция по настройке этой системы).
И, наконец, непосредственно бот.
Мы писали бота на Python, используя библиотеку python-telegram-bot. Нами был разработан кнопочный интерфейс, что упрощает управление, превращая устройство в своеобразный пульт ДУ:
Исходный бота код можно изучить здесь.
И, чтобы им не пользовался кто попало, мы поставили защиту паролем.
Вывод
Конечно, мы не создали какой-либо революционной системы, существует огромное количество более целостных и продуманных реализаций. Модули температуры и освещения можно было бы сделать автономными, благо у ESP8266 есть специальный режим ожидания, в котором она потребляет очень мало энергии. Можно было бы добавить легкую пользовательскую расширяемость, не требующую изменения исходного кода и перенастройки сетевых подключений и еще много чего. Однако цель всего этого проекта была совсем не в этом. В первую очередь мы хотели создать простую систему, которая могла вполне быть создана кем угодно у себя в доме и не требовала бы серьезной подготовки и затрат. А самое главное: мы хотели научиться многим вещам, пока мы делали этот проект. И если практичность и функциональность нашего решения можно еще долго дорабатывать, то знания, полученные нами в процессе планирования и воплощения в жизнь этой системы, определенно стоили потраченных усилий.
В этом руководстве рассмотрим, как управлять платами ESP32 или ESP8266 через группу в Telegram. Использование группы Telegram для управления своими платами может быть полезно, если нужно, чтобы несколько человек взаимодействовали с ботом в одном чате, и чтобы все эти люди получали уведомления от бота.
Коротко о проекте
- В этом руководстве вы создадите бота Telegram для взаимодействия с платами ESP32 или ESP8266;
- Вы создадите группу, в которую сможете добавить несколько людей для совместного управления платой и получать уведомления от бота;
- Бот будет добавлен в группу, таким образом, участники смогут с ним взаимодействовать;
- В качестве примера рассмотрим, как отправлять команды для управления выходами и как отправлять ответы от бота в группу.
Если вы не знакомы с Telegram…
Как установить Telegram?
Зайдите в Google Play или App Store, скачайте и установите Telegram .
Создание бота Telegram
Следующие шаги легче выполнить на вашем компьютере. Откройте браузер, перейдите в веб-приложение Telegram и войдите в свою учетную запись.
В верхнем левом углу найдите «botfather » и щелкните BotFather, как показано ниже.
Новое окно должно открыться и вам будет предложено нажать на кнопку /start. Введите /newbot и следуйте инструкциям по созданию бота. Дайте ему название и логин.
Создание группы Telegram
Следующим шагом будет создание группы в Telegram. В верхнем левом углу нажмите Создать группу.
Добавьте участников в свою группу и дайте ей название.
Добавьте бота в группу
После создания группы щелкните на имя группы, чтобы добавить своего бота.
Найдите имя своего бота и добавьте его в группу.
Получите идентификатор группы
Для взаимодействия с группой Telegram ESP32 необходимо знать идентификатор группы Telegram. В веб-приложении Telegram нажмите на свою группу. Идентификатор группы должен находиться в URL-адресе, как показано ниже.
Сохраните идентификатор группы, потому что он понадобится вам позже.
Подготовка Arduino IDE
Платы ESP32 и ESP8266 запрограммируем с помощью среды разработки Arduino, поэтому убедитесь, что они установлены в вашей IDE.
Универсальная библиотека ботов Telegram
Для взаимодействия с ботом Telegram мы будем использовать универсальную библиотеку ботов Telegram, которая предоставляет простой интерфейс для Telegram Bot API.
Выполните следующие шаги, чтобы установить библиотеку.
Важно: не устанавливайте библиотеку через диспетчер библиотек Arduino, так как он может установить устаревшую версию.
Все подробности о библиотеке можно найти на странице
Библиотека ArduinoJson
Вам также необходимо установить библиотеку ArduinoJson . Выполните следующие шаги, чтобы установить библиотеку.
- Перейдите в Скетч> Подключить библиотеку > Управлять библиотеками .
- Найдите «ArduinoJson».
- Установите библиотеку.
Мы используем библиотеку ArduinoJson версии 6.15.2.
Что нужно для проекта?
Для этого примера вам понадобится одна плата ESP32 или ESP8266.
Скетч для управления ESP32 / ESP8266 с помощью группы в Telegram
Чтобы этот скетч работал, необходимо ввести свои учетные данные сети (SSID и пароль), а также токен бота и свой идентификатор группы Telegram.
// Используйте @myidbot, чтобы получить ID пользователя или группы // Помните, что бот сможет вам писать только после нажатия String chat_id = String ( bot . messages [ i ] . chat_id ) ; configTime ( 0 , 0 , "pool.ntp.org" ) ; // получаем всемирное координированное время (UTC) через NTP int numNewMessages = bot . getUpdates ( bot . last_message_received + 1 ) ; numNewMessages = bot . getUpdates ( bot . last_message_received + 1 ) ;Код совместим с платами ESP32 и ESP8266 NodeMCU. Код подключит нужные библиотеки в соответствии с выбранной платой.
Как работает код?
Импортируем необходимые библиотеки.
Вставьте свои учетные данные сети в следующие переменные.
Вставьте токен бота Telegram, полученный от Botfather, в переменную BOTtoken.
Вставьте свой идентификатор группы Telegram. Он должен начинаться со знака «-».
Создайте новое соединение WiFi с WiFiClientSecure.
Создайте бот с токеном и клиентом, введенными ранее.
Установите GPIO, которым хотите управлять. В нашем случае мы будем управлять GPIO 2 (встроенный светодиод).
Состояние должно быть LOW по умолчанию.
String chat_id = String ( bot . messages [ i ] . chat_id ) ; bot . sendMessage ( chat_id , "Неавторизованный пользователь" , "" ) ;Переменная from_name сохраняет имя отправителя.
bool sendMessage ( String chat_id , String text , String parse_mode = "" )Тоже самое делаем и для команды /led_off .
Помним, что состояние должно быть LOW по умолчанию.
setup()
Инициализируйте монитор последовательного порта.
Если вы используете ESP8266, вам необходимо использовать следующую строку:
Установите светодиод как выход и задайте сигнал LOW при запуске ESP:
Инициализируйте Wi-Fi и подключите ESP к вашей сети, используя SSID и пароль.
loop ()
int numNewMessages = bot . getUpdates ( bot . last_message_received + 1 ) ; numNewMessages = bot . getUpdates ( bot . last_message_received + 1 ) ; numNewMessages = bot . getUpdates ( bot . last_message_received + 1 ) ;Примерно так работает код.
Демонстрация
Загрузите код в ESP, откройте меню Инструменты> Плата и выберите плату , которую вы используете. Перейдите в Инструменты > Порт и выберите COM-порт, к которому подключена ваша плата.
После загрузки кода нажмите кнопку ESP EN / RST, чтобы запустить код. Затем откройте монитор порта чтобы посмотреть, что происходит в фоновом режиме.
Зайдите в Telegram и откройте группу.
Отправьте следующие команды и посмотрите, что отвечает бот:
- /led_on включает светодиод.
- /led_off выключает светодиод.
- /state запрашивает текущее состояние светодиода.
Встроенный светодиод должен включаться и выключаться (встроенный светодиод ESP8266 работает в обратном направлении, он не горит, когда вы отправляете /led_on, и горит по команде /led_off ).
Вы можете добавить в группу больше людей, например всех членов семьи.
Заключение
Мы показали вам всего лишь простой пример. Идея в том, чтобы вы могли изменить проект, добавить больше команд для выполнения других задач. сюда ссылки на другие статьи с телегой
Самое замечательное в использовании Telegram для управления вашими платами ESP – возможность управлять ими из любой точки мира при наличии интернета.
Что нам понадобиться для того чтобы собрать наш проект:
Arduino IDE и ESP8266
Разработку будем вести в среде Arduino IDE. Скачиваем и накатываем если еще этого не сделали. Далее добавляем ESP менеджер в среду Arduino IDE. Те кто уже работали с ESP и знают с чем его едят – переходим к следующему пункту.
Прежде чем мы перейдем к написанию кода, мы должны подготовить среду IDE Arduino с библиотеками, а также ядром для платформы разработки Node MCU. Чтобы установить Node MCU c ядром модуля ESP8266, необходимо:
- Скопируйте и вставьте эту строку в URL-адреса менеджера дополнительных плат:
Откройте вкладку Файл – Настройка , в строке Дополнительный менеджер плат добавить ссылку как показано на скриншоте.
Откройте вкладку Файл – Настройки , в строке Дополнительные ссылки для Менеджера плат добавить ссылку как показано на скриншоте.
Если у вас установлена более поздняя версия, тогда делаем по сути тоже самое.
После подключения платы к компьютеру устанавливаем драйвера для платы ch 340. Выбираем в менеджере план Node MCU V1.0 => COM порт и скорость соединения.
Telegram Bot
Итак, для того, чтобы создать своего первого бота, тебе потребуются:
- Компьютер (ну а как же без него?) на macOS, Linux или Windows;
- Telegram, желательно также на компьютере, можно воспользоваться веб-версией, если лень скачивать;
Если всё готово, есть хотя бы компьютер и Telegram, то можем начинать.
Теперь нам нужно зарегистрировать нашего бота в Telegram. Для этого открываем приложение Telegram (либо веб-версию) и переходим к боту @BotFather. Запускаем бота и отправляем ему команду /newbot .
В моём примере ключ: 520178827:AAHCjHvMAkBvDogQMP3VUNmi86-B6vtQRFM. Можешь не пытаться его использовать, он уже обновлён ?
Ну когда же мы начнем писать код
Перед тем как начать писать код бота, предлагаю освоить основные настройки и параметры. Ниже ты увидишь список доступных команд для настройки и редактирования параметров бота.
Общие команды.
- /newbot — Создать нового бота.
- /mybots — Редактирование ваших ботов.
Редактирование параметров бота.
И так изучив все команды, я предлагаю для начала заполнить описание нашего бота. У бот-аккаунта есть два поля с описанием. Первое это About Info которое видно на карточке с информацией о боте. Второе это Description Info, текст отображающийся при первом открытии чата с ботом.
И на десерт используем команду /setuserpic чтобы установить аватар для нашего бота.
Поздравляю ты только что создал своего первого бота в Telegram. Посмотреть результат ты можешь по ссылке @BotanikRobot Правда он еще пока ничего не умеет, совсем как маленький ребенок. Поэтому ты должен научить его выполнять команды. Для этого в @BotFather есть команда /setcommands.
Становись. Равняйсь. Смирно. Команды в Telegram Bot.
Команды представляют собой более гибкий способ общения с ботом. Рекомендуется следующий синтаксис:
Команда должна начинаться с символа косой черты «/» и не может быть длиннее 32 символов. Команды могут состоять из букв латинского алфавита, цифр и подчёркивания. Несколько примеров:
Глобальные команды
Чтобы пользователям было проще работать с ботами, создатели Telegram просят всех разработчиков реализовывать поддержку нескольких простых команд. В интерфейсе приложений Telegram будут ярлыки (быстрые ссылки) для этих команд.
При попытке начать общение с ботом, пользователь увидит кнопку Старт. На странице профиля бота также будут доступны ссылки Помощь и Настройки.
В результате в @BotFather после ввода команды /setcommands водим следующие команды:
WebHook или GetUpdates
В результате получим большой набор данных. Давай разберемся, что это все означает.
Подключаем датчик DS18B20
Вообще это конечно условная схема. Питание и землю можно брать с тех мест где удобно, ну а порт данных также можно поменять, единственное, что нужно будет сделать, это поменять одну строчку в коде.
Пишем код
Первым делом переходим по ссылке и качаем все необходимые файлы и библиотеки из моего репозитория на GITHUB.
Важно. Используем именно те файлы и библиотеки. Все проверено на работоспособность и совместимость.
Вот эти библиотеки должны быть в обязательном порядке. Думаю из их названия все понятно. Кстати они все есть в репозитория на GITHUB. Заполняем данные о WiFi сети к которой подключаемся.
Далее инициализируем бота. Прописываем его учетные данные полученные при регистрации.
Теперь немного о получении температуры.
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress Thermometer1 = ; // ONE WIRE адрес датчика температуры.
В строке OneWire ds(10); // on pin 10 (a 4.7K resistor is necessary) меняем значение на 15 И прошиваем ESP. В мониторе порта видим следующую картину.
Копируем строчку ROM. Это и есть адрес нашего датчика температуры. Кстати если заметили этот скетч автоматически определяет тип датчика и еще выводит данные температуры в цельсиях и фаренгейтах. Возвращаемся в скетч Telegram бота и вписываем адрес датчика.
Теперь напишем функцию получения температуры. Думаю расписывать сильно нет смысла. Все хорошо прокомментированно.
float getTemperature() <
float temp;
sensors.setResolution(Thermometer1, 10); // Точность занков после запятой
sensors.requestTemperatures(); // Команда получения температуры
//Serial.print("Temperature for the device 1 (index 0) is: ");
//Serial.println(sensors.getTempCByIndex(0));
temp = sensors.getTempC(Thermometer1); // Сохраняем значение температуры в переменной
return temp; // Возвращаем значение температуры функции
>
Следующая на очереди функция обработки команд и приветствия.
Друзья. Если вам понравилась эта статья, поделитесь ей в социальных сетях. Обязательно напишите комментарий если у вас возникли вопросы. Мне важно ваше мнение. У нас есть групповой чат в Telegram, где вы можете оперативно задать вопрос и узнать о последних новостях. И поддержите проект монеткой.
Для чего это нужно? В настоящее время все мои устройства, собранные на базе ESP8266, исправно публикуют текущие данные через MQTT брокер на контрольную панель (сделанную из древнего планшета).
Кроме этого, копия этих данных отправляется на сервера ThinkSpeak, чтобы иметь возможность посмотреть историю изменений.
Почему именно telegram?
Для этого есть несколько вполне объективных причин:
Для начала находим в поиске бота @BotFather:
Отец всех ботов
Для того,чтобы получить команды бота, отправьте команду /help:
Справка по командам
Создание нового бота
По желанию к нему можно добавить описание, поменять картинку, добавить список поддерживаемых команд и т.д. Например:
Создание нового канала
Указываем название и описание канала. Здесь же можно загрузить картинку для канала:
Указываем, что канал будет приватным:
Сразу же можно добавить участников канала:
Добавление участников канала
Но можно сделать это и потом, через меню канала:
Добавление бота в список администраторов
В ответ мы должны получить JSON следующего вида:
API допускает передачу данных для отправки как в виде обычных POST-параметров (или GET), так и в JSON формате. Я использовал обычный POST-формат. Мне потребовались следующие параметры:
Подробнее об этом смотри здесь.
Необходимо добавить вызов tgProcessQueue() в тело loop(), если есть подключение к WiFi сети.
Результаты
На сим пока, спасибо что дочитали до конца. Желаю удачи в реализации Ваших проектов.
Читайте также: