Все статьиHardware

Управляем ESP32 через Telegram!! Обзор и тест ESP32 Dev Module

БА
Бексултан Айтен
CTO, Alashed
20 июля 2025 г.
8 мин чтения
Управляем ESP32 через Telegram!! Обзор и тест ESP32 Dev Module

Обзор платы ESP32 Dev Module, сравнение с Arduino Uno и ESP8266, три интересных скетча: Blink, управление серво с телефона и управление светодиодом через Telegram бота.

История микроконтроллера ESP32: от идеи до народного любимца
История микроконтроллера ESP32: от идеи до народного любимца

Всем привет =)

Недавно (ну как недавно, месяца 4 назад, но неважно) купил себе очень популярную плату ESP32 Dev Module.

В этой статье «обозрём» эту плату, посмотрим, что она умеет, что с ней делать и чем она лучше/хуже других.

Обязательно прочитайте статью до конца и поставьте 5 звёзд в конце!! Спасибо большое =)

А теперь перейдём к обзору =)

Я сделал видео-обзор платы ESP32 Dev Module (смотрите на YouTube, Rutube), в видео-обзоре использовались 3 скетча — Blink, _Servo_ +ESP32+ _Смартфон_, ESP32+ _Telegram_. Эти скетчи представлены в этой статье.

Вот так надо устанавливать плату ESP32 Dev Module в макетку
Вот так надо устанавливать плату ESP32 Dev Module в макетку

1. ВНЕШНИЙ ВИД, ПИНЫ, ПОРТЫ, ЧИПЫ

Плата состоит из двух плат — основной с обвязкой для модуля, питанием, всеми пинами, TTL конвертером, USB Type-C портом и кнопками режима загрузки (BOOT) и перезагрузки платы (EN). А также на основной плате расположена маленькая платка модуля с самим чипом ESP32 и чипом памяти.

Все пины формата ПАПА, расположены с нижней стороны платы. В макетку плата не установится, нужно две макетки параллельно. И с как минимум одной макетной платы надо будет отсоединить одну шину питания, иначе плата ESP32 не влезет =)))

Чтобы было удобнее пользоваться этой платой, китайцы специально создали удобненький шилд, о котором сейчас поговорим.

2. ВНЕШНИЙ ВИД ШИЛДА

Вот так выглядит шилд специально для этой платы на 30 пинов. С его помощью можно запитать схему от 9 вольтовой батарейки CRONA через переходник, подключенный в разъём 6 мм. Питание для платы 5V формируется понижайкой 1117 до 5V. А сам чип питается от 3V3, которые формируются на самой плате ESP32, на шилде только 5V понижайка.

Также можно запитать плату от USB Type-C и Micro-USB.

Для каждого GPIO пина подведена земля и питание. Напряжение питания для всех пинов можно выбрать с помощью жёлтой перемычки. На выбор даются 5 и 3.3 вольт. Если не хотите туда подавать питание, можно просто убрать перемычку.

Особенно удобно подключаются сервоприводы, так как не нужно добавлять провода, просто берите кабель сервы и подключайте в соответствующем положении. В начале полос с пинами есть шелкография с обозначением пинов — S, V, G. S это линия с пинами ESP32 платы, V это линия питания, G это линия земли.

Кстати, чуть не забыл =))) По виду этот шилд похож на Arduino Uno. Но она ничуть не такого же размера =))) И не знаю, зачем сделали такую форму платы шилда, вроде даже отверстия для крепления на винтики не совпадают.

3. РАСПИНОВКА ПЛАТЫ ESP32 Dev Module

Распиновка-схема платы ESP32
Распиновка-схема платы ESP32

Все логические пины ESP32 имеют ШИМ. Почти все являются входами-выходами, только пины 34, 35, 36 и 39 являются только входами. Пины TX0 и RX0 используются только для UART0. На плате есть 2 пина земля и два питания — вход 5 вольт и выход 3.3 вольта. На плате есть 2 SPI и 2 UART.

4. СРАВНЕНИЕ ESP32 С ARDUINO UNO и ESP8266

Вот таблица сравнения ESP32 с его предшественником, ESP8266, а также с простой и популярной Arduino Uno.

\* Параметры со звёздочкой указаны примерные, возможны небольшие неточности.

