Arduino 无法 POST 数据到 PHP

Arduino can't POST data to PHP

我已经为我的 Arduino 编写了一个代码来从传感器读取数据,然后 post 到一个名为 post-data.php 的 PHP 文件,然后 PHP 将插入数据存入数据库。 然而,我的 Arduino 似乎无法 post 数据,或者它没有 post 正确地处理它。

#ifdef ESP32
  #include <WiFi.h>
  #include <HTTPClient.h>
#else
  #include <ESP8266WiFi.h>
  #include <ESP8266HTTPClient.h>
  #include <WiFiClient.h>
  #include <ESP8266WebServer.h>
#endif

#define signalPin 12
#define sensorPin A0

const char *ssid = "****";
const char *password = "*****";
const char* serverName = "http://smartswitchfyp.rf.gd/post-data.php";
String apiKeyValue = "*******";
ESP8266WebServer server(80);

void setup() {
  Serial.begin(9600);
  pinMode(sensorPin, INPUT);

  Serial.print("Configuring access point...");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFI connected");
  Serial.print("IP: ");
  Serial.println(WiFi.localIP());


void loop() {
  if(WiFi.status()== WL_CONNECTED){
    HTTPClient http;

// Your Domain name with URL path or IP address with path
http.begin(serverName);

// Specify content-type header
http.addHeader("Content-Type", "application/x-www-form-urlencoded");

sensor();
// Prepare your HTTP POST request data
String httpRequestData = "api_key=" + apiKeyValue + "&value1=" + String(current) + "&value2=" + String(power) + "";


//String httpRequestData = "api_key=******9&value1=24.75&value2=49.54";
//Serial.print("httpRequestData: ");
//Serial.println(httpRequestData);

int httpResponseCode = http.POST(httpRequestData);


if (httpResponseCode>0) {
  Serial.print("HTTP Response code: ");
  Serial.println(response);
}
else {
  Serial.print("Error code: ");
  Serial.println(httpResponseCode);
}
http.end();

  }
  else {
    Serial.println("WiFi Disconnected");
  }
  delay(1000);
}

我检查过我的 serverName 是正确的。

我已经测试了 post-data.php,它工作正常,因为我的数据库有更新。下面是测试代码,test.php我是用来测试post-data.php

<html>
<body>

<form action="post-data.php" method="post">
api: <input type="text" name="api_key">
Name: <input type="text" name="value1">
Email: <input type="text" name="value2">
<input type="submit">
</form>

</body>
</html> 

下面是我的 post-data.php 文件

<?php

$servername = "sql101.epizy.com";
$dbname = "epiz_28338452_smartswitch";
$username = "epiz_28338452";
$password = "********";

// Keep this API Key value to be compatible with the ESP32 code provided in the project page. If you change this value, the ESP32 sketch needs to match
$api_key_value = "*******";

$api_key = $value1 = $value2 = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $api_key = test_input($_POST["api_key"]);
    if($api_key == $api_key_value) {
        $value1 = test_input($_POST["value1"]);
        $value2 = test_input($_POST["value2"]);
        
        // Create connection
        $conn = new mysqli($servername, $username, $password, $dbname);
        // Check connection
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        } 
        
        $sql = "INSERT INTO Sensor (value1, value2) VALUES ('" . $value1 . "', '" . $value2 . "')";
        $result = $conn->query($sql);
        if ($result === TRUE) {
            echo "New record created successfully";
        } 
        else {
            echo "Error: " . $sql . "<br>" . $conn->error;
        }
    
        $conn->close();
    }
    else {
        echo "Wrong API Key provided.";
    }

}
else {
    echo "No data posted with HTTP POST.";
}

function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

我 90% 确定这不是 post-data.php 文件问题,但我的 Arduino 无法 post 将数据 php 文件。 在我的 Arduino 代码中,我使用了行

http.begin(serverName);

连接到 post-data.php 然后准备 header:

http.addHeader("Content-Type", "application/x-www-form-urlencoded");

并准备内容:

 String httpRequestData = "api_key=" + apiKeyValue + "&value1=" + String(current) + "&value2=" + String(power) + "";

电流和功率在其他 function/method 中处理。我测试了电流和功率输出,它们是浮点变量。最后我使用了行

int httpResponseCode = http.POST(httpRequestData);

post的3个数据到php文件。 当我启动 Arduino 时,输出显示 HTTP Response code: 200,我相信 php 文件已成功调用(如果我错了请纠正我)。但是,我的数据库没有插入任何数据。 test.php 再次证明数据库可以插入数据。 下面是 test.php 文件

插入的数据库值的图像

任何人都可以帮助我,因为我不确定是什么原因导致 Arduino 无法 post 数据。谢谢!

你不能用你的arduino访问你的无限免费网站,因为无限免费有一个安全系统 有关详细信息,请参阅 https://support.infinityfree.net/websites/what-is-the-i-1-suffix/