无法使用GPRS GSM A6和Arduino将数据发布到Web服务器

时间:2017-12-22 11:30:03

标签: php networking arduino gsm gprs

我一直试图将数据发布到服务器上一段时间。即使我收到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社区发布了同样的问题,但没有帮助。

1 个答案:

答案 0 :(得分:2)

PHP不会自动解析JSON。

您需要将其发布为application/x-www-form-urlencoded,看起来像

Celsius=TEMPERATURE

或自己解析POST有效负载

$data = json_decode(file_get_contents('php://input'), true);