簡體   English   中英

ESP8266 http GET 請求在串行監視器中不顯示任何值

[英]ESP8266 http GET request don't show any value in serial monitor

我在本地服務器的 MySQL 數據庫中有一個表,我設法使用 PHP 腳本來回顯該值。 這是 PHP 腳本(我將其命名為 get.php,它直接位於我的 xammp 中的 htdocs 文件夾中)。

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mydb";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT reading FROM myread";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo $row["reading"]."<br>";
    }
} else {
    echo "0 results";
}
$conn->close();
?>

我還嘗試使用以下代碼將該數據獲取到 esp8266

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ESP8266HTTPClient.h>

int status = WL_IDLE_STATUS;
char server[] = "112.135.74.254";
char ssid[] = "MYWIFI";
char pass[] = "123654MY";
const int httpPort = 80;
float line;
float mililine;

WiFiClient client;

void setup() {
  Serial.begin(9600);

  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to Network named: ");
    Serial.println(ssid);
    status = WiFi.begin(ssid, pass);
    delay(10000);
  }

  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());
  IPAddress ip = WiFi.localIP();
  IPAddress gateway = WiFi.gatewayIP();
  Serial.print("IP Address: ");
  Serial.println(ip);


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


  String url = "/get.php";
  Serial.print("requesting URL: ");
  Serial.println(url);

  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + server + "\r\n" +
               "User-Agent: BuildFailureDetectorESP8266\r\n" +
               "Connection: close\r\n\r\n");



Serial.println("request sent");
  while (client.connected()) {
  String  line = client.readStringUntil('\n');
    if (line == "\r") {
      Serial.println("headers received");
      break;
    }
  }
  Serial.println("reply was:");
  Serial.println("==========");
  Serial.println(line);
  Serial.println("==========");
  Serial.println("closing connection");


 mililine= line * 0.001;
 Serial.println("Final value is - ");
 Serial.println(mililine);

}
void loop() {

}

但問題是甚至我的數據庫表上都有一個值(該值是 55.25,我的意思是它也有小數位) 串行監視器只顯示 output 為零 這是 Arduino 串行監視器 Z78E6221F6393D1356681CE6DZ

⸮_⸮⸮=s⸮⸮Attempting to connect to Network named: MYWIFI
Attempting to connect to Network named: MYWIFI
Attempting to connect to Network named: MYWIFI
SSID: MYWIFI
IP Address: 192.168.1.102
requesting URL: /get.php
request sent
headers received
reply was:
==========
0.00
==========
closing connection
Final value is - 
0.00

當我在瀏覽器中運行 get.php 腳本時,它會顯示值PHP 腳本會在瀏覽器中顯示值 所以我需要把這個顯示值送到 Arduino 串行監視器。 正如我上面提到的,它顯示零而不是這個值。任何幫助,拜托???

我修改了您的代碼以使用 char arrays 而不是 String class 並更改了解碼邏輯。 不過它可能有缺陷,因為我無法測試您的腳本的邏輯。如果它沒有按照您的意願執行,請取消注釋 getDebug() 並評論 getData() 上傳並發布結果(以 ==== DEBUG ==== 開頭) 作為對您問題的編輯。如果您收到緩沖區大小錯誤,則將 BUFFERSIZE 的數量加倍,直到它運行完畢。

/*
  Web Server

  A simple webserver getting a value from a database.

  by codebraker007
*/

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ESP8266HTTPClient.h>

const uint16_t BUFFERSIZE = 256;
void sendReq();
void getData();
void getDebug();

char msgBuffer[BUFFERSIZE] = {'\0'};

int status = WL_IDLE_STATUS;
const char ssid[] = "MYWIFI";
const char pass[] = "123654MY";
// Server related vars
const char serverIp[] = "112.135.74.254";
const uint16_t httpPort = 80;
const char  url[] = "/get.php";

float mililine;

WiFiClient client;


void setup() {
  // For serial monitor
  Serial.begin(9600);
  while (!Serial) {
    ; // wait
  }

  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to Network named: ");
    Serial.println(ssid);
    status = WiFi.begin(ssid, pass);
    delay(10000);
  }

  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());
  IPAddress ip = WiFi.localIP();
  IPAddress gateway = WiFi.gatewayIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
  Serial.print("Gateway IP Address: ");
  Serial.println(gateway);


  if (!client.connect(serverIp, httpPort)) {
    Serial.println("connection failed");
    return;
  }
  while (client.connected()) {
    sendReq();
    getData();
    //getDebug();
  }

}


void loop() {

}

void sendReq() {
  Serial.print("requesting URL: ");
  Serial.println(url);
  strcpy ( msgBuffer, "GET ");
  strcat ( msgBuffer, url);
  strcat ( msgBuffer, " HTTP/1.1\r\n" );
  strcat ( msgBuffer,  "Host: ");
  strcat ( msgBuffer, serverIp);
  strcat ( msgBuffer, "\r\n");
  strcat ( msgBuffer, "User-Agent: BuildFailureDetectorESP8266\r\n");
  strcat ( msgBuffer, "Connection: close\r\n\r\n");

  client.print(msgBuffer);
  Serial.println("request sent");
}

void getData() {
  bool isHeader = true;
  uint16_t i = 0;
  msgBuffer[0] = '\0';
  if (client.available()) {
    if (i >= BUFFERSIZE) {
      Serial.println("==== DATA READ ERROR ====  /n Enlarge buffer size");
      return;
    }
    char c = client.read();
    if (c != '\r') {
      if (c == '\n' && isHeader ) {
        Serial.println("header received ");
        Serial.println("reply was:");
        Serial.println("==========");
        Serial.println(msgBuffer);
        i = 0;
        msgBuffer[i] = '\0';
        isHeader = false;
      }
      else if (c == '\n' && !isHeader ) {
        Serial.println(msgBuffer);
        Serial.println("==========");

        mililine = atof(msgBuffer) * 0.001;
        Serial.println("Final value is - ");
        Serial.println(mililine);
        Serial.println("==========");
        msgBuffer[i] = '\0';
        i = 0;
      }
      else if ( c != '\n' ) {
        msgBuffer[i] = c;
        i++;
      }
    } //  '\r'
  } // client available
}



void getDebug() {
  uint16_t i = 0;
  msgBuffer[0] = '\0';
  if (client.available()) {
    if (i >= BUFFERSIZE) {
      Serial.println("==== DEBUG ERROR ====  /n Enlarge buffer size");
      return;
    }
    char c = client.read();
    if (c == '\r') {
      msgBuffer[i] = '/';
      i++;
      msgBuffer[i] = 'r';
      i ++;
    }
    else if (c == '\n') {
      msgBuffer[i] = '/';
      i++;
      msgBuffer[i] = 'n';
      i ++;
    }
    else {
      msgBuffer[i] = c;
      i++;
    }
  } // client available
  Serial.println("==== DEBUG ====");
  Serial.println(msgBuffer);
  Serial.println("==========");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM