ESP8266 это микроконтроллер китайской компании Espressif со встроенным Wi-Fi. Его программируют так же, как Arduino: на C++ в Arduino IDE, только с дополнительным пакетом плат. Чтобы начать, возьмите плату с USB-разъёмом (NodeMCU или Wemos D1 mini), добавьте в Arduino IDE адрес пакета ESP8266, установите платформу через «Менеджер плат», выберите плату и порт и залейте первый скетч.
Ниже вся цепочка по шагам: от выбора платы до веб-страницы с кнопкой, которая управляет светодиодом с телефона. Если Arduino IDE видите впервые, начните с основ программирования Arduino: синтаксис скетчей там тот же.
Что такое ESP8266 и что на нём собирают

Внутри чипа стоят 32-битный процессор Tensilica L106 и радиомодуль Wi-Fi 2,4 ГГц. Получается микроконтроллер, который сам подключается к роутеру, без отдельного сетевого модуля. Ключевые параметры из даташита Espressif:
| Параметр | Значение |
|---|---|
| Процессор | Tensilica L106, 32 бита, до 160 МГц |
| Wi-Fi | 802.11 b/g/n, 2,4 ГГц, режимы клиента и точки доступа |
| Выводы GPIO | 17 на самом чипе, на платах доступно меньше |
| АЦП | один канал, 10 бит |
| Питание | от 2,5 до 3,6 В |
| Ток в глубоком сне | около 20 мкА |
На ESP8266 собирают то, что должно отправлять данные в сеть или принимать команды по ней: датчик температуры с графиком в браузере, реле для лампы, метеостанцию, кормушку с уведомлением в мессенджер. Это и есть интернет вещей в домашнем масштабе.
В версии даташита 7.1 от ноября 2025 года Espressif перевела ESP8266EX в статус NRND, то есть «не рекомендуется для новых разработок». Для обучения и домашних проектов это не помеха: платы продаются, пакет для Arduino IDE работает. Но если собираете устройство на годы вперёд, посмотрите на ESP32.
Какую плату взять: ESP-01, NodeMCU или Wemos D1 mini
Сам чип ESP8266 почти никто не покупает отдельно. Берут модуль или плату для разработки, где чип уже распаян вместе с флеш-памятью и антенной. Новичку разница между ними важна сильнее, чем кажется.
| Плата | USB на плате | Для кого |
|---|---|---|
| NodeMCU 1.0 (ESP-12E) | есть | первая плата, макетирование на беспаечной макетке |
| Wemos D1 mini | есть | компактные устройства, много готовых плат расширения |
| ESP-01 / ESP-01S | нет | маленькие устройства с одной-двумя функциями, нужен USB-UART адаптер |
Программируются эти платы так же, как Arduino, поэтому для системного старта подходят и курсы по Arduino.
Для первой платы берите NodeMCU или D1 mini. Так советует и документация ядра ESP8266 для Arduino: со встроенным USB-UART конвертером меньше настроек, которые влияют на загрузку прошивки.
Для модулей без USB та же документация перечисляет три условия: достаточное питание, подтягивающие резисторы на GPIO0, GPIO15 и CH_PD и ручной перевод модуля в режим загрузчика. С ESP-01 к этому добавляется отдельный USB-UART адаптер. Хороший второй проект, но плохой первый.
Канал основателя Checkroi Вани Буявца3 700 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединитьсяКак добавить ESP8266 в Arduino IDE
Arduino IDE из коробки знает только платы Arduino. Поддержку ESP8266 добавляет пакет сообщества ESP8266 Community. Порядок из официальной инструкции по установке подходит для Arduino IDE 1.x и 2.x:
- Откройте окно настроек Arduino IDE. В английском интерфейсе это File → Preferences.
- В поле «Дополнительные ссылки для Менеджера плат» вставьте адрес
https://arduino.esp8266.com/stable/package_esp8266com_index.jsonи нажмите OK. Если там уже есть ссылка, например на ESP32, новую добавьте через запятую. - Откройте «Инструменты» → «Плата» → «Менеджер плат», в поиске наберите esp8266.
- Найдите платформу esp8266 by ESP8266 Community и нажмите «Установить». На октябрь 2026 года последняя версия 3.1.2.
- В меню «Инструменты» → «Плата» выберите свою: для NodeMCU это NodeMCU 1.0 (ESP-12E Module), для D1 mini — LOLIN(WEMOS) D1 R2 & mini.
- Подключите плату кабелем и выберите её порт в «Инструменты» → «Порт».
Сам пакет ESP8266 скачивается с GitHub и arduino.esp8266.com, а не с сайта arduino.cc. Из России arduino.cc часто отвечает ошибкой доступа. Установщик самой Arduino IDE лежит и в разделе релизов на GitHub.
Первая прошивка: мигаем встроенным светодиодом
Проверим, что IDE видит плату и прошивает её. Откройте новый скетч, вставьте код и нажмите «Загрузить на плату».
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, LOW); // светодиод загорается от LOW
delay(500);
digitalWrite(LED_BUILTIN, HIGH); // и гаснет от HIGH
delay(500);
}
Скетч написан на обычном C++ с функциями Arduino: setup() выполняется один раз при старте, loop() крутится по кругу. Если хотите разобраться в языке глубже, посмотрите курсы по C++.
Обратите внимание на LOW. На ESP8266 встроенный светодиод подключён «наоборот»: он загорается, когда на выводе низкий уровень. Об этом прямо сказано в комментариях к примеру Blink из пакета ESP8266. Если перепутать уровни, светодиод будет гореть ровно тогда, когда по коду должен гаснуть.
Константа LED_BUILTIN для NodeMCU и D1 mini указывает на GPIO2. При сборке под NodeMCU 1.0 компилятор показывает около 232 тысяч байт кода во флеш-памяти, хотя в скетче десяток строк: основной объём занимает системная часть пакета.
Как подключить ESP8266 к Wi-Fi
Библиотека ESP8266WiFi входит в пакет, скачивать её отдельно не нужно. Если компилятор пишет, что не находит ESP8266WiFi.h, значит платформа из предыдущего раздела не установлена или в меню выбрана плата Arduino, а не ESP8266.
#include <ESP8266WiFi.h>
const char* ssid = "ИмяСети";
const char* password = "пароль";
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("Подключаюсь");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Готово, адрес платы: ");
Serial.println(WiFi.localIP());
}
void loop() {
}
Замените имя сети и пароль на свои, загрузите скетч и откройте «Монитор порта» со скоростью 115200 бод. Пока плата подключается, бегут точки, потом появляется IP-адрес, который выдал роутер. Запишите его, он понадобится в следующем шаге.
ESP8266 работает только в сетях 2,4 ГГц. Если роутер раздаёт одно имя сети на двух диапазонах и плата не подключается, разведите диапазоны по разным именам в настройках роутера.
Строка WiFi.mode(WIFI_STA) явно переводит плату в режим клиента. В описании класса Station сказано, почему это полезно: если плата раньше работала точкой доступа, после WiFi.begin() она может остаться в смешанном режиме, где работают и клиент, и точка доступа.
Веб-сервер на ESP8266: кнопка в браузере
Теперь сделаем то, ради чего обычно берут ESP8266: страницу, которую открываешь с телефона и управляешь устройством. Библиотека ESP8266WebServer тоже уже в пакете.
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
const char* ssid = "ИмяСети";
const char* password = "пароль";
ESP8266WebServer server(80);
bool ledOn = false;
void sendPage() {
String html = "<meta charset='utf-8'><h1>Светодиод: ";
html += ledOn ? "горит" : "не горит";
html += "</h1><a href='/toggle'><button>Переключить</button></a>";
server.send(200, "text/html", html);
}
void toggle() {
ledOn = !ledOn;
digitalWrite(LED_BUILTIN, ledOn ? LOW : HIGH);
server.sendHeader("Location", "/");
server.send(303);
}
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
Serial.println(WiFi.localIP());
server.on("/", sendPage);
server.on("/toggle", toggle);
server.begin();
}
void loop() {
server.handleClient();
}
Откройте в браузере адрес из монитора порта, например http://192.168.1.50/. Телефон или ноутбук должны быть в той же сети, что и плата.
Как это работает:
server.on("/", sendPage)отдаёт страницу с текущим состоянием;- кнопка ведёт на
/toggle, который переключает светодиод и перенаправляет обратно на главную; server.handleClient()вloop()принимает запросы, поэтому в цикле не должно быть долгих задержек.
Вместо светодиода можно повесить модуль реле на свободный вывод и включать так настольную лампу. Из таких узлов и собирают умный дом, этому посвящены курсы по интернету вещей. Только реле берите с питанием и управлением от 3,3 В или с транзисторной развязкой, о напряжении ниже.
Как прошить ESP-01 через USB-UART адаптер
У ESP-01 нет USB, поэтому между модулем и компьютером ставят адаптер USB-UART. Требования к нему и схема подключения есть в разделе документации о платах, в описании Generic ESP8266 Module.
Адаптер должен работать с уровнем 3,3 В. Документация уточняет признак: на нём есть перемычка или переключатель 5 В / 3,3 В либо он выпущен только под 3,3 В. По документации должны работать адаптеры на микросхемах FT232RL, CP2102 и CH340G, а адаптеры на PL2303 известны тем, что не работают на macOS.
Минимальная схема только для прошивки:
| Вывод ESP-01 | Куда подключить |
|---|---|
| VCC | 3,3 В |
| GND | GND адаптера и источника питания |
| TX | RX адаптера |
| RX | TX адаптера |
| GPIO0 | GND на время прошивки |
| CH_PD (EN) | к 3,3 В через подтягивающий резистор |
| RST | RTS адаптера, если он выведен, иначе перезапускать питание вручную |
Чаще всего ломается на питании. По той же документации модулю нужно 3,3 В и не меньше 250 мА, а выход 3,3 В у большинства адаптеров столько не даёт. Надёжнее отдельный стабилизатор на 3,3 В с конденсаторами и общей землёй с адаптером. Читать такие схемы учат на старте пути инженера-электроника.
Дальше всё как с NodeMCU, только в «Инструменты» → «Плата» выбирайте Generic ESP8266 Module. После прошивки отключите GPIO0 от земли и перезапустите модуль, иначе он снова будет ждать загрузку.
Ещё одна особенность ESP-01: встроенный светодиод висит на GPIO1, а это вывод TX. Пример Blink из пакета прямо предупреждает: пока мигаете этим светодиодом, Serial.print() использовать нельзя.
Распиновка: надпись D4 на плате означает GPIO2

Главная путаница с ESP8266 в номерах выводов. На NodeMCU и D1 mini возле контактов напечатаны D0–D8, а у чипа свои номера GPIO. В коде можно писать и так и так: D4 и 2 означают один и тот же вывод. А вот голая цифра 4 — это уже GPIO4, то есть контакт D2.
| Надпись на плате | GPIO | Что учесть |
|---|---|---|
| D0 | 16 | нет прерываний, нет подтяжки к питанию |
| D1 | 5 | свободен, часто SCL для I²C |
| D2 | 4 | свободен, часто SDA для I²C |
| D3 | 0 | влияет на режим загрузки |
| D4 | 2 | встроенный светодиод, влияет на загрузку |
| D5–D7 | 14, 12, 13 | свободны, аппаратный SPI |
| D8 | 15 | при старте должен быть притянут к земле |
Соответствие взято из файла описания платы NodeMCU в пакете ESP8266, у D1 mini оно такое же. Ограничения по GPIO16 и подтяжкам описаны в справочнике ядра.
GPIO0, GPIO2 и GPIO15 чип проверяет при каждом включении и по ним решает, запускать ваш скетч или ждать новую прошивку. Повесите на D3, D4 или D8 кнопку или датчик, который тянет уровень не туда, и плата перестанет стартовать. Схема режимов есть в разделе о платах.
Ещё два ограничения касаются напряжения:
- Логика 3,3 В. По даташиту высокий уровень на входе не больше 3,6 В. Датчик с выходом 5 В подключайте через делитель или преобразователь уровней. Как их рассчитывать, разбирают на курсах по электронике и схемотехнике.
- Аналоговый вход A0. Голый чип измеряет от 0 до 1 В. На некоторых платах перед A0 стоит делитель, и тогда предел выше. Справочник ядра советует проверить: подайте 0,5 В, и если
analogRead(A0)вернёт около 512, значит предел 1 В и 3,3 В на этом входе могут повредить чип.
Можно ли программировать ESP8266 на Python
Можно, через MicroPython. Это облегчённый Python для микроконтроллеров, и у ESP8266 есть официальная прошивка. Вместо скетчей вы пишете на Python прямо в консоли платы или загружаете файлы main.py.
По руководству MicroPython порядок такой:
- Скачайте прошивку под свой объём флеш-памяти со страницы загрузки: стандартная сборка ESP8266_GENERIC рассчитана на платы с 2 МБ и больше, для плат с 1 МБ есть урезанный вариант FLASH_1M. На октябрь 2026 года последняя версия v1.29.0 от 24 августа.
- Поставьте утилиту esptool командой
pip install esptool. - Сотрите флеш и запишите прошивку, указав свой порт вместо
/dev/ttyUSB0(в Windows этоCOM3и подобные). - Подключитесь к плате терминалом на скорости 115200, появится приглашение Python.
esptool.py --port /dev/ttyUSB0 erase_flash
esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 ESP8266_GENERIC-20260824-v1.29.0.bin
Если запись падает с ошибкой, руководство советует снизить скорость до 115200. Мигание светодиодом на MicroPython выглядит так:
from machine import Pin
import time
led = Pin(2, Pin.OUT)
while True:
led.value(not led.value())
time.sleep(0.5)
Python удобнее для быстрых экспериментов, но памяти у ESP8266 мало: по описанию порта, всего около 96 КБ оперативной памяти, и часть занята системой. Для большого проекта с веб-интерфейсом C++ в Arduino IDE остаётся основным выбором. Если сам язык пока незнаком, начните с курсов по Python.
Частые ошибки и что с ними делать

Скетч не загружается: Failed to connect to ESP8266
Симптом: компиляция прошла, а на загрузке ошибка «Timed out waiting for packet header» или «espcomm_sync failed». Порядок проверки по разбору ошибок загрузки:
- Выбран не тот порт. Отключите плату, посмотрите, какой порт пропал из списка, подключите снова.
- Выбрана не та плата. От неё зависит, как IDE переводит чип в режим загрузчика.
- Порта нет вообще. Проверьте кабель: многие кабели из комплекта к зарядкам передают только питание. Потом поставьте драйвер USB-моста. Его название напечатано на микросхеме у разъёма, на дешёвых платах это обычно CH340, драйвер есть на сайте производителя WCH.
- У ESP-01 без автосброса: зажмите GPIO0 на землю и перезапустите модуль перед загрузкой.
Плата сама перезагружается
Причин обычно две. Первая связана с питанием. По даташиту чип в среднем потребляет 80 мА, а при передаче по Wi-Fi до 170 мА. Инструкция о сбоях считает, что для плат с USB обычно хватает USB-хаба со стандартными 0,5 А, к которому не подключено ничего другого.
Вторая причина в сторожевом таймере. Если код надолго застревает в цикле без пауз, Wi-Fi-стек не получает времени, и чип перезагружается сам. Справочник ядра для циклов дольше 50 мс предлагает добавить вызов delay(), чтобы Wi-Fi-стек успевал работать.
Решение: в долгих циклах вставляйте delay(1) или yield(), а перед поиском причины откройте монитор порта и прочитайте, что плата печатает в момент перезагрузки: там видно, сработал сторожевой таймер или исключение.
Wi-Fi отваливается, когда читаю датчик
Частый вызов analogRead() мешает работе Wi-Fi, об этом в справочнике есть отдельное предупреждение. Читайте A0 не чаще нескольких раз в секунду.
Датчик или модуль сгорел
Частая причина того, что плата больше не отвечает, это пять вольт на цифровом входе. Перед подключением модуля посмотрите, какой у него уровень сигнала, и при 5 В ставьте преобразователь уровней.
ESP8266 или ESP32: что брать
ESP32 следующее поколение микроконтроллеров Espressif. Кроме Wi-Fi у него есть Bluetooth, и статуса NRND у этой линейки нет.
| Задача | Что взять |
|---|---|
| Учебные проекты, реле, датчик с веб-страницей | ESP8266 хватит, платы дешевле |
| Нужен Bluetooth или много выводов | ESP32 |
| Устройство в серию или на долгие годы | ESP32 или новее |
Навыки переносятся почти целиком: Arduino IDE та же, код Wi-Fi и веб-сервера отличается в основном именами библиотек. Начать на ESP8266 и потом перейти на ESP32 вполне нормально.
Где освоить программирование микроконтроллеров системно
Мигание светодиодом и страница с кнопкой только первые шаги. Дальше начинаются датчики, протокол MQTT, обновление прошивки по воздуху, экономия батареи и разводка своей платы. Из хобби это вырастает в профессию: о ней подробно в материале о программисте микроконтроллеров и в плане как стать IoT-разработчиком.
Подборка курсов по Arduino ниже, а шире смотрите раздел программирование микроконтроллеров.
| Курс | Школа | Стоимость со скидкой | В рассрочку | Длительность | Обзор курса от Checkroi |
|---|---|---|---|---|---|
| Профессия Инженер умного дома Перейти на сайт курса | 173 055 ₽ | 5082 ₽/мес. | 15 месяцев | Обзор курса | |
| Робототехника Перейти на сайт курса | 19 900 ₽ | 1658 ₽/мес. | 3 месяца | Обзор курса | |
| Преподавание робототехники в системе общего и дополнительного образования Перейти на сайт курса | 7000 ₽ | 1750 ₽/мес. | 5 недель | Обзор курса | |
| C++ для робототехников Перейти на сайт курса | 30 294 ₽ | - | 1 месяц | Обзор курса | |
| Электроника и схемотехника Перейти на сайт курса | 55 000 ₽ | - | 1 месяц | Обзор курса |
Больше программ — в полном каталоге курсов по Arduino




