NodeMCU ESP8266: распиновка, настройка Arduino IDE и веб-сервер
Что такое NodeMCU ESP8266? Соответствие пинов D1–D8 и GPIO, настройка Arduino IDE, Wi-Fi, веб-сервер, который включает светодиод, ограничение 3,3 V и отличия от ESP32.
NodeMCU — недорогая отладочная плата, на которой чип ESP8266 с Wi-Fi объединён с USB-разъёмом, стабилизатором на 3,3 V и удобными для макетной платы пинами. Программируют её теми же командами, что уже знакомы по Arduino IDE, и она сама может подключиться к домашней сети и отдать веб-страницу, которую ты откроешь на телефоне. Если хочется вывести датчик температуры в интернет, переключать реле с телефона или управлять светодиодной лентой дома, NodeMCU ESP8266 — один из самых дешёвых способов начать.
В этом руководстве шаг за шагом разберём характеристики NodeMCU, запутанное соответствие пинов D1–D8 и GPIO, пины, которые влияют на загрузку платы, настройку Arduino IDE, подключение к Wi-Fi и веб-сервер, который включает светодиод с телефона. В последних разделах найдёшь отличия ESP8266 от ESP32 и решения самых частых ошибок.

Что такое ESP8266 и NodeMCU?
ESP8266 — 32-битный микроконтроллер со встроенным Wi-Fi, который Espressif выпустила в 2014 году. Благодаря очень низкой цене он сделал Wi-Fi-проекты массовыми в мире мейкеров. Название NodeMCU изначально относилось к прошивке на Lua, написанной для этого чипа, и к открытой отладочной плате; сегодня так называют вообще платы на модуле ESP-12E. На Lua её, правда, программируют редко; большинство пользуется Arduino IDE или MicroPython.
| Параметр | Значение |
|---|---|
| Чип | ESP8266EX, Tensilica L106, 32 бита |
| Тактовая частота | 80 MHz (можно поднять до 160 MHz) |
| ОЗУ (RAM) | Около 80 КБ пользовательской ОЗУ (при подключённом Wi-Fi скетчу остаётся 40–50 КБ) |
| Флеш-память | 4 МБ (модуль ESP-12E) |
| Wi-Fi | 802.11 b/g/n, только 2,4 GHz; станция, точка доступа или оба режима |
| Bluetooth | Нет |
| Доступные GPIO | Около 11 (D0–D8, RX, TX) |
| Аналоговый вход | 1 канал (A0), 10 бит, на плате примерно 0–3,2 V |
| PWM | Программный, по умолчанию 1 kHz, диапазон 0–255 |
| Рабочее напряжение | 3,3 V (питание 5 V через USB или VIN) |
| Ток | В среднем 70–80 mA при подключённом Wi-Fi, до 170 mA во время передачи |
В продаже встречаются две распространённые версии NodeMCU. V2 (Amica) узкая, использует USB-UART-преобразователь CP2102 и на макетной плате оставляет свободный ряд отверстий с каждой стороны. V3 (LoLin) шире, использует чип CH340G и закрывает почти всю стандартную макетную плату, поэтому с V3 гораздо удобнее работать, если поставить две макетные платы рядом. Распиновка у обеих версий одинаковая, и код на них работает один и тот же. Если нужна плата поменьше, Wemos D1 Mini несёт тот же чип и запускает те же скетчи.
Распиновка NodeMCU: соответствие D1–D8 и GPIO
Самое запутанное в NodeMCU — то, что напечатанные на плате метки D не совпадают с настоящими номерами GPIO чипа. Например, пин с меткой D1 на самом деле GPIO 5. Если в Arduino IDE выбрана плата NodeMCU, в коде можно писать D1, и компилятор сам превратит его в 5; но если написать digitalWrite(1, HIGH), будет управляться GPIO 1, то есть пин TX последовательного порта. В MicroPython всегда используется номер GPIO.
| Метка на плате | GPIO | Доп. функция | Примечание |
|---|---|---|---|
| D0 | GPIO 16 | Выход из глубокого сна | Нет поддержки прерываний; для глубокого сна соединяется с RST |
| D1 | GPIO 5 | I2C SCL | Безопасный, общего назначения |
| D2 | GPIO 4 | I2C SDA | Безопасный, общего назначения |
| D3 | GPIO 0 | Кнопка FLASH | Если при старте LOW, плата входит в режим программирования |
| D4 | GPIO 2 | Встроенный светодиод (инверсная логика), TX1 | При старте должен быть HIGH |
| D5 | GPIO 14 | SPI SCK | Безопасный, общего назначения |
| D6 | GPIO 12 | SPI MISO | Безопасный, общего назначения |
| D7 | GPIO 13 | SPI MOSI | Безопасный, общего назначения |
| D8 | GPIO 15 | SPI CS | При старте должен быть LOW; на плате есть стягивающий резистор (pull-down) |
| RX | GPIO 3 | UART RX | Оставь свободным, пока работаешь с монитором порта |
| TX | GPIO 1 | UART TX | При старте выдаёт сообщения загрузки |
| A0 | ADC0 | Аналоговый вход | Только аналоговое чтение, примерно 0–3,2 V |
| SD2, SD3 | GPIO 9, 10 | Подключены к флеш-памяти | Не использовать |
Судя по таблице, в первых проектах без опаски можно использовать пины D1, D2, D5, D6 и D7. D3, D4 и D8 задают режим загрузки платы: при подаче питания ESP8266 проверяет уровни GPIO 0, GPIO 2 и GPIO 15 и для обычного старта ждёт HIGH на GPIO 0 и GPIO 2 и LOW на GPIO 15. Если кнопка, реле или датчик на этих пинах меняет уровень при старте, плата загружается в режим загрузки кода вместо твоей программы или не запускается вовсе. D3 и D4 всё же подходят для кнопок, ведь при старте кнопка не нажата, но модули, выход которых держится в LOW, к этим пинам лучше не подключать.
Пин A0 тоже особый: аналоговый вход самого чипа ESP8266 измеряет только 0–1 V, но благодаря делителю напряжения из резисторов 220 kΩ и 100 kΩ на плате NodeMCU на A0 можно подавать примерно 0–3,2 V, а analogRead(A0) возвращает этот диапазон как 0–1023. Аналоговый вход всего один, поэтому для нескольких аналоговых датчиков понадобится I2C-АЦП, например ADS1115. Пины D1 и D2 — шина I2C по умолчанию; основы I2C найдёшь в статье Что такое I2C?.
Настройка ESP8266 в Arduino IDE
- В Arduino IDE открой «Файл › Настройки» (File › Preferences) и добавь https://arduino.esp8266.com/stable/package_esp8266com_index.json в поле «Дополнительные ссылки для Менеджера плат» (Additional boards manager URLs).
- Открой «Инструменты › Плата › Менеджер плат» (Tools › Board › Boards Manager), найди esp8266 и установи пакет ESP8266 Community.
- В меню «Инструменты › Плата» выбери NodeMCU 1.0 (ESP-12E Module). Если у тебя Wemos D1 Mini, выбери вместо неё LOLIN(WEMOS) D1 R2 & mini.
- Подключи плату кабелем с передачей данных и выбери её порт в «Инструменты › Порт». Если порт не появляется, установи драйвер CH340 для плат V3 или драйвер CP2102 для плат V2.
- Upload Speed оставь 115200; когда загрузка начнёт стабильно проходить, можно поднять до 921600, чтобы ускорить её.
Первый скетч: мигаем встроенным светодиодом
На NodeMCU на модуле ESP-12E есть синий светодиод, подключённый к GPIO 2 (D4); на платах V2 (Amica) есть второй светодиод на D0. Эти светодиоды работают с инверсной логикой: загораются, когда на пине LOW, и гаснут при HIGH. В ядре Arduino константа LED_BUILTIN уже определена как 2:
1// NodeMCU dahili LED'i: GPIO2 (D4), ters mantık / onboard LED: GPIO2 (D4), inverted logic
2
3void setup() {
4 pinMode(LED_BUILTIN, OUTPUT);
5}
6
7void loop() {
8 digitalWrite(LED_BUILTIN, LOW); // LOW = yanar / LOW = on
9 delay(500);
10 digitalWrite(LED_BUILTIN, HIGH); // HIGH = söner / HIGH = off
11 delay(500);
12}Подключение к Wi-Fi
Wi-Fi — главная сила ESP8266. Скетч ниже подключает плату к домашней сети в режиме станции и выводит в монитор порта IP-адрес, выданный роутером, и уровень сигнала. Если подключиться за 20 секунд не удаётся, он перестаёт ждать и выводит предупреждение. Замени имя сети и пароль на свои и открой монитор порта на скорости 115200 бод:
1#include <ESP8266WiFi.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 Serial.println();
9 WiFi.mode(WIFI_STA); // istemci modu / station mode
10 WiFi.begin(ssid, password);
11 Serial.print("Baglaniyor / connecting");
12 unsigned long start = millis();
13 while (WiFi.status() != WL_CONNECTED) {
14 delay(500);
15 Serial.print('.');
16 if (millis() - start > 20000) { // 20 sn'de bağlanamazsa / give up after 20 s
17 Serial.println("\nBaglanamadi, ag adini ve sifreyi kontrol et / failed, check SSID and password");
18 return;
19 }
20 }
21 Serial.println();
22 Serial.print("IP: ");
23 Serial.println(WiFi.localIP()); // modemin verdiği adres / address given by the router
24 Serial.print("Sinyal / RSSI: ");
25 Serial.print(WiFi.RSSI()); // -50 iyi, -80 zayıf / -50 good, -80 weak
26 Serial.println(" dBm");
27}
28
29void loop() {
30}| Значение RSSI | Качество сигнала | Чего ожидать |
|---|---|---|
| от -30 до -50 dBm | Отличное | Стабильное, быстрое соединение |
| от -50 до -67 dBm | Хорошее | Достаточно для веб-сервера и данных с датчиков |
| от -67 до -80 dBm | Слабое | Иногда пропадает связь, страницы грузятся медленно |
| Ниже -80 dBm | Очень слабое | Может вообще не подключиться; поднеси плату ближе к роутеру |
Управляем светодиодом с телефона: простой веб-сервер
Теперь превратим NodeMCU в маленький веб-сервер. Подключи светодиод к пину D1 (GPIO 5) через резистор 220 Ω: длинная ножка светодиода идёт через резистор к D1, короткая — к GND. Для красного светодиода этот резистор даёт ток (3,3 V − 2 V) / 220 Ω ≈ 6 mA, что с запасом ниже предела пина; чтобы рассчитать номинал для своего светодиода, воспользуйся утилитой калькулятор резистора для светодиода. После загрузки открой адрес из монитора порта в браузере телефона, подключённого к той же сети Wi-Fi.
1#include <ESP8266WiFi.h>
2#include <ESP8266WebServer.h>
3#include <ESP8266mDNS.h>
4
5const char* ssid = "AgAdi"; // Wi-Fi adın / your Wi-Fi name
6const char* password = "Sifre123"; // Wi-Fi şifren / your Wi-Fi password
7
8const int LED_PIN = D1; // GPIO5, 220 ohm direnç ile LED / LED through a 220 ohm resistor
9bool ledOn = false;
10
11ESP8266WebServer server(80);
12
13void handleRoot() {
14 String html = "<!DOCTYPE html><html><head><meta charset='utf-8'>"
15 "<meta name='viewport' content='width=device-width,initial-scale=1'>"
16 "<title>NodeMCU</title></head>"
17 "<body style='font-family:sans-serif;text-align:center'>"
18 "<h1>NodeMCU LED</h1><p>LED: <b>";
19 html += ledOn ? "ACIK / ON" : "KAPALI / OFF";
20 html += "</b></p><p>A0: ";
21 html += analogRead(A0); // 0-1023 arası analog değer / analog value 0-1023
22 html += "</p><p><a href='/on'><button>AC / ON</button></a> "
23 "<a href='/off'><button>KAPAT / OFF</button></a></p></body></html>";
24 server.send(200, "text/html", html);
25}
26
27void setLed(bool on) {
28 ledOn = on;
29 digitalWrite(LED_PIN, on ? HIGH : LOW);
30 server.sendHeader("Location", "/"); // ana sayfaya yönlendir / redirect to the main page
31 server.send(303, "text/plain", "");
32}
33
34void setup() {
35 pinMode(LED_PIN, OUTPUT);
36 digitalWrite(LED_PIN, LOW);
37 Serial.begin(115200);
38 WiFi.mode(WIFI_STA);
39 WiFi.begin(ssid, password);
40 while (WiFi.status() != WL_CONNECTED) {
41 delay(500);
42 Serial.print('.');
43 }
44 Serial.println();
45 Serial.print("Tarayicida ac / open in browser: http://");
46 Serial.println(WiFi.localIP());
47
48 if (MDNS.begin("nodemcu")) { // http://nodemcu.local adresi / address http://nodemcu.local
49 MDNS.addService("http", "tcp", 80);
50 }
51
52 server.on("/", handleRoot);
53 server.on("/on", []() { setLed(true); });
54 server.on("/off", []() { setLed(false); });
55 server.onNotFound([]() { server.send(404, "text/plain", "Bulunamadi / not found"); });
56 server.begin();
57}
58
59void loop() {
60 server.handleClient(); // gelen istekleri işle / handle incoming requests
61 MDNS.update();
62}| Часть кода | Что делает |
|---|---|
| ESP8266WebServer server(80) | Создаёт сервер на порту 80 (HTTP) |
| server.on("/on", ...) | Включает светодиод, когда браузер запрашивает /on |
| sendHeader("Location", "/") и send(303) | После действия перенаправляет браузер обратно на главную страницу, чтобы при обновлении страницы команда не отправлялась снова |
| analogRead(A0) | Показывает на странице значение с A0; туда можно подключить фоторезистор (LDR) или потенциометр |
| MDNS.begin("nodemcu") | Позволяет обращаться к устройству по имени nodemcu.local вместо IP-адреса |
| server.handleClient() | Должна вызываться в loop постоянно; обрабатывает входящие запросы |
Если страница не открывается, проверь, что телефон подключён к той же сети Wi-Fi, что и NodeMCU, а не к гостевой сети или мобильному интернету. Имя nodemcu.local обычно работает на компьютерах и iPhone; на некоторых Android-телефонах нет поддержки mDNS, и там понадобится IP-адрес. Если вместо светодиода подключить модуль реле, тот же код позволит управлять настоящей лампой; подробности в статье Что такое модуль реле?
Режим точки доступа (AP): подключение без роутера
Если вокруг нет Wi-Fi, NodeMCU может создать собственную сеть. В режиме точки доступа телефон подключается прямо к сети NodeMCU-AP, а плата обычно отвечает по адресу 192.168.4.1. Этот режим идеален для системы полива в саду или измерительного прибора, который используют в поле. Чтобы совместить веб-сервер выше с этим режимом, достаточно вместо строк WiFi.begin использовать строки softAP; режим WIFI_AP_STA выполняет обе роли одновременно. Пароль должен быть не короче 8 символов, иначе сеть не создастся.
1#include <ESP8266WiFi.h>
2
3void setup() {
4 Serial.begin(115200);
5 WiFi.mode(WIFI_AP); // kendi ağını kur / create its own network
6 bool ok = WiFi.softAP("NodeMCU-AP", "12345678"); // ad ve en az 8 karakter şifre / name and 8+ char password
7 Serial.println(ok ? "AP hazir / AP ready" : "AP hatasi / AP error");
8 Serial.print("IP: ");
9 Serial.println(WiFi.softAPIP()); // genellikle 192.168.4.1 / usually 192.168.4.1
10}
11
12void loop() {
13 Serial.print("Bagli cihaz / stations: ");
14 Serial.println(WiFi.softAPgetStationNum());
15 delay(3000);
16}ESP8266 и MicroPython
Кроме языка Arduino, NodeMCU можно программировать и на MicroPython. После того как прошивка MicroPython записана на плату с помощью esptool, код на Python запускается прямо из редактора, например Thonny. Память у ESP8266 ограничена, поэтому в больших программах на MicroPython можно столкнуться с ошибками нехватки памяти, но для простых проектов с Wi-Fi и датчиками это очень удобно. Учти, что в MicroPython номером пина служит номер GPIO, а не метка D:
1import network, time
2from machine import Pin
3
4led = Pin(2, Pin.OUT) # D4 = GPIO2, dahili LED / onboard LED
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()) # ters mantık: 0 = yanar / inverted: 0 = on
15 time.sleep(0.5)ESP8266 или ESP32?
| Параметр | ESP8266 (NodeMCU) | ESP32 (DevKit) |
|---|---|---|
| Процессор | Одно ядро, 80/160 MHz | Два ядра, 240 MHz |
| ОЗУ (RAM) | Около 80 КБ пользовательской ОЗУ | 520 КБ |
| Wi-Fi | 802.11 b/g/n, 2,4 GHz | 802.11 b/g/n, 2,4 GHz |
| Bluetooth | Нет | Классический и BLE |
| GPIO | Около 11 | Около 34 (часть только на вход) |
| Аналоговый вход | 1 канал, 10 бит | 18 каналов, 12 бит |
| PWM | Программный | 16-канальный аппаратный PWM (LEDC) |
| I2C и UART | Программный I2C, 1 полный UART и UART1 только на передачу (TX) | 2 аппаратных I2C, 3 UART |
| Сенсорные пины и ЦАП | Нет | 10 сенсорных пинов, 2 ЦАП |
| Цена | Дешевле | Немного дороже |
Короче говоря, для задач вроде отправки данных одного датчика в интернет, переключения реле с телефона или простой веб-страницы ESP8266 по-прежнему хватает с избытком, и она дешевле. Для новых проектов, где нужны Bluetooth, много аналоговых входов, камера, быстрая обработка или много задач одновременно, лучше выбрать ESP32. Код переносится легко: часто достаточно заменить ESP8266WiFi.h на WiFi.h, ESP8266WebServer.h на WebServer.h и ESP8266mDNS.h на ESPmDNS.h, удалить строку MDNS.update() (у ESP32 её нет) и использовать номера GPIO вместо меток платы вроде D1. Подробнее — в статьях Что такое ESP32? и Arduino или ESP32?.
Питание и глубокий сон
NodeMCU питается напряжением 5 V через USB или пин VIN, а стабилизатор на плате понижает его до 3,3 V. Всплеск тока до 170 mA во время передачи по Wi-Fi может вызвать просадку напряжения на слабом USB-порту или тонком кабеле, и плата начнёт сама перезагружаться, поэтому используй хороший кабель и адаптер не слабее 1 A. В проектах с батарейным питанием ESP.deepSleep() усыпляет чип с потреблением около 20 µA; чтобы он просыпался по окончании таймера, пин D0 (GPIO 16) нужно соединить с пином RST. Однако USB-UART-преобразователь и стабилизатор на плате продолжают потреблять ток во время сна, поэтому для долгой работы от батареи лучше подходит голый модуль ESP-12 или плата с низким энергопотреблением. Оценить время работы от батареи поможет калькулятор времени работы от батареи.
Идеи проектов с NodeMCU
- Wi-Fi-термометр: показывай температуру и влажность с DHT11 на странице, которую открываешь на телефоне.
- Умная розетка: включай и выключай лампу с помощью модуля реле и кнопки на веб-странице.
- Напоминание о поливе: подключи датчик влажности почвы к A0 и выводи на странице предупреждение, когда почва пересыхает.
- Wi-Fi-светодиодная лента: выбирай цвет и эффект ленты WS2812B с телефона.
- Интернет-часы: получай время с NTP-сервера и показывай его на I2C LCD-дисплее.
- Сигнализация движения: отправляй сообщение в Telegram, когда PIR-датчик замечает движение.
Частые ошибки и как их исправить
| Симптом | Вероятная причина | Решение |
|---|---|---|
| Порт не появляется | Кабель только для зарядки или нет драйвера | Используй кабель с передачей данных; установи драйвер CH340 или CP2102 |
| «Failed to connect to ESP8266: Timed out waiting for packet header» (не удалось подключиться к ESP8266) | Плата не смогла войти в режим загрузки | Зажми FLASH, нажми и отпусти RST, отпусти FLASH и снова запусти загрузку |
| Плата не запускается или постоянно перезагружается | Схема на D3, D4 или D8 сбивает уровни при старте | Перенеси эту схему на безопасные пины, например D5, D6 или D7 |
| Мусорные символы в мониторе порта | Не совпадает скорость (бод) | Выбери ту же скорость, что в коде; сообщения загрузки идут на 74880 бод |
| Не подключается к Wi-Fi | Сеть 5 GHz, неверный пароль или слабый сигнал | Используй сеть 2,4 GHz, проверь заглавные и строчные буквы, посмотри на RSSI |
| Светодиод не горит, а монитор порта молчит | В коде написано 1 вместо D1 (GPIO 1 = TX) | Используй в коде метку D1 или GPIO 5 |
| Ошибка «Soft WDT reset» (сброс сторожевым таймером) | Цикл внутри loop() выполняется слишком долго | Добавь yield() или delay(1) в длинные циклы; оба дают поработать фоновым задачам Wi-Fi и сторожевому таймеру |
NodeMCU ESP8266 — самый доступный способ перенести то, что изучено на Arduino, в беспроводной мир: несколько строк кода — и она подключается к домашней сети, а ты собираешь устройства, которыми управляешь с телефона. В приложении BlueGrays есть беспроводные проекты на ESP32 — подключение к Wi-Fi, веб-сервер, WebSocket, NTP-часы и mDNS — с пошаговыми схемами подключения и кодом, и ту же логику легко перенести на твою NodeMCU.
Частые вопросы
NodeMCU и ESP8266 — это одно и то же?
ESP8266 — название Wi-Fi-чипа от Espressif. NodeMCU — отладочная плата, на которой модуль ESP-12E с этим чипом объединён с USB-разъёмом, стабилизатором и удобными для макетной платы пинами. Короче, любая NodeMCU — это плата на ESP8266, но не любая плата на ESP8266 — NodeMCU; ESP-01 и Wemos D1 Mini используют тот же чип.
Работает ли NodeMCU от 5 V?
Плату можно питать напряжением 5 V через USB или пин VIN, а стабилизатор понижает его до 3,3 V. Но пины GPIO работают на 3,3 V и официально не выдерживают 5 V. Сигналы 5 V стоит подключать через делитель напряжения или преобразователь уровней.
Какому GPIO соответствует D1 на NodeMCU?
D1 — это GPIO 5, пин I2C SCL по умолчанию. Другие частые соответствия: D2 = GPIO 4, D4 = GPIO 2, D5 = GPIO 14, D6 = GPIO 12, D7 = GPIO 13 и D8 = GPIO 15. В Arduino IDE можно писать D1 прямо в коде; в MicroPython нужно использовать номер GPIO.
Может ли ESP8266 подключиться к Wi-Fi 5 GHz?
Нет, ESP8266 поддерживает только сети 802.11 b/g/n в диапазоне 2,4 GHz. Проверь, что у роутера включён диапазон 2,4 GHz; если оба диапазона идут под одним именем, отдельное имя сети для 2,4 GHz часто решает проблемы с подключением.
Чем отличаются NodeMCU V2 и V3?
V2 (Amica) — более узкая плата с USB-UART-преобразователем CP2102, которая оставляет свободные отверстия с обеих сторон макетной платы. V3 (LoLin) шире и использует чип CH340G. Пины, процессор и код одинаковые; отличаются только размер и USB-драйвер, который нужно установить.
Есть ли у ESP8266 Bluetooth?
Нет, у ESP8266 нет аппаратного Bluetooth; она поддерживает только Wi-Fi. Для проектов с Bluetooth или BLE используй ESP32 или добавь к плате отдельный Bluetooth-модуль, например HC-05.
Что собрать после прочтения
Все проекты
Мигающий светодиод на ESP32
Учит базовой работе с выходами GPIO на ESP32. Эффект мигания получается включением и выключением светодиода с цифрового пина. Это ESP32-версия классического проекта мигания на Arduino UNO; базовые команды мигания в среде Arduino те же, но расположение пинов ESP32 и уровни GPIO 3,3 V отличаются от Arduino UNO.

