2017-09-08 5 views
0

데이터를 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"); 
} 
+0

가 어떤 데이터를? 웹 사이트에 양식이 있습니까? 코드를 보여주세요. – Defozo

+0

안녕하세요. STM32에서 ESP8266 모듈 및 모듈에 문자열을 보내고 있습니다. 데이터를 완전히 받는데 문제가 있습니다. 브라우저 데이터를 새로 고침하면 제거되었습니다. 질문에 코드가 갱신되었습니다. – amiroruji72

+0

코드가 컴파일되지 않습니다. . –

답변

1

, 당신의 ESP8266는 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"); 
}