Основы · 5 мин чтения

Что такое ESP32? Возможности, настройка в Arduino IDE и первый проект с Wi-Fi

Что такое ESP32 и чем она отличается от Arduino? Wi-Fi и Bluetooth, безопасные пины, настройка Arduino IDE, первый Blink, подключение к Wi-Fi, управление светодиодом с телефона, версии ESP32 и частые ошибки.

ESP32 — очень дешёвый двухъядерный микроконтроллер от Espressif со встроенными Wi-Fi и Bluetooth. Сама по себе она умеет многое, чего не может Arduino Uno: подключаться к домашней сети, раздавать веб-страницу, которую открываешь на телефоне, получать время и погоду из интернета и общаться с телефоном по Bluetooth. При этом программируется она в Arduino IDE уже знакомыми командами Arduino. Сегодня это самая популярная плата для первых проектов интернета вещей (IoT).

Отладочная плата ESP32 DevKit
Отладочная плата ESP32: процессор, Wi-Fi и Bluetooth находятся в модуле под металлической крышкой; на плате также есть микросхема USB-UART, стабилизатор и кнопки EN и BOOT.

Что такое ESP32 и для чего она нужна?

Строго говоря, «ESP32» — это название микросхемы под металлической крышкой. Плата в руках — это отладочная плата с этой микросхемой (например, ESP32 DevKit или NodeMCU-32S): на ней есть преобразователь USB-UART для связи с компьютером, стабилизатор, который понижает 5 V до 3,3 V, и кнопки сброса (EN) и программирования (BOOT). Вот что можно сделать на ESP32:

  • Метеостанция с Wi-Fi: показывай температуру и влажность на странице, которую открываешь на телефоне.
  • Управление с телефона: включай лампу, розетку или дверь кнопкой на веб-странице.
  • Данные из интернета: выводи на дисплей точное время (NTP), погоду или курсы валют.
  • Уведомления: получай сообщение в Telegram или на почту, когда замечено движение.
  • Bluetooth-устройства: собери пульт, который соединяется с телефоном, или устройство, которое компьютер видит как клавиатуру.
  • Датчики, которые месяцами работают от батареек: просыпайся из глубокого сна только для измерения.

ESP32 и Arduino Uno

ПараметрArduino Uno R3ESP32 (WROOM-32)
ПроцессорATmega328P, 8 бит, 16 MHzXtensa LX6, два ядра, 32 бита, 240 MHz
ОЗУ2 КБ520 КБ
Память программ (flash)32 КБОбычно 4 МБ
Беспроводная связьНетWi-Fi + Bluetooth (Classic и BLE)
Рабочее напряжение5 V3,3 V
Доступные GPIO20Около 34 (часть только на вход)
Аналоговые входы (АЦП)6 каналов, 10 бит18 каналов, 12 бит
Аналоговые выходы (ЦАП)Нет2 канала, 8 бит

Если смотреть на таблицу, ESP32 кажется лучше во всём, но и у Uno есть свои плюсы: она работает от 5 V, поэтому напрямую совместима с большинством старых датчиков и модулей, её пины выносливее, и для новичков она преподносит меньше сюрпризов. Если беспроводная связь не нужна, Uno по-прежнему отличный старт; чтобы определиться, загляни в статью Какую Arduino купить?

Пины ESP32: какие безопасно использовать?

Пины ESP32 не все «одинаковые», как у Arduino. Часть подключена к flash-памяти, часть работает только на вход, а уровень некоторых влияет на то, как плата загружается. Полную карту пинов своей платы можно посмотреть в утилите Распиновка; вот краткая сводка:

ПиныСтатусПримечание
GPIO 6–11Не использоватьПодключены к внутренней flash-памяти; если их задействовать, плата падает
GPIO 34–39Только входНе умеют работать на выход и не имеют внутренней подтяжки (pull-up)
GPIO 0, 2, 12, 15С осторожностьюВажен их уровень во время загрузки
GPIO 1 и 3С осторожностьюTX и RX последовательного соединения по USB
Пины ADC2 (0, 2, 4, 12–15, 25–27)При включённом Wi-Fi аналоговое чтение не работаетДля аналоговых измерений используй ADC1 (GPIO 32–39)
GPIO 4, 5, 13, 14, 16–19, 21–23, 25–27, 32, 33БезопасноВходы и выходы общего назначения
Пины ESP32 работают на 3,3 V и не выдерживают 5 V. Не подключай напрямую датчик с выходом 5 V (например, пин ECHO у HC-SR04); поставь между ними делитель напряжения или преобразователь уровней. Брать с пина до 20 mA безопасно.

Настройка ESP32 в Arduino IDE

  1. В Arduino IDE открой «Файл › Настройки» и добавь https://espressif.github.io/arduino-esp32/package_esp32_index.json в поле «Дополнительные ссылки для Менеджера плат» (Additional boards manager URLs).
  2. В «Менеджере плат» (Boards Manager) найди esp32 и установи пакет от Espressif Systems.
  3. Выбери ESP32 Dev Module в «Инструменты › Плата».
  4. Подключи ESP32 USB-кабелем и выбери правильный порт в «Инструменты › Порт». Если порт не появляется, установи драйвер для USB-UART микросхемы своей платы (CP2102 или CH340).
  5. Если при загрузке надпись «Connecting...» долго не пропадает, зажми кнопку BOOT на плате и отпусти, когда начнётся загрузка.

Первая программа: мигаем встроенным светодиодом

На большинстве плат ESP32 DevKit есть синий светодиод, подключённый к GPIO 2. Код ниже мигает им каждые полсекунды; как видишь, команды точно такие же, как на Arduino:

C++ (Arduino IDE)
1const int LED_PIN = 2;   // çoğu DevKit'te dahili mavi LED / onboard blue LED on most DevKits
2
3void setup() {
4  pinMode(LED_PIN, OUTPUT);
5}
6
7void loop() {
8  digitalWrite(LED_PIN, HIGH);
9  delay(500);
10  digitalWrite(LED_PIN, LOW);
11  delay(500);
12}

Подключение к Wi-Fi

Главная сила ESP32 — Wi-Fi. Код ниже подключается к домашней сети и выводит в монитор порта IP-адрес, который роутер выдал ESP32. Замени имя сети и пароль на свои и открой монитор порта на скорости 115200 бод:

C++ (Arduino IDE)
1#include <WiFi.h>
2
3const char* ssid = "AgAdi";        // Wi-Fi adın / your Wi-Fi name
4const char* password = "Sifre123"; // Wi-Fi şifren / your Wi-Fi password
5
6void setup() {
7  Serial.begin(115200);
8  WiFi.begin(ssid, password);
9  Serial.print("Bağlanıyor / connecting");
10  while (WiFi.status() != WL_CONNECTED) {
11    delay(500);
12    Serial.print(".");
13  }
14  Serial.println();
15  Serial.print("IP adresi / IP address: ");
16  Serial.println(WiFi.localIP());
17}
18
19void loop() {
20}
ESP32 подключается только к сетям Wi-Fi на 2,4 GHz; сети на 5 GHz она не видит. Если роутер раздаёт оба диапазона под одним именем и есть проблемы с подключением, помогает дать диапазону 2,4 GHz отдельное имя сети.

Управление светодиодом с телефона: простой веб-сервер

Теперь превратим ESP32 в маленький веб-сервер. После загрузки открой IP-адрес из монитора порта в браузере телефона, подключённого к той же сети Wi-Fi; две кнопки на странице включают и выключают светодиод платы. Подключи вместо светодиода реле — и так же можно управлять настоящей лампой; смотри статью Что такое модуль реле?

C++ (Arduino IDE)
1#include <WiFi.h>
2#include <WebServer.h>
3
4const char* ssid = "AgAdi";
5const char* password = "Sifre123";
6const int LED_PIN = 2;
7
8WebServer server(80);
9
10void handleRoot() {
11  server.send(200, "text/html",
12    "<meta name='viewport' content='width=device-width'>"
13    "<h1>ESP32</h1>"
14    "<a href='/on'><button>LED AÇ / ON</button></a> "
15    "<a href='/off'><button>LED KAPAT / OFF</button></a>");
16}
17
18void setup() {
19  pinMode(LED_PIN, OUTPUT);
20  Serial.begin(115200);
21  WiFi.begin(ssid, password);
22  while (WiFi.status() != WL_CONNECTED) delay(500);
23  Serial.println(WiFi.localIP());   // bu adresi telefonda aç / open this address on your phone
24
25  server.on("/", handleRoot);
26  server.on("/on",  []() { digitalWrite(LED_PIN, HIGH); handleRoot(); });
27  server.on("/off", []() { digitalWrite(LED_PIN, LOW);  handleRoot(); });
28  server.begin();
29}
30
31void loop() {
32  server.handleClient();
33}

Версии ESP32: какую купить?

МодельГлавная особенностьКогда выбирать
ESP32 (WROOM-32 DevKit)Wi-Fi, Bluetooth Classic и BLE, два ядраУниверсальная первая плата
ESP32-S3Встроенный USB, больше ОЗУ, инструкции для ИИПроекты с камерой, звуком, USB-клавиатурой и мышью
ESP32-C3Одно ядро RISC-V, Wi-Fi и BLE, маленькая и дешёваяПростые IoT-датчики
ESP32-CAMКамера и слот microSDТрансляция изображения, камеры наблюдения
ESP8266 (NodeMCU, Wemos D1)Старше, одно ядро, только Wi-FiСовсем простые проекты с Wi-Fi

Питание и работа от батарей

При включении Wi-Fi ESP32 может кратковременно потреблять до 250 mA. Если слабый USB-порт или тонкий кабель не справляются с таким скачком, плата перезагружается с сообщением «Brownout detector was triggered». Используй хороший кабель и адаптер на 5 V, который даёт не меньше 1 A; при необходимости добавь конденсатор на 100–470 µF между 3V3 и GND. Для проектов на батареях режим глубокого сна у ESP32 снижает потребление микросхемы до микроампер; однако стабилизатор и светодиод на отладочных платах продолжают потреблять несколько mA, поэтому для долгой работы от батареи предпочитают голый модуль или плату с низким потреблением.

ESP32 и MicroPython

ESP32 можно программировать не только на языке Arduino, но и на MicroPython. Когда MicroPython записан в плату через Thonny, подключение к Wi-Fi занимает всего несколько строк:

MicroPython
1import network, time
2from machine import Pin
3
4led = Pin(2, Pin.OUT)
5wlan = network.WLAN(network.STA_IF)
6wlan.active(True)
7wlan.connect("AgAdi", "Sifre123")     # Wi-Fi adı ve şifresi / Wi-Fi name and password
8
9while not wlan.isconnected():
10    time.sleep(0.5)
11print("IP:", wlan.ifconfig()[0])
12
13while True:
14    led.value(not led.value())        # LED'i yakıp söndür / toggle the LED
15    time.sleep(0.5)

Идеи проектов на ESP32

  • Метеостанция с Wi-Fi: следи с телефона за температурой и влажностью, которые измеряет DHT11.
  • Умная розетка: включай лампу через реле с веб-страницы или голосовым помощником.
  • Сигнализация по движению: отправляй уведомление в Telegram, когда PIR-датчик кого-то замечает.
  • Интернет-часы: получай время с NTP-сервера и показывай его на LCD или 7-сегментном индикаторе.
  • Bluetooth-пульт: управляй машинкой-роботом из приложения на телефоне.
  • Экономичный датчик: устройство, которое просыпается каждые 10 минут, отправляет показание и снова засыпает.

