首页 > 解决方案 > 使用 HTTP POST REQUEST 将数据从 ESP8266 发送到 Live Server 的问题

问题描述

我需要将数据从 esp8266 发送到 000webhostapp。000webhostapp 使用 https 与服务器的所有连接工作正常,但数据发送不工作。

我尝试了几个代码。使用获取请求或发布请求,但它们都没有正常工作。我已经更改了 esp 或 http 的 http 版本,但这也不起作用。

这是代码

#include "DHTesp.h"
#include "ESP8266WiFi.h"
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>
#ifdef ESP32
#pragma message(THIS EXAMPLE IS FOR ESP8266 ONLY!)
#error Select ESP8266 board.
#endif

DHTesp dht;
const char* ssid = "*****";
const char* password =  "****";
const char server[] = "biracial-conspiracy.000webhostapp.com";  
WiFiClient client;
void setup()
{
  Serial.begin(9600);
  Serial.println();
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);             // Connect to the network
  Serial.print("Connecting to ");
  Serial.print(ssid); Serial.println(" ...");

  int i = 0;
  while (WiFi.status() != WL_CONNECTED) { /* Wait for the Wi-Fi to 
    connect*/
    delay(1000);
    Serial.print(++i); Serial.print(' ');
  }

  Serial.println("wl connected");
  Serial.println("");
  Serial.println("Credentials accepted! Connected to wifi\n ");
  Serial.println("");



  Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)\tHeatIndex 
  (C)\t(F)");
  dht.setup(2, DHTesp::DHT22); // Connect DHT sensor to GPIO 17
 }

 void loop()
 {

   if (client.connect(server, 80)) {
     Serial.println("connected to server");
     int humidity = dht.getHumidity();
     int temperature = dht.getTemperature();
     Serial.print("Humidity : ");
     Serial.print(humidity);
     Serial.print("\t");
     Serial.print(" Temperature in Celcius : ");
     Serial.print(temperature);
     Serial.print("\t");
     Serial.print(" Moisture: ");
     Serial.println(analogRead(A0));
     HTTPClient http;
     int moisture = analogRead(A0);

     String data = "temp=" + String(temperature) + "&moisture=" + 
    String(moisture) + "&humidity=" + String(humidity);
    client.println("POST firebase.php HTTP/1.1");
    client.println("Host: biracial-conspiracy.000webhostapp.com\n");
    client.println("User-Agent: ESP8266/1.0");
    client.println("connection: close");
    client.status();
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.print("Content-Length: ");
    client.print(data.length());
    client.print("\n\n");
    client.print(data);
    delay(1000);
    Serial.println("\n");
    Serial.println("Data sending is : ");
    Serial.println(data);
    Serial.println("The byte is : ");
    Serial.println(data.length());
    client.stop();
   }
   else
   {
    Serial.println("Server Error.");
   }


 }

标签: phparduinohttprequestesp8266arduino-esp8266

解决方案


您不能使用 WiFiClient 连接到HTTPS。您需要使用带有 TLS 的客户端库(例如WiFiClientSecure)来连接到 HTTPS 服务器。


推荐阅读