Загрузка данных


#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);
    }
  }
}