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/
我已经为我的 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/