Загрузка данных
#include <SoftwareSerial.h>
// D2 = RX Arduino (к TX ESP-01)
// D3 = TX Arduino (к RX ESP-01 через делитель)
SoftwareSerial espSerial(2, 3);
const int LED_PIN = 13; // Встроенный светодиод на плате Arduino
// Функция для отправки AT-команд и вывода ответа в консоль ПК
String sendATCommand(String command, const int timeout) {
String response = "";
espSerial.print(command);
long int time = millis();
while ((time + timeout) > millis()) {
while (espSerial.available()) {
char c = espSerial.read();
response += c;
}
}
Serial.print(response); // Печать ответа ESP-01 в Монитор порта
return response;
}
void setup() {
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
Serial.begin(9600);
espSerial.begin(9600); // Если ESP настроен на 115200, смените значение здесь
Serial.println(F("======================================="));
Serial.println(F(" Запуск Wi-Fi сервера Arduino + ESP-01 "));
Serial.println(F("======================================="));
// Инициализация и настройка Wi-Fi модуля
sendATCommand("AT+RST\r\n", 2000); // Перезагрузка
sendATCommand("AT+CWMODE=2\r\n", 1000); // Режим точки доступа (Access Point)
sendATCommand("AT+CWSAP=\"ESP_WiFi\",\"12345678\",1,3\r\n", 2000); // Имя сети: ESP_WiFi, Пароль: 12345678
sendATCommand("AT+CIPMUX=1\r\n", 1000); // Включение множественных подключений
sendATCommand("AT+CIPSERVER=1,80\r\n", 1000); // Запуск серверной службы на 80 порту
Serial.println(F("\n--- Модуль готов к работе! ---"));
Serial.println(F("1. Подключитесь с телефона к Wi-Fi: ESP_WiFi (пароль: 12345678)"));
Serial.println(F("2. Перейдите в браузере по адресу: http://192.168.4.1\n"));
}
void loop() {
if (espSerial.available()) {
// Проверяем наличие входящего HTTP-запроса
if (espSerial.find("+IPD,")) {
delay(300); // Пауза для сбора полного пакета данных
int connectionId = espSerial.read() - '0'; // Номер активного соединения (0-4)
String request = "";
while (espSerial.available()) {
char c = espSerial.read();
request += c;
}
// Логика управления светодиодом по клику
if (request.indexOf("GET /LED=ON") != -1) {
digitalWrite(LED_PIN, HIGH);
Serial.println(F("Команда: Включить светодиод"));
} else if (request.indexOf("GET /LED=OFF") != -1) {
digitalWrite(LED_PIN, LOW);
Serial.println(F("Команда: Выключить светодиод"));
}
// Формирование HTML-страницы управления
String html = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n";
html += "<!DOCTYPE html><html><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">";
html += "<style>body{font-family:sans-serif;text-align:center;padding-top:40px;}";
html += ".btn{display:inline-block;padding:15px 25px;font-size:20px;color:#fff;text-decoration:none;border-radius:8px;margin:10px;}";
html += ".on{background-color:#28a745;} .off{background-color:#dc3545;}</style></head><body>";
html += "<h2>Управление Arduino по Wi-Fi</h2>";
html += "<a href=\"/LED=ON\" class=\"btn on\">ВКЛЮЧИТЬ LED</a>";
html += "<a href=\"/LED=OFF\" class=\"btn off\">ВЫКЛЮЧИТЬ LED</a>";
html += "</body></html>";
// Отправка ответа клиенту
String sendCmd = "AT+CIPSEND=" + String(connectionId) + "," + String(html.length()) + "\r\n";
sendATCommand(sendCmd, 1000);
sendATCommand(html, 1000);
// Закрытие соединения после отправки
String closeCmd = "AT+CIPCLOSE=" + String(connectionId) + "\r\n";
sendATCommand(closeCmd, 1000);
}
}
}