Представьте себе: плата, как Arduino, но со встроенным Wi-Fi, и стоит как чашка кофе.
А теперь знайте — это реальность. И это любовь с первого запуска. 💘
🤖 Что это за устройство?
Это NodeMCU ESP8266 V3 — микроконтроллер с Wi-Fi, построенный на чипе ESP8266 ESP-12E.
С ним вы сможете создать настоящие интернет-проекты: умный дом, уведомления, управление устройствами через браузер и многое другое.
На борту уже есть:
- USB-интерфейс через чип CH340
- Питание от microUSB
- Пины, совместимые с Arduino
- И главное — встроенный Wi-Fi
🔌 Первый проект: веб-кнопка для управления светодиодом
Создадим простейший веб-сервер на ESP8266, который позволит вам управлять светодиодом через браузер.
Этот проект — отличный способ почувствовать магию IoT.
📦 Что понадобится:
- Плата NodeMCU ESP8266
- microUSB кабель
- Arduino IDE
- Wi-Fi сеть
- Любой браузер
⚙️ Подготовка Arduino IDE:
1. Откройте Arduino IDE → Файл → Параметры
2. Вставьте в поле дополнительных ссылок:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
3. Перейдите в Инструменты → Менеджер плат, найдите и установите esp8266 by ESP8266 Community
4. Выберите плату: NodeMCU 1.0 (ESP-12E Module)
5. Установите скорость порта: 115200
💻 Пример кода:
#include <ESP8266WiFi.h>
const char* ssid = "ВАШ_SSID";
const char* password = "ВАШ_ПАРОЛЬ";
WiFiServer server(80);
int ledPin = D1;
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("IP адрес: ");
Serial.println(WiFi.localIP());
server.begin();
}
void loop() {
WiFiClient client = server.available();
if (!client) return;
while (!client.available()) {
delay(1);
}
String request = client.readStringUntil('\r');
client.flush();
if (request.indexOf("/on") != -1) {
digitalWrite(ledPin, HIGH);
} else if (request.indexOf("/off") != -1) {
digitalWrite(ledPin, LOW);
}
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("");
client.println("<h1>ESP8266 Web Server</h1>");
client.println("<p><a href=\"/on\">On</a></p>");
client.println("<p><a href=\"/off\">Off</a></p>");
}
🧠 Что делает этот код?
- Подключается к вашей Wi-Fi сети
- Запускает веб-сервер на порту 80
- Позволяет управлять светодиодом через браузер (по IP, например http://192.168.1.42)
📖 Разбор кода построчно
🔹 Подключение библиотеки
#include <ESP8266WiFi.h>
📦 Подключаем библиотеку Wi-Fi для ESP8266. Она нужна для подключения к сети, запуска сервера и работы с интернетом.
🔹 Настройки Wi-Fi
const char* ssid = "ВАШ_SSID";
const char* password = "ВАШ_ПАРОЛЬ";
🔐 Замените на имя вашей Wi-Fi сети и пароль. Эти данные ESP использует для подключения к роутеру.
🔹 Запуск веб-сервера
WiFiServer server(80);
🌐 Создаём веб-сервер на порту 80 — это стандартный HTTP-порт. По сути, это как ваш личный мини-сайт.
🔹 Указываем пин светодиода
int ledPin = D1;
💡 Указываем, к какому пину подключён светодиод. На NodeMCU пины обозначаются D0, D1, D2 и т. д. — проще, чем номера GPIO.
🔹 Настройка платы
void setup() {
⚙️ Всё, что запускается при старте платы — пишем здесь.
Serial.begin(115200);
🖨️ Включаем монитор порта. Можно будет читать отладочную информацию (например, IP-адрес платы).
pinMode(ledPin, OUTPUT);
💡 Устанавливаем режим работы пина: светодиод — это выход (OUTPUT), а не вход.
WiFi.begin(ssid, password);
📶 Пытаемся подключиться к Wi-Fi. Это как если бы вы подключались со смартфона к домашней сети.
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
🔄 Ждём, пока подключение не установится. Каждые полсекунды выводим точку — чтобы видеть, что всё работает.
Serial.println("");
Serial.print("IP адрес: ");
Serial.println(WiFi.localIP());
🌐 Когда Wi-Fi подключён — выводим IP-адрес платы. Вы по нему сможете зайти на веб-страницу.
server.begin();
🚀 Запускаем веб-сервер. Теперь он слушает входящие запросы.
🔄 Основной цикл
void loop() {
♻️ Всё, что будет повторяться бесконечно, находится здесь.
WiFiClient client = server.available();
if (!client) return;
👂 Проверяем, подключился ли кто-нибудь к веб-серверу. Если нет — возвращаемся и ждём снова.
while (!client.available()) {
delay(1);
}
📡 Ждём, пока клиент (браузер) пришлёт данные — например, нажмёт на ссылку.
String request = client.readStringUntil('\r');
client.flush();
📨 Читаем, что именно запросил браузер (адрес, параметры и т.п.). Очищаем входящий поток.
if (request.indexOf("/on") != -1) {
digitalWrite(ledPin, HIGH);
}
🔘 Если пользователь зашёл на адрес .../on, включаем светодиод.
else if (request.indexOf("/off") != -1) {
digitalWrite(ledPin, LOW);
}
🔌 Если пользователь зашёл на адрес .../off, выключаем светодиод.
📤 Отправляем ответ браузеру:
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("");
🧾 Это "шапка" веб-страницы. Сообщаем браузеру, что всё прошло успешно и мы отправим HTML.
client.println("<h1>ESP8266 Web Server</h1>");
client.println("<p><a href=\"/on\">On</a></p>");
client.println("<p><a href=\"/off\">Off</a></p>");
🌐 HTML-страница, которую пользователь увидит в браузере. Две ссылки — на включение и выключение светодиода.
✅ Всё работает!
Открываете IP в браузере (например, http://192.168.1.42) — и управляете светом через Wi-Fi.