Добавить в избранное

ESP8266 и Arduino: Wi-Fi для ваших проектов — AT-команды и прошивка

Чтение ≈ 4 мин

Два подхода к ESP8266: как Wi-Fi-модем для Arduino через AT-команды по UART и как самостоятельный микроконтроллер с Arduino IDE. Подключение 3.3 В, AT-прошивка, HTTP-запросы и выбор пути для проекта.

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).
Поделиться
Понравился материал?

Комментарии

Добавить комментарий