Мигание встроенным светодиодом ESP32
Мигание встроенным синим светодиодом на ESP32 DevKit V1. Внешние компоненты не нужны! Первый проект, который стоит попробовать после покупки ESP32. Встроенный светодиод подключён к GPIO 2.

Подключение 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().

mDNS на ESP32: доступ к устройству через bluegrays-esp.local (с экраном LCD)
В этом проекте к ESP32 добавляется служба mDNS (Multicast DNS), и к устройству можно обращаться по понятному имени вроде bluegrays-esp.local вместо IP-адреса. Даже если IP, выданный DHCP, меняется, устройство всегда доступно по одному имени. На устройстве также работает маленький веб-сервер, через который по адресу http://bluegrays-esp.local/ из браузера отправляются команды светодиоду. I2C LCD показывает имя хоста, IP-адрес и состояние светодиода.

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

Обновление ESP32 по воздуху (OTA): беспроводная установка прошивки (с экраном LCD)
В этом проекте ты узнаешь, как загружать новую прошивку в ESP32 по Wi-Fi без USB-кабеля. С библиотекой ArduinoOTA ESP32 становится видна в сети и автоматически появляется как bluegrays-ota на вкладке «Сетевой порт» в Arduino IDE. Первая загрузка выполняется по USB, а все следующие обновления — без проводов: это важно для устройств в эксплуатации. I2C LCD показывает состояние Wi-Fi, IP-адрес, имя хоста, процент загрузки OTA и сообщения об ошибках.
Другие статьи
Приложение BlueGrays
Собери эту схему шаг за шагом в телефоне
Схема подключения, код и список деталей на одном экране. 200+ проектов на Arduino, ESP32 и Pico готовы к сборке.
Наведи камеру телефона
Наведи камеру на код — откроется магазин приложений на телефоне.
или открыть магазин

