Мини-кейс 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 для выключения реле.
Загрузить код в модуль WI-FI, предвариательно указав wifi ssid и password.
#include <FastBot.h> #define WIFI_SSID "dimdimdm" // Указываем SSID и пароль Wi-Fi сети, с которой будем выходить в интернет #define WIFI_PASS "YOUR_PASSWORD" // Спрашиваем у препода #define BOT_TOKEN "YOUR_TOKEN" // Ваш токен от телеграмм бота FastBot bot(BOT_TOKEN); 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.attach(newMsg); } // Обработчик сообщений void newMsg(FB_msg& msg) { // Serial.println(msg.toString()); // Выводим всю информацию о сообщении, нужно только для проверки, иначе Arduino не будет выполнять команды if (msg.text == "/ledOn") { Serial.println("turnOn"); // Отправляем сообщение Arduino bot.sendMessage("Relay is ON", msg.chatID); // Отправить сообщение обратно } else if (msg.text == "/ledOff") { Serial.println("turnOff"); // Отправляем сообщение Arduino bot.sendMessage("Relay is OFF", msg.chatID); // Отправить сообщение обратно } else { // Другие случаи String reply; reply = "Welcome"; bot.sendMessage(reply, msg.chatID); } } void loop() { bot.tick(); }
Соберите единое устройство!
Напоминание, что вы не можете прошивать Arduino Uno при таком собранном устройстве, т.к. заняты пины 0 и 1 по которым идёт прошивка.
Вместо этого вы можете подключить через пины 4 и 5, но тогда в коде для Arduino нужно расскоментировать строки 5, 9, 18, а 17 строку наоборот закомментрировать.
Last updated
Was this helpful?