Отправка 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: %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

См. также:  Как работает зона доступности Aws ecs fargate?

@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

Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. ASH

    решение в соответствии с комментариями Tangentially Perpendicular состояло в том, чтобы изменить заголовок типа контента на

        http.addHeader("Content-Type", "application/x-www-form-urlencoded");
    

    и отправил данные в

        int httpCode = http.POST("temp=15");
    
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: