Telegram-бот на ESP8266: управление двумя реле простыми командами
Telegram-бот + ESP8266 + реле — один из самых простых и надёжных способов создать умный дом своими руками. В этом проекте мы управляем модулем из двух реле через обычные текстовые команды в Telegram. Можно включать/выключать свет, насос, вентилятор, розетки — всё, что подключается к реле. Бот показывает статусы, имеет удобное меню и кнопку «Выключить всё». Проект легко расширить до 8–10 реле.
Возможности бота
Управление двумя реле отдельно или одновременно. Команда «Выключить всё» для безопасности. Вывод текущего статуса реле. Удобное стартовое меню. Быстрый отклик — менее 1 секунды. Поддержка нескольких пользователей (добавьте проверку chat_id). Легко масштабируется.
Необходимые компоненты
- ESP8266 (NodeMCU или Wemos D1 mini)
- Модуль реле 2-канальный (5В, низкий уровень)
- Источник питания 5В (для реле отдельно при мощной нагрузке)
Подключение реле
- VCC реле → 5В (или 3.3В, зависит от модуля)
- GND → общий GND
- IN1 → D5 (GPIO14)
- IN2 → D6 (GPIO12)
Библиотеки
- ESP8266WiFi
- UniversalTelegramBot
- ArduinoJson
Полный скетч ESP8266
#include <ESP8266WiFi.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>
#define BOTtoken "YOUR_BOT_TOKEN"
#define CHAT_ID "YOUR_CHAT_ID"
#define RELAY1 D5
#define RELAY2 D6
bool relay1_state = false;
bool relay2_state = false;
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
void setup() {
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
digitalWrite(RELAY1, HIGH); // реле выключено
digitalWrite(RELAY2, HIGH);
WiFi.begin("SSID", "PASS");
while (WiFi.status() != WL_CONNECTED) delay(500);
client.setInsecure();
String welcome = "Управление реле запущено!\nДоступные команды:\n/relay1_on — Реле 1 ВКЛ\n/relay1_off — Реле 1 ВЫКЛ\n/relay2_on — Реле 2 ВКЛ\n/relay2_off — Реле 2 ВЫКЛ\n/all_off — Выключить всё\n/status — Статус";
bot.sendMessage(CHAT_ID, welcome, "");
}
void loop() {
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
for (int i = 0; i < numNewMessages; i++) {
String text = bot.messages[i].text;
String chat_id = bot.messages[i].chat_id;
if (text == "/relay1_on") { digitalWrite(RELAY1, LOW); relay1_state = true; bot.sendMessage(chat_id, "Реле 1 ВКЛЮЧЕНО", ""); }
if (text == "/relay1_off") { digitalWrite(RELAY1, HIGH); relay1_state = false; bot.sendMessage(chat_id, "Реле 1 ВЫКЛЮЧЕНО", ""); }
if (text == "/relay2_on") { digitalWrite(RELAY2, LOW); relay2_state = true; bot.sendMessage(chat_id, "Реле 2 ВКЛЮЧЕНО", ""); }
if (text == "/relay2_off") { digitalWrite(RELAY2, HIGH); relay2_state = false; bot.sendMessage(chat_id, "Реле 2 ВЫКЛЮЧЕНО", ""); }
if (text == "/all_off") { digitalWrite(RELAY1, HIGH); digitalWrite(RELAY2, HIGH); relay1_state = relay2_state = false; bot.sendMessage(chat_id, "ВСЁ ВЫКЛЮЧЕНО", ""); }
if (text == "/status") {
String status = "Реле 1: " + String(relay1_state ? "ВКЛ" : "ВЫКЛ") + "\nРеле 2: " + String(relay2_state ? "ВКЛ" : "ВЫКЛ");
bot.sendMessage(chat_id, status, "");
}
}
delay(1000);
}
Управляет двумя реле на пинах D5 и D6 через команды бота:
/relay1_on / /relay1_off — включение/выключение реле 1
/relay2_on / /relay2_off — включение/выключение реле 2
/all_off — выключает оба реле
/status — отправляет текущий статус реле
Использует логические переменные для отслеживания состояния реле и отправляет подтверждение в чат.
Проверка новых сообщений происходит каждую секунду.
Заключение
Надёжное и простое управление реле через Telegram. Работает в любой точке мира, где есть интернет. Легко добавить кнопки, таймеры, датчики или интеграцию с голосовым помощником.
FAQ — Telegram-бот управление реле
Как добавить кнопки вместо команд?
Используйте sendMessageWithReplyKeyboard или InlineKeyboard с callback_data.
Можно управлять 220В напрямую?
Да, через реле на 10–30А, но соблюдайте технику безопасности и используйте корпус.
Почему реле щёлкает, но не включается?
Проверьте логику: большинство китайских модулей — LOW = ВКЛ, HIGH = ВЫКЛ.
Как добавить больше реле?
Добавьте пины и команды по аналогии с relay1/relay2, обновите /status.
Можно несколько пользователей?
Да, создайте массив разрешённых chat_id и проверяйте if (allowed) перед выполнением.
Как добавить таймер включения?
Используйте millis() и переменную timer_end, включайте/выключайте по истечении.
Работает ли без интернета?
Нет, нужен Wi-Fi и доступ к api.telegram.org.