
Многие знают и даже пробовали, что микроконтроллер esp32 позволяет управлять собой удалённо через интернет, используя протокол mqtt — что позволяет избавиться от необходимости выяснять IP адрес у esp32 и не заботиться о его постоянных изменениях, например, в случае перезагрузки микроконтроллера.
Однако в наше время было бы обидно пройти мимо гораздо более удобного способа, который, на мой взгляд, частенько многократно более удобен, и к тому же находится всегда под рукой — управление с помощью телеграм-бота…
Те, кто регулярно следят за моими статьями, знают, что я частенько использую способ с mqtt, который, по результатам моих тестов, очень хорошо себя проявил, во множестве применений: от управления робототехническими манипуляторами до руления машинками в реальном времени и игры с их помощью в робохоккей.
Для тех, кто думает, что будет большой лаг: я тоже так думал, однако, практика показала, что этот лаг не превышает 100 миллисекунд (а реально даже и ещё меньше), что субъективно воспринимается как «мгновенно».
Тем не менее, у этого способа есть и свои неудобства (маленькие, но всё же):
- Требуется внешний mqtt-брокер, который частенько отваливается (скажем, по причине тех же санкций — это то, с чем я сталкивался на практике) и не только.
- У этих брокеров обычно имеются довольно жёсткие ограничения на количество запросов в секунду, чтобы не перегружать брокер (я сталкивался даже с ограничением в один запрос в секунду максимум), что может быть неудобным в деле управления в реальном времени робототехническими устройствами.
- Это опять же надо регистрироваться на брокере, заводить аккаунт, да и вообще, разбираться, что собой представляет этот протокол и как работает (если вы раньше не имели с ним дела).
- Необходимость поднимать свой брокер, если вы хотите убрать зависимость от чужого.
- И т. д.
В общем, как говорил один из персонажей «Собачьего сердца» — «это какой-то позор» © :-))), так как в наше время всё то же самое можно делать с использованием того же самого telegram-бота.
Но на самом деле, приводя выше цитату из «Собачьего сердца» я здесь утрирую, так как просто нужно учитывать, что протокол mqtt появился гораздо раньше того же telegram-а, и с появлением последнего, многое упростилось, что мы и попробуем рассмотреть ниже.
Ну и опять же, гораздо удобнее управлять через мессенджер, который всегда под рукой, чем разбираться и использовать стороннюю систему…
Правда, тут есть нюансы: насколько мне известно, mqtt обеспечивает гораздо меньшую задержку, по сравнению с telegram-ботом (0,1 сек против 1-3 сек).
Эта задержка возникает из-за того, что в случае telegram-a, устройство (esp32) вынуждено опрашивать с определённой периодичностью (например, 0,2-3 сек) сервер — «нет ли новых сообщений?» Минусом такого подхода является излишняя нагрузка на сервер, за счёт генерации пустых запросов.
Минимально допустимый интервал опроса составляет от 0,2 сек и более. Если опрашивать сервер слишком часто (т. е. с интервалом менее 0,2 сек), то сервер временно заблокирует бота и будет возникать ошибка 429.
Такой способ отличается простотой реализацией и не требует постоянного соединения на основе протокола websocket (как у mqtt).
В противовес ему, в случае mqtt, мы постоянно подключены к серверу и подписаны на обновления в определённых топиках, за счёт чего мгновенно (менее 100 миллисекунд) получаем обновления, если появилось новое сообщение. Также, как мы видим, при этом способе не генерируются пустые запросы (как в случае с telegram-ботом).
Кстати говоря, в качестве интересной идеи на будущее: а что, если реализовать управление машинкой с использованием telegram-бота в качестве пульта управления? Это интересно как минимум с точки зрения проверки в реальных условиях временного лага, который возникает при этом случае.
Мои подозрения (по опыту, так как я ставил такой лаг принудительно, во время экспериментов с mqtt, при управлении роботами-хоккеистами): 200 миллисекунд — уже чувствуется, но вполне терпимо. И даже для роботов с управлением в реальном времени. Надо протестить на досуге...
Тем не менее, если у вас нет жёстких ограничений по времени отклика системы — например, мы управляем открытием окна для вентиляции теплицы, то этот способ вполне годится.
То есть, можно сказать, что вариант управления с помощью telegram-бота годится практически для 90% IoT-устройств, поэтому он и интересен для рассмотрения.
Итак, попробуем пошагово пройти все этапы создания telegram-бота и подключения его к esp32.
На первом этапе нам нужно запустить мессенджер telegram и забить в поиск:
@BotFatherИли просто перейти вот по этой ссылке: BotFather — так мы попадём на адрес создания ботов, где нового бота создаём командой /newbot.
После чего нам выдают секретный ключ (HTTP API), которым мы будем пользоваться для подключения к этому боту:

