Я пытаюсь отправить показания температуры в файл 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
Источник: