Что такое 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 и для чего она нужна?
Строго говоря, «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 R3 | ESP32 (WROOM-32) |
|---|---|---|
| Процессор | ATmega328P, 8 бит, 16 MHz | Xtensa LX6, два ядра, 32 бита, 240 MHz |
| ОЗУ | 2 КБ | 520 КБ |
| Память программ (flash) | 32 КБ | Обычно 4 МБ |
| Беспроводная связь | Нет | Wi-Fi + Bluetooth (Classic и BLE) |
| Рабочее напряжение | 5 V | 3,3 V |
| Доступные GPIO | 20 | Около 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 в Arduino IDE
- В Arduino IDE открой «Файл › Настройки» и добавь https://espressif.github.io/arduino-esp32/package_esp32_index.json в поле «Дополнительные ссылки для Менеджера плат» (Additional boards manager URLs).
- В «Менеджере плат» (Boards Manager) найди esp32 и установи пакет от Espressif Systems.
- Выбери ESP32 Dev Module в «Инструменты › Плата».
- Подключи ESP32 USB-кабелем и выбери правильный порт в «Инструменты › Порт». Если порт не появляется, установи драйвер для USB-UART микросхемы своей платы (CP2102 или CH340).
- Если при загрузке надпись «Connecting...» долго не пропадает, зажми кнопку BOOT на плате и отпусти, когда начнётся загрузка.
Первая программа: мигаем встроенным светодиодом
На большинстве плат ESP32 DevKit есть синий светодиод, подключённый к GPIO 2. Код ниже мигает им каждые полсекунды; как видишь, команды точно такие же, как на Arduino:
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 бод:
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 в маленький веб-сервер. После загрузки открой IP-адрес из монитора порта в браузере телефона, подключённого к той же сети Wi-Fi; две кнопки на странице включают и выключают светодиод платы. Подключи вместо светодиода реле — и так же можно управлять настоящей лампой; смотри статью Что такое модуль реле?
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 занимает всего несколько строк:
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
Учит базовой работе с выходами GPIO на ESP32. Эффект мигания получается включением и выключением светодиода с цифрового пина. Это ESP32-версия классического проекта мигания на Arduino UNO; базовые команды мигания в среде Arduino те же, но расположение пинов ESP32 и уровни GPIO 3,3 V отличаются от Arduino UNO.

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

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

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

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

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

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

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

