ESP32 и Telegram-бот: удалённое управление через интернет

Микроконтроллер ESP32 обладает встроенным Wi-Fi и позволяет легко подключать устройства к интернету. Одним из самых удобных способов взаимодействия с «умным домом» или IoT-устройствами является использование Telegram-бота. В этой статье мы создадим простой проект, который позволит управлять ESP32 через команды в Telegram.

Необходимое оборудование

  • Плата ESP32 DevKit (WROOM или WROVER)
  • Реле-модуль на 5 В (для управления нагрузкой)
  • Светодиод и резистор 220 Ом (для индикации)
  • Питание 5 В для ESP32
  • Wi-Fi сеть с доступом в интернет
  • Учётная запись Telegram и созданный бот через @BotFather

Принцип работы

ESP32 подключается к Wi-Fi и через библиотеку UniversalTelegramBot получает команды от пользователя. Команды отправляются в Telegram-бот, бот пересылает их на ESP32, а тот включает или выключает нагрузку (реле или светодиод).

Компонент Подключение к ESP32
Светодиод GPIO 2 через резистор 220 Ом
Реле-модуль GPIO 5 (IN), VCC 5 В, GND

Пример кода


// Пример ESP32 + Telegram Bot
// Библиотеки: WiFi, WiFiClientSecure, UniversalTelegramBot, ArduinoJson

#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>

const char* ssid     = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";

// Токен, полученный у BotFather
#define BOT_TOKEN "123456789:AA..."

// ID чата (можно узнать, написав боту через @userinfobot)
#define CHAT_ID "987654321"

WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);

const int ledPin = 2;
const int relayPin = 5;
unsigned long lastTimeChecked;

void setup() {
  Serial.begin(115200);
  pinMode(ledPin, OUTPUT);
  pinMode(relayPin, OUTPUT);

  // Подключение к Wi-Fi
  WiFi.begin(ssid, password);
  Serial.print("Подключение к WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi подключен!");
  secured_client.setInsecure(); // Отключаем проверку сертификата TLS
}

void handleNewMessages(int numNewMessages) {
  for (int i = 0; i < numNewMessages; i++) {
    String chat_id = bot.messages[i].chat_id;
    String text = bot.messages[i].text;

    if (chat_id != CHAT_ID) continue; // Игнорируем чужие чаты

    if (text == "/led_on") {
      digitalWrite(ledPin, HIGH);
      bot.sendMessage(chat_id, "Светодиод включен", "");
    } 
    else if (text == "/led_off") {
      digitalWrite(ledPin, LOW);
      bot.sendMessage(chat_id, "Светодиод выключен", "");
    } 
    else if (text == "/relay_on") {
      digitalWrite(relayPin, HIGH);
      bot.sendMessage(chat_id, "Реле включено", "");
    } 
    else if (text == "/relay_off") {
      digitalWrite(relayPin, LOW);
      bot.sendMessage(chat_id, "Реле выключено", "");
    }
  }
}

void loop() {
  if (millis() - lastTimeChecked > 2000) { // Проверка раз в 2 секунды
    int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
    while (numNewMessages) {
      handleNewMessages(numNewMessages);
      numNewMessages = bot.getUpdates(bot.last_message_received + 1);
    }
    lastTimeChecked = millis();
  }
}

Применение и расширение проекта

  • Управление светом и бытовой техникой из любой точки мира
  • Запрос температуры или влажности с датчиков через команду
  • Отправка уведомлений о тревоге (например, при срабатывании датчика движения)
  • Создание простого «умного дома» на базе ESP32
  • Возможность добавить авторизацию по ID чата для безопасности

Заключение

Связка ESP32 и Telegram-бота — это доступный способ организовать удалённое управление и мониторинг ваших устройств без сложных серверов и облачных платформ. Такой подход можно легко масштабировать: добавить новые команды, подключить датчики, расширить систему безопасности. Даже новичок сможет собрать работающий проект за один вечер.

<< Проекты << Все товары >> Статьи, уроки >>

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
ATtiny обзор контроллеров

ATtiny обзор контроллеров

Обозначение Память программ (FLASH) [Kбайт] Память данных [байт] Kол-во линий ввода/..

Защита входов и аналоговых сигналов: как не спалить Arduino/ESP32 и получить стабильные измерения

Защита входов и аналоговых сигналов: как не спалить Arduino/ESP32 и получить стабильные измерения

Защита входов и аналоговых сигналов: как не спалить Arduino/ESP32 и получить стабильные измерения ..

ESP32: Высокоточные измерения сигналов с помощью таймеров

ESP32: Высокоточные измерения сигналов с помощью таймеров

ESP32: Высокоточные измерения сигналов с помощью таймеров ESP32 оснащён мощными аппаратными тайме..

Монтажный шилд для NodeMcu ESP8266

Монтажный шилд для NodeMcu ESP8266

Монтажный модуль расширения для WiFi контроллера NodeMcu ESP8266Позволяет выполнять монтаж прое..

90.58грн.

Двигатель 12В с редуктором 10RPM

Двигатель 12В с редуктором 10RPM

Коллекторный двигатель постоянного тока с сильным редуктором для использования в различной робототех..

517.43грн.