Я пытаюсь отправить показания температуры в файл 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: %d\n", 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: %s\n", 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
решение в соответствии с комментариями Tangentially Perpendicular состояло в том, чтобы изменить заголовок типа контента на
и отправил данные в