Частые ошибки и как их исправить

  • Порт не появляется: кабель может быть только для зарядки, или не установлен драйвер USB-UART; используй кабель с передачей данных и установи драйвер CP2102 или CH340.
  • «Failed to connect... Timed out waiting for packet header» при загрузке: удерживай кнопку BOOT, пока начинается загрузка.
  • Плата постоянно перезагружается: не хватает питания (brownout); возьми кабель и адаптер получше и поставь конденсатор.
  • Не подключается к Wi-Fi: сеть может быть на 5 GHz, или в имени либо пароле ошибка с заглавными буквами.
  • Использование GPIO 6–11: эти пины подключены к flash-памяти; если их задействовать, плата падает.
  • Аналоговые значения сбиваются при включении Wi-Fi: датчик на пине ADC2; перенеси его на один из пинов ADC1 между GPIO 32 и 39.

ESP32 — самый простой способ вывести в интернет то, что уже освоено на Arduino. Чтобы освежить основы Arduino, загляни в статью Что такое Arduino?; в приложении BlueGrays есть десятки проектов на ESP32 — светодиоды, веб-серверы, WebSocket, часы по NTP, данные о погоде и сигнализация в Telegram — со схемами подключения и кодом.

Частые вопросы

ESP32 — это Arduino?

Нет. ESP32 — отдельный микроконтроллер от Espressif, а Arduino — название экосистемы плат и программ. Но благодаря пакету от Espressif ESP32 программируется в Arduino IDE командами Arduino, поэтому большая часть кода для Arduino работает на ESP32 с небольшими изменениями.

Работает ли ESP32 от 5 V?

Отладочную плату можно питать 5 V через USB или пин VIN; встроенный стабилизатор понижает их до 3,3 V. А вот пины GPIO работают на 3,3 V и не выдерживают 5 V, поэтому подавать на них сигналы 5 V напрямую нельзя.

Что купить: ESP32 или Arduino Uno?

Для проектов, где нужны Wi-Fi, Bluetooth или интернет, бери ESP32. Если электроника для тебя в новинку и хочется без проблем работать с датчиками и модулями на 5 V и точно следовать урокам, Arduino Uno даст старт с меньшим числом сюрпризов.

Подключается ли ESP32 к Wi-Fi на 5 GHz?

Классическая ESP32, ESP32-S3 и ESP32-C3 поддерживают только Wi-Fi на 2,4 GHz и не видят сети на 5 GHz. Убедись, что диапазон 2,4 GHz на роутере включён.

Чем ESP32 отличается от ESP8266?

ESP8266 — более старая одноядерная микросхема, которая поддерживает только Wi-Fi и имеет один аналоговый вход. ESP32 двухъядерная и быстрее, поддерживает ещё и Bluetooth, и у неё намного больше пинов, каналов АЦП и памяти. Для новых проектов выбирают ESP32.

Можно ли пользоваться ESP32 без интернета?

Да. ESP32 может создать собственную сеть Wi-Fi (режим точки доступа), несколько ESP32 могут общаться друг с другом без роутера через ESP-NOW, а с телефоном она может соединяться по Bluetooth. Её можно использовать и как мощную Arduino вообще без беспроводных функций.

Все проекты
Мигающий светодиод на ESP32
#103Новичок

Мигающий светодиод на ESP32

Учит базовой работе с выходами GPIO на ESP32. Эффект мигания получается включением и выключением светодиода с цифрового пина. Это ESP32-версия классического проекта мигания на Arduino UNO; базовые команды мигания в среде Arduino те же, но расположение пинов ESP32 и уровни GPIO 3,3 V отличаются от Arduino UNO.

4.7(37)
99
Подключение ESP32 к Wi-Fi в режиме STA (с экраном LCD)
#127Продвинутый

Подключение ESP32 к Wi-Fi в режиме STA (с экраном LCD)

В этом проекте ESP32 надёжно и устойчиво к сбоям подключается к домашней сети Wi-Fi в режиме станции (STA). SSID и пароль хранятся в отдельном файле secrets.h, чтобы не утекли в Git; настроено автоматическое переподключение, а уровень сигнала RSSI и IP-адрес выводятся на I2C LCD-экран. Встроенный светодиод служит индикатором состояния. Это менеджер подключения уровня реальных устройств.

4.4(21)
34
Асинхронный веб-сервер на ESP32 (с выводом IP на LCD)
#129Продвинутый

Асинхронный веб-сервер на ESP32 (с выводом IP на LCD)

В этом проекте ESP32 превращается в асинхронный веб-сервер, которым можно управлять с телефона или компьютера в той же сети Wi-Fi. Благодаря библиотеке ESPAsyncWebServer сервер может обрабатывать несколько запросов одновременно (в отличие от классического WebServer.h, который блокируется на одном запросе). Открыв IP-адрес ESP32 в браузере, ты нажимаешь кнопки ON/OFF (маршруты /on и /off) и включаешь и выключаешь светодиод на GPIO 5.

4.8(16)
26
Счётчик на WebSocket с ESP32 (2 кнопки + LCD + веб в реальном времени)
#130Продвинутый
Premium

Счётчик на WebSocket с ESP32 (2 кнопки + LCD + веб в реальном времени)

В этом проекте две кнопки, подключённые к ESP32 (GPIO 5 увеличивает, GPIO 4 уменьшает), меняют счётчик. Значение сразу обновляется и на I2C LCD 16x2, и — через поддержку WebSocket в ESPAsyncWebServer — во всех подключённых браузерах без перезагрузки страницы. Вместо опроса по HTTP используется одно постоянное соединение, и ESP32 отправляет новое значение всем через ws.textAll().

4.5(14)
23
ESP32 HTTPClient + API погоды (с экраном LCD)
#133Продвинутый
Premium

ESP32 HTTPClient + API погоды (с экраном LCD)

В этом проекте ESP32 через HTTPClient.h делает вызов REST API к сервису погоды (wttr.in) через интернет. Полученный ответ в JSON разбирается с помощью ArduinoJson v7, а город, температура, влажность, погода и ветер выводятся на I2C LCD на турецком и английском. wttr.in бесплатен и не требует ключа API — достаточно указать любое название города, чтобы получить текущую погоду. Данные автоматически обновляются каждые 30 минут.

4.7(13)
20
Точное время из интернета через NTP на ESP32
#128Продвинутый
Premium

Точное время из интернета через NTP на ESP32

ESP32 подключается к Wi-Fi и получает точное время с точностью до миллисекунд от серверов NTP (Network Time Protocol). Благодаря функции configTzTime() автоматически применяется часовой пояс Турции (TRT, UTC+3), а в странах с летним временем переходы обрабатываются автоматически по строке POSIX TZ. Время выводится в монитор порта и на необязательный I2C LCD. configTzTime() запускает службу SNTP, которая периодически пересинхронизирует часы.

4.5(13)
21
Автоматическое освещение с PIR-датчиком движения на ESP32
#121Средний
Premium

Автоматическое освещение с PIR-датчиком движения на ESP32

В этом проекте PIR-датчик движения HC-SR501 замечает, что кто-то вошёл в комнату, и автоматически включает светодиод. Время свечения отслеживается через millis(); каждое показание HIGH обновляет время последнего движения, и светодиод гаснет не раньше чем через 10 секунд после последнего HIGH. Текущий код ещё и ждёт 50 ms на каждом цикле через delay(50), поэтому цикл не полностью неблокирующий. Подходит для освещения лестниц, шкафов и ванной.

4.4(24)
38
Сигнализация движения на ESP32 (PIR + зуммер + светодиод + Telegram)
#145Продвинутый
Premium

Сигнализация движения на ESP32 (PIR + зуммер + светодиод + Telegram)

Умная охранная сигнализация, которая при обнаружении движения PIR-датчиком включает зуммер и светодиод и одновременно сразу отправляет владельцу уведомление в Telegram. В ней есть 30-секундная пауза, ограничивающая частоту повторных тревог; этот механизм не проверяет срабатывания PIR и не устраняет ложные тревоги. Подходит для дома, гаража, склада или мастерской. С ESP32-CAM можно добавить уведомления с фото, а с обычной ESP32 DevKit V1 приходят текстовые.

0.0(0)
9