无法使用GPRS GSM A6和Arduino将数据发布到Web服务器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法使用GPRS GSM A6和Arduino将数据发布到Web服务器相关的知识,希望对你有一定的参考价值。
我一直试图将数据发布到服务器上一段时间。即使我得到OK响应,数据也不会发布到服务器。
这是我的代码:
#include <SoftwareSerial.h>
SoftwareSerial myGsm(7,8);
void setup() {
myGsm.begin(115200);
Serial.begin(9600);
delay(500);
myGsm.println("AT+CIPSHUT
"); //RESPONSE= OK
delay(1000);
myGsm.println("AT+CIPMUX=0
"); //RESPONSE= OK
delay(2000);
myGsm.println("AT+CGATT=1
"); //RESPONSE= OK
delay(1000);
myGsm.println("AT+CSTT="internet","",""
"); //RESPONSE= OK
delay(5000);
myGsm.println("AT+CIICR
"); //RESPONSE= OK
delay(5000);
myGsm.println("AT+CIFSR
"); //RESPONSE= Returns an IP
delay(2000);
myGsm.println("AT+CIPSTART="TCP","159.203.180.107", 80
") //RESPONSE= CONNECTED OK
delay(3000);
myGsm.println("AT+CIPSEND
"); //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
");
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社区发布了同样的问题,但没有帮助。
答案
PHP不会自动解析JSON。
您需要将其发布为application/x-www-form-urlencoded
,看起来像
Celsius=TEMPERATURE
或者自己解析POST有效负载
$data = json_decode(file_get_contents('php://input'), true);
以上是关于无法使用GPRS GSM A6和Arduino将数据发布到Web服务器的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Arduino和SIM900A GPRS / GSM模块将数据发送到Web服务器
UMTSkeeper: keep your UMTS/GPRS/GSM connection alive automatically