Мини-кейс 4: Telegram бот
Будем управлять своими устройствами прямо из мессенджера Telegram. Для этого заведём собственного бота и научим Wi-Fi модуль с ним работать.
Если ты ещё не используешь Telegram, зайди на сайт telegram.org, установи приложение на свой смартфон и создай аккаунт.
Telegram позволяет создавать собственных чат-ботов. Чат-бот — это софтверный робот, умеющий вести переписку. Робот умеет создавать специальные кнопки управления в чате и реагировать на их нажатие. Такие кнопки называются клавиатурами. Можно, например, сделать бота, управляющего светом по команде с клавиатуры.
Telegram работает только по протоколу HTTPS.
ЧТО ДЕЛАЕМ?
- Создай своего бота с помощью бота BotFather. С помощью BotFather можно зарегистрировать неограниченное количество новых ботов. Единственным условием для регистрации нового бота – является его уникальный username. - Взаимодействие с BotFather осуществляется при помощи простых команд. Например, для того, чтобы зарегистрировать нового бота, достаточно отправить в чат команду /newbot и следовать простым инструкциям: - Придумать имя бота, которое будет отображаться в чатах и контактах. В дальнейшем его можно будет сменить. Тут все зависит только от вашей фантазии и требований; 
- Придумать username – это уже сложнее: имя должно быть уникальным и оканчиваться на «bot». Допускаются буквы латинского алфавита, цифры и символ подчеркивания (пример – «MySuper_wow_bot»). Общее количество символов не менее 5 и не более 32; 
- Если все в порядке, то в ответ мы получим сообщение с токеном. Токен необходим для работы с Bot API посредством http-протокола. Нельзя передавать его другим и желательно не терять. Хорошим решением будет скопировать его: сохранить в текстовый файл и положить в надежное, всегда доступное место – например, облачное хранилище. 
 
- Slot Shield установи на Arduino Uno, а Slot Shield установите модуль реле.  
- Загрузи код в Arduino Uno. - #include <SoftwareSerial.h> #define RELAY_PIN A4 // ПИН реле модуля //SoftwareSerial wifi(4, 5); // TX и RX WI-FI модуля void setup() { Serial.begin(115200); //wifi.begin(115200); pinMode(RELAY_PIN, OUTPUT); } void loop() { // Встроенная функция readStringUntil будет читать все данные, пришедшие в UART до специального символа — '\n' (перенос строки). // Он появляется в паре с '\r' (возврат каретки) при передаче данных функцией Serial.println(). // Эти символы удобно передавать для разделения команд, но не очень удобно обрабатывать. Удаляем их функцией trim(). String command = Serial.readStringUntil('\n'); // String command = wifi.readStringUntil('\n'); command.trim(); // Проверяем, подходит ли команда под одну из ожидаемых: "On" или "Off" // Если подходит, выполняем действие. if (command == "turnOn") digitalWrite(RELAY_PIN, HIGH); else if (command == "turnOff") digitalWrite(RELAY_PIN, LOW); }
- Для начала стоит проверить, что Arduino правильно обрабатывает поступающие команды. В мониторе порта установи скорость 9600 и пиши туда turnOn для включения реле и turnOff для выключения реле. 
- Загрузи библиотеку FastBot2 и добавь её. Кроме неё нужно добавить зависимые библиотеки, которые указаны на той странице. 
- Загрузить код в модуль WI-FI, предвариательно указав wifi ssid и password. - #include <Arduino.h> #include <FastBot2.h> #define WIFI_SSID "dimdimdim" // Указываем SSID и пароль Wi-Fi сети, с которой будем выходить в интернет #define WIFI_PASS "YOUR_PASSWORD" // Спрашиваем у препода #define BOT_TOKEN "YOUR_TOKEN" // Ваш токен от телеграмм бота #define CHAT_ID "" FastBot2 bot; void updateh(fb::Update& u) { // Выводим всю информацию о сообщении, нужно только для проверки, иначе Arduino не будет выполнять команды // Serial.println("NEW MESSAGE"); // Serial.println(u.message().from().username()); // Serial.println(u.message().text()); if (u.message().text() == "/ledOn") { Serial.println("turnOn"); // Отправляем сообщение Arduino bot.sendMessage(fb::Message("Relay is ON", u.message().chat().id())); // Отправить сообщение обратно } else if (u.message().text() == "/ledOff") { Serial.println("turnOff"); // Отправляем сообщение Arduino bot.sendMessage(fb::Message("Relay is OFF", u.message().chat().id())); // Отправить сообщение обратно } else { // Другие случаи String reply; reply = "Welcome"; bot.sendMessage(fb::Message(reply, u.message().chat().id())); // Отправить сообщение обратно } } void setup() { Serial.begin(115200); Serial.println(); WiFi.begin(WIFI_SSID, WIFI_PASS); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); if (millis() > 15000) ESP.restart(); } Serial.println("Connected"); bot.attachUpdate(updateh); // Подключить обработчик обновлений bot.setToken(F(BOT_TOKEN)); // Установить токен bot.setPollMode(fb::Poll::Long, 60000); // Режим опроса обновлений. Самый быстрый - Long https://github.com/GyverLibs/FastBot2/blob/main/docs/3.start.md bot.sendMessage(fb::Message("Hello!", CHAT_ID)); // Поприветствуем админа } void loop() { bot.tick(); // Вызывать тикер в loop }
- Соберите единое устройство! 

Напоминание, что вы не можете прошивать Arduino Uno при таком собранном устройстве, т.к. заняты пины 0 и 1 по которым идёт прошивка.
Вместо этого вы можете подключить через пины 4 и 5, но тогда в коде для Arduino нужно расскоментировать строки 5, 9, 18, а 17 строку наоборот закомментрировать.
Last updated
Was this helpful?
