ESP8266 запрос на чтение из локальной базы данных

#esp8266 #arduino-esp8266

#esp8266 #arduino-esp8266

Вопрос:

Я не был экспертом в Nodemcu или IOT. Я пытаюсь прочитать данные из базы данных с помощью запроса Nodemcu; это работает, но показывает, что я не хочу получать.

Это код:

 
#include <ESP8266WiFi.h>

const char* ssid     = ".....";
const char* password = ".....";
const char* host = "......";

WiFiClient client;
const int httpPort = 8000;
String url;
unsigned long timeout;
  
void setup() {
  Serial.begin(9600);
  delay(10);

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

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

  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}


void loop() {
  
  Serial.print("connecting to ");
  Serial.println(host);

  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    //return;
  }

  url = "/request/55";
  
  Serial.print("Requesting URL: ");
  Serial.println(url);

  // This will send the request to the server
  client.print(String("GET ")   url   " HTTP/1.1rn"  
               "Host: "   host   "rn"   
               "Connection: closernrn");
  timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) {
      Serial.println(">>> Client Timeout !");
      client.stop();
      return;
    }
  }

// Read all the lines of the reply from server and print them to Serial
  while(client.available()) {
      String a;
      a = client.readString();
      Serial.println(a);
  }

  Serial.println();
  Serial.println("closing connection");
  Serial.println();
}

 

URL: /request/55 только эхо-значение «12», я пытаюсь использовать client.readString() , и это результат :

результат, который я получил

Это работа, но я просто хочу только это значение «12». Как я могу его получить?

Ответ №1:

Вы сами внедряете протокол HTTP. Вот почему вы получаете HTTP-заголовки обратно. Вам не нужно этого делать и, вероятно, не следует.

Используйте ESP8266HTTPClient библиотеку. Он правильно реализует HTTP, так что вам не нужно. Вы можете найти примеры на https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266HTTPClient/examples

Ответ №2:

Я нашел, как получить данные из базы данных, сначала вам нужно изменить результат из URL. В этом условии я изменяю результат «12» на «data = 12», затем на Nodemcu:

 while (client.available()) {
  String a;
  if (client.find("data=") {
    a = client.parseInt(a);
    Serial.println(a);
  }
}
 

Это результат:

результат в последовательном мониторе