我一直试图将数据发布到服务器上一段时间。即使我收到OK响应,数据也不会发布到服务器。
这是我的代码:
#include <SoftwareSerial.h>
SoftwareSerial myGsm(7,8);
void setup() {
myGsm.begin(115200);
Serial.begin(9600);
delay(500);
myGsm.println("AT+CIPSHUT\r"); //RESPONSE= OK
delay(1000);
myGsm.println("AT+CIPMUX=0\r"); //RESPONSE= OK
delay(2000);
myGsm.println("AT+CGATT=1\r"); //RESPONSE= OK
delay(1000);
myGsm.println("AT+CSTT=\"internet\",\"\",\"\"\r"); //RESPONSE= OK
delay(5000);
myGsm.println("AT+CIICR\r"); //RESPONSE= OK
delay(5000);
myGsm.println("AT+CIFSR\r"); //RESPONSE= Returns an IP
delay(2000);
myGsm.println("AT+CIPSTART=\"TCP\",\"159.203.180.107\", 80\r") //RESPONSE= CONNECTED OK
delay(3000);
myGsm.println("AT+CIPSEND\r"); //RESPONSE= >
delay(500);
myGsm.println("POST http://159.203.180.107/Code/ HTTP/1.1");
delay(500);
myGsm.println("Host: 159.203.180.107");
delay(500);
myGsm.println("Content-Type: application/json");
delay(500);
myGsm.println("Content-Length: 25\r\n");
delay(500);
myGsm.println("{\"Celsius\":\"TEMPERATURE\"}");
delay(500);
myGsm.write(0x1A); // Ctrl Z
delay(10000);
/*
After sending all these instructions, I get the following response,
OK
HTTP/1.1 200 OK
Friday December, 22
+TCPCLOSE=0
OK
*/
myGsm.println("AT+CIPCLOSE"); //RESPONSE= OK
delay(1000);
myGsm.println("AT+CIPSHUT"); //RESPONSE= OK
delay(1000);
}
void loop() {
}
因此,正如您所看到的,我在发送数据后收到200 OK
响应,但数据未写入服务器中的文件。文件中的现有内容将被删除,但新数据不会写入该文件中。
这是我在服务器中的PHP文件:
<?php
echo "<pre>";
print_r($_REQUEST);
file_put_contents("data.txt", $_REQUEST);
die("<br>DONE!");
?>
那么,这可能是什么问题?服务器中的PHP文件有问题吗?请帮忙。我也在其中一个Arduino社区发布了同样的问题,但没有帮助。
答案 0 :(得分:2)
PHP不会自动解析JSON。
您需要将其发布为application/x-www-form-urlencoded
,看起来像
Celsius=TEMPERATURE
或自己解析POST有效负载
$data = json_decode(file_get_contents('php://input'), true);