Отправка POST-запроса в файл PHP через arduino

Я пытаюсь отправить показания температуры в файл php на своем веб-сайте. Однако переменная температуры, похоже, не передается. Ниже я использую следующий код Arduino:

 

#include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> #define SERVER_IP «XXX.XX.XXX.XX» #ifndef STASSID #define STASSID «XXX» #define STAPSK «XXX» #endif void setup() { Serial.begin(115200); Serial.println(); Serial.println(); Serial.println(); WiFi.begin(STASSID, STAPSK); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print(«.»); } Serial.println(«»); Serial.print(«Connected! IP address: «); Serial.println(WiFi.localIP()); } void loop() { if ((WiFi.status() == WL_CONNECTED)) { WiFiClient client; HTTPClient http; Serial.print(«[HTTP] begin…n»); http.begin(client, «https://» SERVER_IP «/device.php»); //HTTP http.addHeader(«Content-Type», «application/json»); Serial.print(«[HTTP] POST…n»); int httpCode = http.POST(«{«temp»:»15″}»); if (httpCode > 0) { Serial.printf(«[HTTP] POST… code: %dn», httpCode); if (httpCode == HTTP_CODE_OK) { const String& payload = http.getString(); Serial.println(«received payload:n<<«); Serial.println(payload); Serial.println(«>>»); } } else { Serial.printf(«[HTTP] POST… failed, error: %sn», http.errorToString(httpCode).c_str()); } http.end(); } delay(100000); }

 

со следующим кодом в моем device.php:

 

<?php header(‘Content-type: application/json’); header(‘Content-Type: text/html; charset=utf-8’); require ‘config.php’; header(«Access-Control-Allow-Origin: *»); $temp = $_POST[«temp»]; $ins = mysqli_query($link,»INSERT INTO `test`(`id`,`test`)VALUES(NULL,’$temp’)»); $responseArray = array(‘status’ => $_POST); $encoded = json_encode($responseArray); header(‘Content-Type: application/json’); echo $encoded; ?>

 

Однако я получаю сообщение об ошибке php:

PHP Notice: Undefined index: temp in /var/www/html/device.php on line 6

Я получаю пустую запись в mysql, а последовательный монитор показывает пустую полезную нагрузку:

 

[HTTP] begin… [HTTP] POST… [HTTP] POST… code: 200 received payload: << {«status»:[]} >>

 

В PHP выполните var_dump($_POST); (после заголовка), чтобы увидеть, что содержит вывод.   —  person ASH    schedule 30.01.2021

@PaulT.it говорит, что ноль   —  person ASH    schedule 30.01.2021

Что ж, это объясняет уведомление. Мне нужно проверить использование, очевидно, POST не делает то, что ожидается.   —  person ASH    schedule 30.01.2021

Не уверен в этом, но… Вы отправляете данные в кодировке JSON, но PHP ожидает данные в кодировке формы из POST, поэтому измените заголовок типа контента application/x-www-form-urlencoded и измените данные на temp=15. Измените 15 на любую переменную, которая вам нужна.   —  person ASH    schedule 30.01.2021

@TangentiallyPerpendicular Я попробовал int httpCode = http.POST(?temp=15), тоже не сработало.   —  person ASH    schedule 30.01.2021

Попробуйте без отметки ?.   —  person ASH    schedule 30.01.2021

Вы также изменили заголовок типа контента?   —  person ASH    schedule 30.01.2021

@ПолТ. см. мой ответ ниже. Спасибо   —  person ASH    schedule 30.01.2021

@TangentiallyPerpendicular смотрите мой ответ ниже. Спасибо   —  person ASH    schedule 30.01.2021

Источник: ledsshop.ru

Стиль жизни - Здоровье!