Получение данных в последовательном порту ESP8266

Я отправил данные на HTTP-сервер (я создал сервер с ESP8266), и сервер полностью передает данные.

Но проблема в том, что когда я обновляю веб-браузер, данные удаляются.

Я не знаю, как сделать резервную копию своих данных, и каждый раз, когда я обновляю браузер, я вижу старые данные.

Вот мой код:

#include <ESP8266WiFi.h>

const char* ssid = "Ashnay-E-Aval";
const char* password = "8841525252";

WiFiServer server(80);

void setup() {

  Serial.begin(115200);
  delay(10);

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  server.begin();
  Serial.println("Server started");

  Serial.println(WiFi.localIP());
}

void loop() {

  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  Serial.println("new client");
  while (!client.available()) {
    delay(1);
  }

  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();
  String s;
  String str=Serial.readStringUntil('\n');


  s+= "<!DOCTYPE html>";

  s+= "<html>";

  s+= "<body>";

  s+= "<h1>My First Heading</h1>";

  s+= "<p>My "+STR+".</p>";

  s+= "</body>";

  s+= "</html>";

  str=""; 
  client.print(s);
  delay(1);
  Serial.println("Client disconnected");
}

person amiroruji72    schedule 08.09.2017    source источник
comment
Какие данные? У вас есть какие-нибудь формы на вашем сайте? Покажи код.   -  person Defozo    schedule 08.09.2017
comment
Привет, нет, я отправляю строку из STM32 в свой модуль ESP8266, и модуль полностью получает данные, проблема в том, что при обновлении данных браузера были удалены. Я обновил код в вопросе   -  person amiroruji72    schedule 08.09.2017
comment
Код даже не компилируется.   -  person gre_gor    schedule 08.09.2017


Ответы (1)


Если я вас правильно понял, ваш ESP8266 получает некоторые данные (строку) через Serial от STM32. ESP8266 может получать или не получать новые данные при каждом выполнении основного цикла. Вы хотите обновить свой веб-сайт, когда на вашем STM32 появятся новые данные (новая строка). Если ничего не отправлено, вы хотите отобразить старые данные (старую строку).

Для этого вам необходимо:

  1. Объявите глобальную переменную, чтобы она не воссоздалась в каждом цикле.
  2. Сравните эту переменную с новыми данными из readStringUntil().
  3. Если новые данные не пустые (STM32 что-то отправил), присвойте глобальной переменной новые данные.
  4. Используйте глобальную переменную для отображения данных на веб-сайте.

Код:

#include <ESP8266WiFi.h>

const char* ssid = "Ashnay-E-Aval";
const char* password = "8841525252";

WiFiServer server(80);

String str = "";

void setup() {

  Serial.begin(115200);
  delay(10);

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  server.begin();
  Serial.println("Server started");

  Serial.println(WiFi.localIP());
}

void loop() {

  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  Serial.println("new client");
  while (!client.available()) {
    delay(1);
  }

  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();
  String s;
  String newStr = Serial.readStringUntil('\n');
  if (!newStr.empty()) {
      str = newStr;
  }

  s+= "<!DOCTYPE html>";

  s+= "<html>";

  s+= "<body>";

  s+= "<h1>My First Heading</h1>";

  s+= "<p>My "+STR+".</p>";

  s+= "</body>";

  s+= "</html>";

str=""; 
  client.print(s);
  delay(1);
  Serial.println("Client disconnected");
}
person Defozo    schedule 08.09.2017