Я уже некоторое время пытаюсь отправить данные на сервер. Несмотря на то, что я получаю хороший ответ, данные не отправляются на сервер.
Вот мой код:
#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, но это не помогло.
PHP не анализирует автоматически JSON.
Вы должны либо опубликовать его как application/x-www-form-urlencoded
, который выглядит как
Celsius=TEMPERATURE
или проанализируйте полезную нагрузку POST самостоятельно
$data = json_decode(file_get_contents('php://input'), true);
Других решений пока нет …