ПараметрArduino UnoESP8266ESP32
ПроизводительAtmel (Microchip)Espressif SystemsEspressif Systems
ЧипATMEL Mega328PESP8266EXОбычно ESP32-D0WD
Цена\*300-600 руб.100-300 руб.200-600 руб.
Размер\*5\*7 см(esp12 module) 2\*3 см, (wemos) 3\*4 см, (nodemcu) 7\*3 см(esp32 module) 2\*3 см, (esp32 dev board) 5\*2 см
Тактовая частота ЦПУДо 20 МГц80 МГцДо 240 МГц
Количество ядер ЦПУ1 ядро1 ядроОбычно 2 ядра
Битность ЦПУ8 бит32 бита32 бита
Оперативная память2 Кб128 КбОт ~520 Кб
Постоянная памятьВстроенная, 32 КбВнешняя, 512 Кб — 1 МбВнешняя, 4 — 16 Мб
ОсобенностиВторой независимый асинхронный таймерWiFiWiFi + Bluetooth
Сложность программированияЛегко. Через Arduino IDE без дополнений.Средне. Через Arduino IDE с установкой ядра, либо через фирменные инструменты Espressif, или PlatformIOСредне. Через Arduino IDE с установкой ядра, либо через фирменные инструменты Espressif, или PlatformIO

5. 3 ИНТЕРЕСНЫХ СКЕТЧА

1. Blink — мигаем светодиодом

Простой скетч для простого мигания простым светодиодом на пине D2 =)

Светодиод будет светиться 1 секунду (1000 миллисекунд) и не светиться 1 секунду.

На плате ESP32 Dev Module светодиод подписан символами «D2».

```cpp

void setup(){

pinMode(2, OUTPUT); // Пин D2 (GPIO2) настраиваем на выход

}

void loop(){

digitalWrite(2, HIGH); // Включаем светодиод

delay(1000); // Ждём 1 секунду/1000 миллисекунд

digitalWrite(2, LOW); // Выключаем светодиод

delay(1000); // Ждём 1 секунду/1000 миллисекунд

}

`

2. Управление серво с телефона

Очень интересный проект — на телефоне открываем страничку платы, на ней есть слайдер. Двигаем его — и сервопривод двигается на нужный градус =)

Скетч написано на основе библиотеки GyverPortal. Её нужно обязательно установить заранее в Arduino IDE.

Управление серво на ESP32 отличается от Arduino Uno. Нужно указывать дополнительные параметры (строки 57-60 и 63), а также библиотека сервопривода на ESP32 может конфликтовать с другими библиотеками.

В этом скетче библиотеки не конфликтуют и можно спокойно загружать скетч в плату.

Внимание! В строках 67-71 обязательно укажите вид подключения к WiFi. А также в строках 5 и 6 введите имя и пароль вашей существующей WiFi сети (если подключите плату к роутеру) или придумайте имя-пароль для новой сети, которую плата создаст.

```cpp

#include <GyverPortal.h>

#include <Servo.h>

// Настройки WiFi

const char* ssid = "SSID"; // Замените на имя вашей WiFi сети

const char* password = "PASSWORD"; // Замените на пароль от вашей WiFi сети

// Создаем объект сервопривода

Servo myServo;

const int servoPin = 4; // Пин D4 для сервопривода

// Создаем объект GyverPortal

GyverPortal portal;

// Переменная для хранения положения сервы

int servoPos = 90;

// Функция для построения интерфейса

void build() {

GP.BUILD_BEGIN();

GP.THEME(GP_DARK);

// Заголовок

GP.TITLE("ESP32 Сервопривод");

GP.HR();

// Слайдер для управления сервой с мгновенной отправкой

GP.SLIDER("slider", servoPos, 0, 180);

// Завершаем постройку интерфейса

GP.BUILD_END();

// Отправляем JavaScript отдельно

portal.sendUpdate(

"document.getElementById('slider').oninput = function() {"

"fetch('/?slider=' + this.value).then(r=>r.text());"

"};"

);

}

// Функция обработки действий

void action() {

// Если пришло значение от слайдера

if (portal.click("slider")) {

servoPos = portal.getInt("slider"); // Получаем значение

myServo.write(servoPos); // Устанавливаем положение сервы

Serial.print("Servo position: "); // Выводим в монитор порта

Serial.println(servoPos);

}

}

void setup() {

// Инициализация последовательного порта

Serial.begin(115200);

// Разрешаем использование всех таймеров ESP32 для сервопривода

ESP32PWM::allocateTimer(0);

ESP32PWM::allocateTimer(1);

ESP32PWM::allocateTimer(2);

ESP32PWM::allocateTimer(3);

// Подключаем сервопривод

myServo.setPeriodHertz(50); // Стандартная частота для сервоприводов

myServo.attach(servoPin, 500, 2400); // Присоединяем серву с калибровкой импульсов

myServo.write(servoPos); // Устанавливаем в среднее положение

// ================ НАСТРОЙКИ ================

// Подключение к WiFi (раскомментируйте что нужно)

//WiFi.begin(ssid, password); // Подключение к внешнему WiFi

//WiFi.softAP(ssid, password); // Создаём точку доступа

// ==========================================

Serial.print("Подключение к WiFi");

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

Serial.println();

Serial.print("IP адрес: ");

Serial.println(WiFi.localIP());

// Инициализация GyverPortal

portal.attachBuild(build);

portal.attach(action);

portal.start();

}

void loop() {

portal.tick();

}

`

