Telegram в настоящее время является одним из самых популярных мессенджеров в мире. Уже создано достаточно много приложений и проектов, умеющих взаимодействовать с данным мессенджером. И в данной статье мы рассмотрим взаимодействие с ботом Telegram с помощью модуля ESP8266.
Также на нашем сайте вы можете посмотреть все проекты, в которых использовался Telegram.
Необходимые компоненты
Аппаратное обеспечение
- Плата Arduino Uno (купить на AliExpress).
- Модуль ESP-01 (ESP8266) (купить на AliExpress).
- Смартфон с операционной системой Android.
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Программное обеспечение
- API для Telegram бота.
- Arduino IDE.
Схема проекта
Схема соединения платы Arduino Uno с модулем ESP8266 для взаимодействия с ботом Telegram представлена на следующем рисунке.
Как видите, схема достаточно проста. Также необходимо соединить контакт GPIO0 модуля ESP8266 с землей и его контакт сброса (reset) с контактом сброса платы Arduino. После этого можно загружать код программы в модуль ESP8266.
Плата Arduino Uno в нашей схеме используется в качестве в качестве FTDI программатора. Более подробно про данный способ загрузки программы в модуль ESP8266 вы можете прочитать в этой статье. Если же вы вместо модуля ESP-01 (ESP8266) будете использовать плату NodeMCU ESP8266, то ее можно напрямую подключать к компьютеру по USB кабелю, не используя при этом плату Arduino Uno.
Библиотека для работы с Telegram
Прежде чем приступать к написанию кода программы вам необходимо скачать и установить в Arduino IDE библиотеку для работы с ботом Telegram (Telegram Bot library). Скачать ее можно по следующей ссылке с Github.
Настройка бота Telegram
Установите Telegram на ваш ноутбук или смартфон и в нем выполните поиск бота Botfather. Этот бот позволит вам создавать своих новых ботов в Telegram. После создания своего бота вам необходимо получить свой токен доступа (token) в Telegram. Более подробно про эти процессы вы можете прочитать в этой статье.
Исходный код программы (скетча)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#include <ESP8266WiFi.h> #include <WiFiClientSecure.h> #include <TelegramBot.h> #define LED 1 //контакт, к которому подключен светодиод // данные для подключения к сети Wifi const char* ssid = "xxxxx"; const char* password = "yyyyy"; // инициализация Telegram бота const char BotToken[] = "xxxxxxxxx"; WiFiClientSecure net_ssl; TelegramBot bot (BotToken, net_ssl); // the number of the LED pin void setup() { Serial.begin(115200); while (!Serial) {} //Start running when the serial is open 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"); } } |
Даже после даунгрейда на ArduinoJson 5.13.5 падает при компиляции:
c:\Users\User\Documents\Arduino\libraries\TelegramBot\src\TelegramBot.cpp: In member function 'message TelegramBot::getUpdates()':
c:\Users\User\Documents\Arduino\libraries\TelegramBot\src\TelegramBot.cpp:29:107: error: control reaches end of non-void function [-Werror=return-type]
29 | String getRequest = "GET /bot"+String(token)+"/getUpdates?limit=1&offset="+String(last_message_recived)+" HTTP/1.1";
| ^~~~~~~~~~~
c:\Users\User\Documents\Arduino\libraries\TelegramBot\src\TelegramBot.cpp: In member function 'String TelegramBot::sendMessage(String, String)':
c:\Users\User\Documents\Arduino\libraries\TelegramBot\src\TelegramBot.cpp:96:17: error: control reaches end of non-void function [-Werror=return-type]
96 | Serial.println("Chat_id not defined");
| ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
cc1plus.exe: some warnings being treated as errors
exit status 1
Compilation error: exit status 1
Есть идеи?
Не знаю, так сразу сложно сказать в чем проблема, может быть используемая библиотека немного изменилась с момента написания данной статьи. Попробуйте компилировать не всю представленную программу, а оставьте в ней вызов только одной какой-либо функции из данной библиотеки, потом другой и т.д. Если сложная программа не работает, то наиболее действенный способ найти в ней ошибки это тестировать ее по маленьким частям.
Библиотека на гитхабе заточена под 5 ArduinoJson а сейчас уже 6 из коробки, стоило упомянуть я думаю что нужен даунгрейд, запустилось на 5.13.5
пишет вот такую штуку:
C:\Users\User\Documents\Arduino\libraries\TelegramBot-Library-master\src\TelegramBot.cpp:39:11: error: StaticJsonBuffer is a class from ArduinoJson 5. Please see arduinojson.org/upgrade to learn how to upgrade your program to ArduinoJson version 6
39 | StaticJsonBuffer jsonBuffer;
У меня тоже не подключился к wifi, дописал WiFi.begin(ssid, password); перед "Serial.print("Connecting Wifi: ");" и поменял условие while (WiFi.status() != WL_CONNECTED)
всё подключилось
может кому поможет
Да, спасибо за подробный комментарий. Сайт просто уже очень большой, не успеваю уже физически следить за обновлениями ко всем проектам, опубликованным на сайте
Спасибо огроменное, товарищ!
Да не за что, заходите к нам еще
Все сделал как написано, загрузил скетч... но в мониторе порта "......" т.е. Wifi не подключается, даже создавал точку доступа на телефоне типа "Ssid: aaa" и пароль "12345678" , но ничего не работает!!!
Попробуйте скетч (часть скетча) из любого другого проекта на основе модуля ESP8266 на нашем сайте, в котором есть подключение к сети Wi-Fi. Так сразу сложно сказать почему ваш модуль не подключается к Wi-Fi