Мессенджер Telegram является крайне популярным в современном мире, с ним могут взаимодействовать множество сторонних приложений. В данной статье мы рассмотрим взаимодействие с ботом Telegram с помощью платы Arduino. Делать мы это будем с помощью библиотеки TelegramBot.h, позволяющей работать с ботами Telegram.
Также на нашем сайте вы можете посмотреть все проекты, в которых использовалось приложение Telegram. Посмотреть документацию (на английском языке) для работы с API Telegram можно по следующей ссылке.
Необходимые компоненты
Плата Arduino MKR1000.
Вместо платы Arduino MKR1000 можно также использовать плату Arduino Zero с шилдом WiFi shield 101 или плату Arduino Uno (или Nano) с подключенным к ней WiFi модулем ESP8266, который будет управляться платой Arduino с помощью AT команд. Примеры подобного управления модулем ESP8266 можно посмотреть в следующих проектах:
- передача Email с использованием Arduino и WiFi модуля ESP8266;
- передача данных от Arduino Uno на веб-страницу с помощью WiFi;
- управление сервомотором по Wi-Fi с помощью Arduino и веб-браузера.
Лично на мой взгляд, данный проект дешевле и легче всего реализовать с помощью платы NodeMCU ESP8266, которую можно подключить к компьютеру по USB кабелю и запрограммировать с помощью Arduino IDE. Пример подобного проекта можно посмотреть по следующей ссылке. У него практически такой же код программы, как и код программы рассматриваемого в данной статье проекта.
Реализация проекта
Установка библиотеки для работы с ботом Telegram
Скачайте библиотеку TelegramBot Library по следующей ссылке.
Для ее установки в Arduino IDE откройте пункт меню Sketch / Include Library / Add .ZIP Library, после чего выберите скачанный вами .ZIP файл библиотеки.
Установка библиотек ArduinoJson и WiFi101
Библиотеки ArduinoJson и WiFi101 можно установить с помощью менеджера библиотек (Library Manager) Arduino IDE как показано на следующих рисунках.
Примечание: данный пункт необходим при использовании платы Arduino MKR1000 или платы Arduino Zero с шилдом WiFi shield 101. При использовании платы Arduino Uno (или Nano) с подключенным к ней WiFi модулем ESP8266 библиотеку WiFi101 можно не устанавливать.
Установка бота Botfather
После того как вы установили приложение Telegram на свой смартфон или ноутбук, в строке поиска данного приложения выполните поиск @botfather.
Botfather – это бот, который позволяет вам создавать своих собственных ботов для приложения Telegram. Для создания нового бота с его помощью используйте команду /newbot.
После этого введите имя данного бота (name), затем имя пользователя (username).
Далее сгенерируйте токен авторизации (authorization token) для вашего нового бота. Также процесс создания нового бота в Telegram с помощью Botfather описан в этой статье.
После создания бота имя вашего бота будет показываться в контактах и некоторых других местах приложения Telegram.
Имя пользователя (Username) для созданного вами бота – это имя, которое будет использоваться в заметках и ссылках telegram.me. Имя пользователя вашего бота должно оканчиваться на ‘bot’, то есть, к примеру, допустимы имена ‘tetris_bot’ или ‘TetrisBot’.
Если ваш бот включен в какую либо группу, то он по умолчанию будет работать в приватном режиме (privacy mode). Это означает, что он будет принимать только команды, которые начинаются с "/". Чтобы отключить приватный режим вам в необходимо в чате с вашим ботом написать следующий набор команд:
1 2 3 4 5 |
/mybots @yourBot Bot setting Group privacy Turn off |
Также вы можете создать свой собственный набор команд для бота используя команду /setcommands в чате с BotFather. Этот список появится только при работе с мобильного устройства при нажатии на иконку "/".
Исходный код программы (скетча)
С помощью представленной программы мы будем включать и выключать светодиод, передавая для этого из приложения Telegram сообщения “On” или “Off”.
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 45 46 |
#include <WiFi101.h> #include <SPI.h> #include <TelegramBot.h> // данные для подключения к сети Wifi char ssid[] = "xxxx"; // your network SSID (name) char pass[] = "yyyy"; // your network key // Initialize Telegram BOT const char* BotToken = "xxxx"; // токен авторизации вашего бота WiFiSSLClient client; TelegramBot bot(BotToken,client); const int ledPin = 6; // контакт, к которому подключен светодиод 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, pass) != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(""); Serial.println("WiFi connected"); bot.begin(); pinMode(ledPin, OUTPUT); } void loop() { message m = bot.getUpdates(); // считываем новые сообщения if (m.text.equals("On")) { digitalWrite(ledPin, HIGH); Serial.println("message received"); bot.sendMessage(m.chat_id, "The Led is now ON"); } else if (m.text.equals("Off")) { digitalWrite(ledPin, LOW); Serial.println("message received"); bot.sendMessage(m.chat_id, "The Led is now OFF"); } } |
Доброго времени суток. У меня есть вопрос не совсем по теме, но по телеграмму, скажите, пожалуйста, как вставить код ардуино в телеграмм чтобы он был читабельным с подсветкой синтаксиса. Просто для других языков такая фишка имеется:
python
print('Hello')
В результате в телеграмм подсвечивается синтаксис.
Добрый вечер. К сожалению, никогда не копировал коды программ в телеграмм, поэтому вряд ли я вам смогу помочь
За телегой будущие кажется, но лучше будет, если присмотреть серьезное железа для проектов
В современном быстро меняющемся мире трудно угадать за чем будущее ))
NodeMCU ESP8266 по количеству контактов по сути Arduino UNO. Но есть ещё один ньюанс, у ESP8266 питание, а соответсвенно и входы-выходы работают не с 5В, а с 3,3В, что не позволяет испольовать со стандартными реле расчитанными на 5В. Ну и количество входов-выходов Aruino MEGA не сравнить ти с Arduino UNO, ни с NodeMCU ESP8266.
Ну если у вас проект требует так много входов/выходов, то да, Aruino MEGA здесь по этому параметру почти вне конкуренции. Ну тут уж сами решайте что вам удобнее, либо управлять с ее помощью модулем ESP8266 с помощью AT команд, либо использовать какую-нибудь плату Aruino со встроенным WiFi если не хотите смотреть в сторону других плат (Raspberry Pi Pico W и т.д.)
По сути та же Arduino UNO,только всего один аналоговый вход вместо 6. А мне приходится использовать Arduino MEGA...
Ну количество доступных контактов можно увеличить с помощью регистров сдвига или другими способами. Какой то у вас больно сложный проект если вам такое большое количество контактов необходимо. Просто если модуль ESP8266 к плате Ардуино подключать чтобы его использовать только в качестве WiFi модуля, то управлять им придется с помощью АТ команд.
Может быть, вы тогда какую-нибудь современную плату Ардуино для своего проекта присмотрели бы, со встроенным WiFi. К примеру, у нас на сайте есть подробный обзор различных плат Ардуино.
Или вы можете посмотреть в сторону более производительных плат, Raspberry Pi Pico W (есть WiFi) или плат на основе STM32.
Здравствуйте! С Днём защитника Отечества!
Вы пишете: "При использовании платы Arduino Uno (или Nano) с подключенным к ней WiFi модулем ESP8266 библиотеку WiFi101 можно не устанавливать."
Подскажите, пожалуйста, я использую плату Arduino MEGA + ESP-01, какие дополнительные библиотеки нужно использовать или каким методом передать какой Serial порт используется (у Вас, кстати, этого в программе нет). Меня весьма заинтересовал Ваш вариант, хотелось бы доработать свой проект под возможность передачи данных в Телеграм, а посему с нетерпением буду ожидать Вашего ответа.
Заранее благодарен, Михаил
Добрый день. И вас с Днем защитника отечества. Вам понадобится только библиотека TelegramBot.h, библиотека для соединения с сетью WiFi будет не нужна потому что с сетью WiFi вы будете соединяться с помощью модуля ESP-01, а управлять им вы будете с помощью AT команд. Примеры управления модулем ESP-01 с помощью AT команд можно посмотреть, к примеру, в следующих статьях:
https://microkontroller.ru/arduino-projects/upravlenie-servomotorom-po-wi-fi-s-pomoshhyu-arduino-i-veb-brauzera/
https://microkontroller.ru/arduino-projects/peredacha-email-s-ispolzovaniem-arduino-i-wifi-modulya/
Serial порт вы можете использовать стандартный для вашей платы, либо с помощью библиотеки SoftwareSerial (в этом случае ее также необходимо установить) сконфигурировать любые два цифровых контакта платы для работы в качестве последовательного порта - именно этот вариант и использован в двух приведенных примерах статей
На TelegramBot.h матерится не по детски. “ПРЕДУПРЕЖДЕНИЕ: библиотека TelegramBot-Library-master должна запускаться на архитектурах samd, esp8266 и может быть несовместима с вашей платой на архитектуре avr.”
Посмотрел Ваши предложения по использованию АТ команд. Даже несколько странно: писать на языке высокого уровня и возвращаться к Assembler для передачи нескольких слов в мессенджер. По факту я использую библиотеку RemoteXY.h для двухсторонней связи со смартфоном и управления всем проектом. Попытка прикрутить телеграм вызвало вышеуказанное предупреждение и недоумение по поводу строки
WiFiSSLClient client;
Что естественно, так как я отказался от библиотеки WiFi101, но в следующей строке
TelegramBot bot(BotToken,client);
Я передаю библиотеке TelegramBot.h некоего клиента и чем его заменить - сугубо непонятно, честно говоря в библиотеке пока не разобрался, что за клиент и что он делает...
По поводу использования АТ команд и возвращения, так сказать, к ассемблеру - это плата за то, что в обычных платах Arduino нет WiFi модуля. Мне тоже не очень нравятся АТ команды.
Поэтому подобный проект я бы делал на Arduino с поддержкой WiFi, или на модуле NodeMCU ESP8266 или ESP32 - эти модули имеют поддержку WiFi и программируются точно также как Arduino, а стоят дешевле
Не хватает входов-выходов на ESP8266...
У ESP-01 действительно очень мало контактов, но модули ESP8266 выпускаются в различных модификациях с различным числом входов/выходов. Неужели даже их количества в NodeMCU ESP8266 вам не хватает?
Сlient все испортил, победить его не удалось.
Вы какого клиента имеете ввиду?