3. Управление светодиодом через Telegram бота

Скетч для включения и выключения светодиода на плате ESP32 на пине D2 через Telegram бота командами.

Обязательно создайте своего бота через официальный инструмент для создания ботов — BotFather. Полученный токен укажите в скетче в строке 10.

Также нужно обязательно узнать свой user\_id. Его можно узнать через другого бота — UserInfoBot. Свой user\_id укажите в строке 11. Это нужно, чтобы вашей платой могли управлять только вы с вашего аккаунта. И никто не смог перехватить доступ к светодиодику на вашей плате =))

P.S. Если у вас нет доступа к Telegram (нет аккаунта или др.), то этот проект не получится сделать.

В этом скетче необходим доступ в Интернет, поэтому варианта с точкой доступа нет. В строках 6 и 7 укажите имя-пароль вашей WiFi сети с доступом в Интернет (домашний/мобильный интернет).

Заранее обязательно убедитесь в наличии библиотекWiFiClientSecure.h и UniversalTelegramBot.h. Библиотека WiFi.h уже предустановлена в Arduino IDE.

```cpp

#include <WiFi.h>

#include <WiFiClientSecure.h>

#include <UniversalTelegramBot.h>

// Замените на свои данные WiFi

const char* ssid = "SSID";

const char* password = "PASSWORD";

// Инициализация Telegram бота

#define BOTtoken "TOKEN" // Создать своего бота можно через бота https://t.me/BotFather

#define CHAT_ID "USER_ID" // Узнать свой айди можно через бота https://t.me/userinfobot

WiFiClientSecure client;

UniversalTelegramBot bot(BOTtoken, client);

// Встроенный светодиод (обычно на D2 у ESP32/ESP8266)

const int ledPin = 2; // GPIO2 (D2)

bool ledState = LOW; // Статус светодиода - выключен (0)

void setup() {

Serial.begin(115200); // После прошивки запустите монитор порта 115200

pinMode(ledPin, OUTPUT);

digitalWrite(ledPin, ledState);

// Подключение к Wi-Fi, режим подключения к внешней сети

WiFi.mode(WIFI_STA);

WiFi.begin(ssid, password);

client.setCACert(TELEGRAM_CERTIFICATE_ROOT);

Serial.print("Подключение к WiFi...");

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

Serial.println("\nПодключено! IP: " + WiFi.localIP().toString());

bot.sendMessage(CHAT_ID, "Привет! Это сообщение отправлено платой ESP32 Отправь /on или /off", "");

}

void loop() {

int numNewMessages = bot.getUpdates(bot.last_message_received + 1);

for (int i = 0; i < numNewMessages; i++) {

String chat_id = String(bot.messages[i].chat_id);

String text = bot.messages[i].text;

if (chat_id != CHAT_ID) {

bot.sendMessage(chat_id, "Доступ запрещён. Вы не владелец бота.", "");

continue;

}

if (text == "/on") {

ledState = HIGH;

digitalWrite(ledPin, ledState);

bot.sendMessage(chat_id, "Светодиод ВКЛЮЧЕН", "");

Serial.println("LED ON");

}

else if (text == "/off") {

ledState = LOW;

digitalWrite(ledPin, ledState);

bot.sendMessage(chat_id, "Светодиод ВЫКЛЮЧЕН", "");

Serial.println("LED OFF");

}

else {

bot.sendMessage(chat_id, "Используй команды:\n/on - включить\n/off - выключить", "");

}

}

delay(10);

}

`

На этом всё. Надеюсь вам статья понравилась =) Спасибо за внимание!

Попробуйте Alashed бесплатно

Подключите школу к пилоту. Генерируйте КМЖ за 2 минуты, ведите CodeStudio уроки, заказывайте оборудование — всё в одном месте.

Попробовать бесплатноДемо