Также, как можно видеть в самой нижней части картинки выше, нам сообщили полный адрес, по которому можно найти нашего бота — запоминаем его ( t.me/......_bot), он нам понадобится дальше.
Кроме того, как можно видеть по картинке выше, здесь есть ряд возможностей, которые стоит изучить, для увеличения возможностей взаимодействия с вашим новым ботом.
Любое управление становится гораздо нагляднее, если оно имеет обратный отклик, поэтому нам потребуется код для загрузки в esp32, который выполняет две функции:
- Принимает входящие команды.
- Отправляет telegram-боту отклик, о том, как команда понята.
Один из самых простых и наглядных способов протестировать работу системы — зажигать и гасить встроенный в esp32 светодиод.
Сделаем так, чтобы мы могли из бота отправлять слова on, off (без учёта регистра, то есть система должна реагировать, независимо от того, прислали ли мы слова, написанные заглавными буквами или маленькими), в ответ на которые esp32 будет, соответственно, зажигать или гасить встроенный светодиод. Сделано так исключительно из соображений удобства, чтобы не задумываться ещё и о регистре надписей (ссылки на библиотеки для этого кода можно найти в конце статьи):
Полный код для загрузки в esp32 — с обработкой команд on/off
Источник: https://habr.com/ru/companies/ruvds/articles/897820/
//Разработано с применением DeepSeek
//Весь код ниже приведён справочно, без какой-либо гарантии его надлежащей работы.
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
// Настройки (ЗАМЕНИТЕ НА СВОИ!)
const char* WIFI_SSID = "вписать сюда"; // Название Wi-Fi-сети
const char* WIFI_PASS = "вписать сюда"; // Пароль Wi-Fi-сети
const char* BOT_TOKEN = "вписать сюда"; // Токен бота от @BotFather
WiFiClientSecure secureClient;
UniversalTelegramBot bot(BOT_TOKEN, secureClient);
const int LED_PIN = 2; // Встроенный светодиод
String CHAT_ID = ""; // Храним Chat ID
void debugLog(String message) {
Serial.println("[DEBUG] " + message);
}
void connectToWiFi() {
debugLog("Подключаемся к WiFi: " + String(WIFI_SSID));
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
debugLog("Успешно подключено! IP: " + WiFi.localIP().toString());
}
void handleCommand(String cmd, String chat_id) {
cmd.toLowerCase(); // Нормализуем команду
debugLog("Принята команда: '" + cmd + "' от chat_id: " + chat_id);
if (cmd == "on" || cmd == "/on") {
digitalWrite(LED_PIN, HIGH);
String response = "
Поделиться ссылкой:
Интересные статьи
Интересные статьи
Когда клиент откладывает покупку, ожидая скидки, важно не потерять его интерес. Уведомления о снижении цен на избранные товары помогают вовремя сообщать пользователям о выгодных предложениях, возвраща...
В завершение цикла статей о выборе сертифицированной операционной системы (Часть 1 и Часть 2) я подготовил для вас короткий чек-лист, который позволит вам выбрать более качественную и безопасную серти...
Добрый день! Хочу поделиться своим опытом по миграции Корпоративного портала и CRM Битрикс24 с одного физического сервера на 2 виртуальные машины.В связи с нарастающим количеством заявок программистам...
Как написать код один раз, а продать 20 мобильных приложений? Я нашёл ответ путём проб и факапов и разложил свой опыт по пунктам: из статьи вы узнаете, как безболезненно ...
Реализация ORM в ядре D7 — очередная интересная, перспективная, но как обычно плохо документированная разработка от 1с-Битрикс :) Призвана она абстрагировать разработчика от механики работы с табл...
