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 разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Таймеры Arduino UNO — Часть 5. Измерение длительности импульсов и частоты (Input Capture)

Таймеры Arduino UNO — Часть 5. Измерение длительности импульсов и частоты (Input Capture)

Таймеры Arduino UNO — Часть 5. Измерение длительности импульсов и частоты (Input Capture) Т..

Модуль 5 — Датчики и модули: DHT11, LDR и проект «Умная лампа»

Модуль 5 — Датчики и модули: DHT11, LDR и проект «Умная лампа»

Модуль 5 — Датчики и модули (курс для начинающих) Цель модуля: познакомиться с популярными ..

Arduino возврат более одной переменной из функции

Arduino возврат более одной переменной из функции

Привет друзья! Из видео Arduino функции мы уже знаем, что в функцию можно передавать много переменны..

Модуль 1 — Знакомство с Arduino: первая прошивка Blink и проект мигающего светодиода

Модуль 1 — Знакомство с Arduino: первая прошивка Blink и проект мигающего светодиода

Модуль 1 — Знакомство с Arduino (курс для новичков) Цель модуля: понять, что такое Arduino, устан..

Шестерня для зубчатого ремня на 20 зубьев под ось 8 мм

Шестерня для зубчатого ремня на 20 зубьев под ось 8 мм

Используется для передачи и редукции крутящего момента от двигателя до оси 8 ммКоличество зубьев 20 ..

29.41грн.