Создание веб-сервера на Wemos D1 mini pro

Я пытаюсь установить веб-сервер на свой Wemos D1 mini pro. Я использую этот пример для кода Arduino: https://github.com/wemos/Arduino_D1/blob/master/doc/ esp8266wifi/server-examples.rst

#include <ESP8266WiFi.h>

const char* ssid = "GL-AR300M-ceb";
const char* password = "********";

WiFiServer server(80);

void setup()
{
  Serial.begin(115200);
  Serial.println();

  Serial.printf("Connecting to %s ", ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println(" connected");

  server.begin();
  Serial.printf("Web server started, open %s in a web browser\n", WiFi.localIP().toString().c_str());
}


// подготавливаем веб-страницу для отправки клиенту (веб-браузеру)
String prepareHtmlPage()
{
  String htmlPage =
     String("HTTP/1.1 200 OK\r\n") +
            "Content-Type: text/html\r\n" +
            "Connection: close\r\n" +  // соединение будет закрыто после завершения ответа
            "Refresh: 5\r\n" +  // автоматически обновлять страницу каждые 5 секунд
            "\r\n" +
            "<!DOCTYPE HTML>" +
            "<html>" +
            "Analog input:  " + String(analogRead(A0)) +
            "</html>" +
            "\r\n";
  return htmlPage;
}


void loop()
{
  WiFiClient client = server.available();
  // ждем подключения клиента (веб-браузера)
  if (client)
  {
    Serial.println("\n[Client connected]");
    while (client.connected())
    {
      // читать построчно, что запрашивает клиент (веб-браузер)
      if (client.available())
      {
        String line = client.readStringUntil('\r');
        Serial.print(line);
        // ждем окончания запроса клиента, отмеченного пустой строкой
        if (line.length() == 1 && line[0] == '\n')
        {
          client.println(prepareHtmlPage());
          break;
        }
      }
    }
    delay(1); // дать веб-браузеру время для получения данных

    // закрыть соединение:
    client.stop();
    Serial.println("[Client disonnected]");
  }
}

Он загружается нормально, и когда я открываю последовательный монитор, получаю следующее:

Подключение к GL-AR300M-ceb . связанный Веб-сервер запущен, откройте 192.168.8.119 в веб-браузере

Когда я перехожу к IP-адресу, который он дает в мониторе, я вижу только пустую страницу. Я также не могу проверить элемент, поэтому я думаю, что он не загружает часть HTML.
Когда я изменяю код следующим образом:

if (client.available())  
{  
//        String line = client.readStringUntil('\r');  
//        Serial.print(line);  
//        // wait for end of client's request, that is marked with an empty line  
//        if (line.length() == 1 && line[0] == '\n')  
//        {  
//          client.println(prepareHtmlPage());  
//          break;  
//        }  
          client.println(prepareHtmlPage());  
      }  

тогда я вижу это
скриншот кода в виде обычного текста в браузере

И когда я добавляю разрыв в код вот так:

client.println(prepareHtmlPage());  
break;  

в коде я снова получаю пустую страницу.

Кто-нибудь знает, в чем может быть проблема?

, 👍0

Обсуждение

Почему бы не использовать гораздо более простые примеры ESP8266WebServer, которые поставляются с ядром?, @Majenko

О, спасибо. Честно говоря, я еще не знал о них! Позвольте мне попробовать HelloServer., @E. Bodt

Это гораздо более простой интерфейс, чем попытка реализовать HTTP с нуля., @Majenko

Да! Я заставил его работать! Спасибо за этот совет!, @E. Bodt

Я не мастер. Я не верю, что когда-либо происходит возврат каретки при запросе веб-страницы., @Vick79


1 ответ


1

вы должны использовать пример «Advanced Webserver», предоставляемый библиотеками ESP8266 в вашей Arduino IDE. Веб-сервер использует такие обратные вызовы, как

server.on ( "/", handleRoot );
server.on ( "/test.svg", drawGraph );

и так далее. Затем вы можете использовать эти дескрипторы, чтобы вернуть html-страницу в ваш браузер, например

server.send(200, "text/plain", message);       //Ответ на HTTP-запрос

Обратите внимание, как функция возвращает в ваш браузер код http 200, который является обязательным для отображения вашей веб-страницы!

,