Компоненты · 8 мин чтения

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 и решения самых частых ошибок.

Отладочная плата NodeMCU V3 ESP8266
NodeMCU V3 (LoLin): в модуле ESP-12E под металлическим экраном находятся чип ESP8266 и 4 МБ флеш-памяти; на плате стоят USB-UART-преобразователь CH340, стабилизатор на 3,3 V и кнопки RST и FLASH.

Что такое 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-Fi802.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Доп. функцияПримечание
D0GPIO 16Выход из глубокого снаНет поддержки прерываний; для глубокого сна соединяется с RST
D1GPIO 5I2C SCLБезопасный, общего назначения
D2GPIO 4I2C SDAБезопасный, общего назначения
D3GPIO 0Кнопка FLASHЕсли при старте LOW, плата входит в режим программирования
D4GPIO 2Встроенный светодиод (инверсная логика), TX1При старте должен быть HIGH
D5GPIO 14SPI SCKБезопасный, общего назначения
D6GPIO 12SPI MISOБезопасный, общего назначения
D7GPIO 13SPI MOSIБезопасный, общего назначения
D8GPIO 15SPI CSПри старте должен быть LOW; на плате есть стягивающий резистор (pull-down)
RXGPIO 3UART RXОставь свободным, пока работаешь с монитором порта
TXGPIO 1UART TXПри старте выдаёт сообщения загрузки
A0ADC0Аналоговый входТолько аналоговое чтение, примерно 0–3,2 V
SD2, SD3GPIO 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, к этим пинам лучше не подключать.

Пины ESP8266 работают на 3,3 V и официально не выдерживают 5 V; с одного пина стоит брать не больше примерно 12 mA. Не подключай напрямую датчик с выходом 5 V (например, пин ECHO у HC-SR04); поставь между ними делитель напряжения или преобразователь уровней. Никогда не подавай 5 V на пин 3V3; питай плату напряжением 5 V через USB или пин VIN.

Пин 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

  1. В Arduino IDE открой «Файл › Настройки» (File › Preferences) и добавь https://arduino.esp8266.com/stable/package_esp8266com_index.json в поле «Дополнительные ссылки для Менеджера плат» (Additional boards manager URLs).
  2. Открой «Инструменты › Плата › Менеджер плат» (Tools › Board › Boards Manager), найди esp8266 и установи пакет ESP8266 Community.
  3. В меню «Инструменты › Плата» выбери NodeMCU 1.0 (ESP-12E Module). Если у тебя Wemos D1 Mini, выбери вместо неё LOLIN(WEMOS) D1 R2 & mini.
  4. Подключи плату кабелем с передачей данных и выбери её порт в «Инструменты › Порт». Если порт не появляется, установи драйвер CH340 для плат V3 или драйвер CP2102 для плат V2.
  5. Upload Speed оставь 115200; когда загрузка начнёт стабильно проходить, можно поднять до 921600, чтобы ускорить её.

Первый скетч: мигаем встроенным светодиодом

На NodeMCU на модуле ESP-12E есть синий светодиод, подключённый к GPIO 2 (D4); на платах V2 (Amica) есть второй светодиод на D0. Эти светодиоды работают с инверсной логикой: загораются, когда на пине LOW, и гаснут при HIGH. В ядре Arduino константа LED_BUILTIN уже определена как 2:

C++ (Arduino IDE)
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}
Мусорные символы в мониторе порта после загрузки — это нормально: ESP8266 отправляет сообщения загрузки на скорости 74880 бод. Если выставить в мониторе порта 74880, можно прочитать причину сброса и режим загрузки, а твои собственные сообщения идут на скорости, выбранной в коде (например, 115200).

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

Wi-Fi — главная сила ESP8266. Скетч ниже подключает плату к домашней сети в режиме станции и выводит в монитор порта IP-адрес, выданный роутером, и уровень сигнала. Если подключиться за 20 секунд не удаётся, он перестаёт ждать и выводит предупреждение. Замени имя сети и пароль на свои и открой монитор порта на скорости 115200 бод:

C++ (Arduino IDE)
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Очень слабоеМожет вообще не подключиться; поднеси плату ближе к роутеру
ESP8266 подключается только к сетям 2,4 GHz. Если роутер раздаёт диапазоны 2,4 и 5 GHz под одним именем, а плата не подключается, обычно помогает дать диапазону 2,4 GHz отдельное имя сети. Корпоративные сети (WPA2-Enterprise) и гостевые сети со страницей входа в браузере без дополнительного кода работать не будут.

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

Теперь превратим NodeMCU в маленький веб-сервер. Подключи светодиод к пину D1 (GPIO 5) через резистор 220 Ω: длинная ножка светодиода идёт через резистор к D1, короткая — к GND. Для красного светодиода этот резистор даёт ток (3,3 V − 2 V) / 220 Ω ≈ 6 mA, что с запасом ниже предела пина; чтобы рассчитать номинал для своего светодиода, воспользуйся утилитой калькулятор резистора для светодиода. После загрузки открой адрес из монитора порта в браузере телефона, подключённого к той же сети Wi-Fi.

C++ (Arduino IDE)
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 символов, иначе сеть не создастся.

C++ (Arduino IDE)
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:

MicroPython
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-Fi802.11 b/g/n, 2,4 GHz802.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 и сторожевому таймеру
Если при загрузке возникают проблемы с подключением, сначала отключи плату от компьютера, убери всё, что подключено к D3, D4, D8 и RX, и попробуй снова. Модуль на этих пинах может помешать плате войти в режим загрузки при старте. Если подключать плату к USB-порту самого компьютера, а не через USB-хаб, обрывов из-за резкого потребления тока тоже становится меньше.

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
#103Новичок

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

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

4.7(37)
99
Мигание встроенным светодиодом ESP32
#106Новичок

Мигание встроенным светодиодом ESP32

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

4.8(29)
53
Подключение 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
mDNS на ESP32: доступ к устройству через bluegrays-esp.local (с экраном LCD)
#131Продвинутый
Premium

mDNS на ESP32: доступ к устройству через bluegrays-esp.local (с экраном LCD)

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

4.8(14)
23
Точное время из интернета через 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
Обновление ESP32 по воздуху (OTA): беспроводная установка прошивки (с экраном LCD)
#132Продвинутый
Premium

Обновление ESP32 по воздуху (OTA): беспроводная установка прошивки (с экраном LCD)

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

4.6(14)
22