ESP8266 — два в одном
ESP8266 — это Wi-Fi чип с полноценным микроконтроллером: 80 МГц, до 4 МБ флеша, GPIO. Его используют двумя способами:
- Как Wi-Fi-модем для Arduino: ESP отвечает на AT-команды по UART, а ваша Uno остаётся главным процессором.
- Как самостоятельный МК: прошиваете его прямо из Arduino IDE — без Uno вообще. Быстрее, больше памяти, но только 3.3 В логика и 1 аналоговый вход.
Второй путь сейчас популярнее — ESP сам полноценнее Uno. Но AT-режим живёт в старых проектах и когда Uno уже собрана.
Подключение как модема (AT-режим)
Arduino RX ── TX ESP8266
Arduino TX ── делитель 5В→3.3В ── RX ESP8266 (!!! 3.3В логика)
Arduino 3.3V* ── VCC ESP (*слабо — лучше отдельный 3.3В источник)
GND ── GND
CH_PD (EN) ── 3.3V (иначе чип спит)
Три критичных момента:
- ESP питается от 3.3 В — не от 5 В!
- TX Arduino 5 В → RX ESP нужен делитель напряжения (1 кОм + 2 кОм) — иначе сожжёте вход ESP.
- Пин 3.3V на Uno отдаёт всего 50 мА — ESP в пике хочет 300 мА. Для стабильной работы — внешний стабилизатор AMS1117 или отдельное питание.
AT-команды: базовый набор
AT // тест связи — ответит OK
AT+CWMODE=1 // режим станции (клиент Wi-Fi)
AT+CWJAP="SSID","pass" // подключиться к сети
AT+CIFSR // мой IP
AT+CIPSTART="TCP","93.184.216.34",80 // TCP-соединение
AT+CIPSEND=42 // отправить 42 байта
Через Serial Arduino:
#include <SoftwareSerial.h>
SoftwareSerial esp(2, 3); // RX, TX (аппаратный Serial занят USB)
void sendAT(const char* cmd, int wait = 1000) {
esp.println(cmd);
delay(wait);
while (esp.available()) Serial.write(esp.read());
}
void setup() {
Serial.begin(9600);
esp.begin(115200); // у ESP8266 AT — 115200 по умолчанию
sendAT("AT");
sendAT("AT+CWMODE=1");
sendAT("AT+CWJAP=\"MyWiFi\",\"password\"", 5000);
}
Недостатки AT-режима: программный UART нестабилен на 115200 (SoftwareSerial лучше снизить до 9600 через AT+UART_DEF), парсинг ответов утомителен, всё медленно.
ESP8266 как самостоятельная плата
Современный путь: ставите в Arduino IDE поддержку ESP8266 (добавляете URL в настройки), выбираете плату «NodeMCU 1.0» или «Generic ESP8266» и пишете обычный скетч — с pinMode, analogRead, WiFi:
#include <ESP8266WiFi.h>
void setup() {
Serial.begin(115200);
WiFi.begin("SSID", "password");
while (WiFi.status() != WL_CONNECTED) {
delay(500); Serial.print(".");
}
Serial.println(WiFi.localIP()); // наш IP
}
HTTP-запрос к API:
#include <ESP8266HTTPClient.h>
#include <ESP8266WiFi.h>
WiFiClient client;
HTTPClient http;
http.begin(client, "http://api.example.com/data");
int code = http.GET();
if (code == 200) Serial.println(http.getString());
http.end();
На платах ESP-01 мало GPIO, на NodeMCU/Wemos D1 mini — полноценные пины. Логика 3.3 В — платы уровня для 5-вольтовых датчиков.
Какой путь выбрать
- Уже есть проект на Uno и нужен Wi-Fi — AT-модем или UART-мост.
- Новый проект с Wi-Fi — берите ESP8266 или ESP32 как главный чип.
- Много аналоговых входов — Uno удобнее; у ESP всего один ADC.
- Больше памяти и скорости — ESP выигрывает у Uno по всем параметрам.
Типичные проблемы
- ESP не отвечает: CH_PD не подтянут к 3.3V, перепутаны RX/TX, скорость не та (115200 vs 9600).
- Постоянные перезагрузки: не хватает тока 3.3V — отдельный источник.
- AT работает, HTTP падает: программный UART на 115200 нестабилен — снизьте скорость или берите аппаратный Serial.
- 5 В на RX убил ESP: делитель обязателен.
Итог
ESP8266 — две роли: AT-модем для готовой Arduino-схемы (просто, но медленно и капризно) и полноценный микроконтроллер с Wi-Fi (мощно и правильно). Для новых проектов — второй путь: Arduino IDE, ESP8266WiFi, HTTPClient и все возможности чипа без посредников.
ESP8266 как самостоятельная плата
Установите ядро ESP8266 в Arduino IDE (URL менеджера плат http://arduino.esp8266.com/stable/package_esp8266com_index.json) — и пишете те же скетчи, что на Uno, только с Wi-Fi и большими ресурсами: 80–160 МГц, 80 КБ RAM, 4 МБ flash.
#include <ESP8266WiFi.h>
WiFi.begin("SSID", "pass");
while (WiFi.status() != WL_CONNECTED) delay(500);
Serial.println(WiFi.localIP());
Пины ESP8266 — отличия от Uno
- Логика 3.3 В — нельзя 5 В на пины.
- Аналоговый вход один — A0, диапазон 0–1 В (на NodeMCU с делителем до 3.3 В).
- GPIO0, GPIO2, GPIO15 — страпы загрузки: нельзя тянуть в неправильное состояние при старте.
- GPIO16 (D0 на NodeMCU) — без прерываний и ШИМ.
AT-прошивка для связки с Uno
Если нужен ESP8266 только как модем к Uno — прошивка AT-команд уже на большинстве модулей:
SoftwareSerial esp(2, 3); // RX, TX к модулю
esp.begin(115200);
esp.println("AT+CWMODE=1"); // режим станции
esp.println("AT+CWJAP=\"SSID\",\"pass\""); // подключение к Wi-Fi
Через AT-команды открываете TCP-соединения и шлёте HTTP-запросы. Работает, но медленно и капризно — для реальных проектов проще писать код прямо на ESP.
Популярные платы
- ESP-01 — минималистичный модуль, 2 GPIO, для AT-модема.
- NodeMCU v2/v3 — полноценная плата с USB, всеми пинами, стабилизатором.
- Wemos D1 mini — компактная, 11 GPIO, удобна для проектов.
Применение
- Wi-Fi-удлинитель для Arduino Uno (AT-режим).
- Датчик температуры, шлющий данные на ThingSpeak/Blynk.
- Умная розетка — реле + ESP8266 + веб-интерфейс.
- Шлюз для устройств без Wi-Fi.
Частые проблемы
- Не прошивается: GPIO0 не на GND при старте — режим загрузки.
- Сбрасывается: мало питания — ESP8266 жрёт до 300 мА, стабилизатор 3.3 В должен выдать.
- Не видит сеть: 2.4 ГГц только — 5 ГГц Wi-Fi не поддерживается.
- Мусор в порту: скорости не совпадают (115200 для AT по умолчанию).
Полный пример: датчик на ESP8266 с веб-сервером
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <DHT.h>
ESP8266WebServer server(80);
DHT dht(D4, DHT22);
void setup() {
dht.begin();
WiFi.begin("SSID", "pass");
while (WiFi.status() != WL_CONNECTED) delay(500);
server.on("/", []() {
float t = dht.readTemperature();
server.send(200, "text/html",
"<h1>T=" + String(t,1) + "°C</h1>");
});
server.begin();
}
void loop() { server.handleClient(); }
Пины ESP8266 — отличия от Uno
- Логика 3.3 В — нельзя 5 В на пины.
- Аналоговый вход один — A0, 0–1 В (на NodeMCU с делителем до 3.3 В).
- GPIO0, GPIO2, GPIO15 — страпы загрузки.
- GPIO16 — без прерываний и ШИМ.
Популярные платы
- ESP-01 — минималистичный, 2 GPIO, для AT-модема.
- NodeMCU v2/v3 — полноценная плата с USB.
- Wemos D1 mini — компактная, 11 GPIO.
Частые ошибки
- Не прошивается: GPIO0 не на GND при старте.
- Сбрасывается: мало питания — до 300 мА, стабилизатор 3.3В должен выдать.
- Не видит сеть: только 2.4 ГГц Wi-Fi.
- Мусор в порту: скорости не совпадают (115200 для AT).