Telegram-бот на ESP8266: управление двумя реле простыми командами

Telegram-бот + ESP8266 + реле — один из самых простых и надёжных способов создать умный дом своими руками. В этом проекте мы управляем модулем из двух реле через обычные текстовые команды в Telegram. Можно включать/выключать свет, насос, вентилятор, розетки — всё, что подключается к реле. Бот показывает статусы, имеет удобное меню и кнопку «Выключить всё». Проект легко расширить до 8–10 реле.

Telegram-бот ESP8266 управление двумя реле

Возможности бота

Управление двумя реле отдельно или одновременно. Команда «Выключить всё» для безопасности. Вывод текущего статуса реле. Удобное стартовое меню. Быстрый отклик — менее 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);
}
Подключается к Wi-Fi и Telegram-боту.
Управляет двумя реле на пинах 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.

📁 Скачать примеры