ESP8266服务器客户端HTTPS Post

ESP8266服务器客户端HTTPS Post,http,server,client,arduino-esp8266,Http,Server,Client,Arduino Esp8266,我正在使用ESP8266 Arduino托管服务器和客户端,我想使用客户端发送的消息更新服务器网页上的文本内容,即客户端发送“Hello World”服务器使用此文本更新页面上的html。我认为这可以通过使用HTTPS Post函数来实现。我使用的代码几乎是逐字逐句的示例代码,因此我开始认为这是一个概念错误,而不是一个技术错误。如果我完全偏离了方向,如果可能的话,我会非常感激被引导到正确的方向 当我运行服务器时,一切都按照表面上的预期工作 #include <ESP8266WiFi.h&g

我正在使用ESP8266 Arduino托管服务器和客户端,我想使用客户端发送的消息更新服务器网页上的文本内容,即客户端发送“Hello World”服务器使用此文本更新页面上的html。我认为这可以通过使用HTTPS Post函数来实现。我使用的代码几乎是逐字逐句的示例代码,因此我开始认为这是一个概念错误,而不是一个技术错误。如果我完全偏离了方向,如果可能的话,我会非常感激被引导到正确的方向

当我运行服务器时,一切都按照表面上的预期工作

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServerSecure.h>
#include <ESP8266mDNS.h>


#ifndef STASSID
#define STASSID "MyID"
#define STAPSK  "MyPassword"
#endif

const char* ssid = STASSID;
const char* password = STAPSK;

BearSSL::ESP8266WebServerSecure server(443);

static const char serverCert[] PROGMEM = R"EOF(
-----BEGIN CERTIFICATE-----
Mycert values
-----END CERTIFICATE-----

)EOF";

static const char serverKey[] PROGMEM =  R"EOF(
-----BEGIN PRIVATE KEY-----
Mykeyvalues
-----END PRIVATE KEY-----
)EOF";


const int led = 13;

void handleRoot() {
  digitalWrite(led, 1);
  server.send(200, "text/plain", "Hello from esp8266 over HTTPS!");
  digitalWrite(led, 0);
}

void handleNotFound(){
  digitalWrite(led, 1);
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET)?"GET":"POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i=0; i<server.args(); i++){
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
  digitalWrite(led, 0);
}

void setup(void){
  pinMode(led, OUTPUT);
  digitalWrite(led, 0);
  Serial.begin(9600);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  configTime(3 * 3600, 0, "pool.ntp.org", "time.nist.gov");

  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  if (MDNS.begin("esp8266")) {
    Serial.println("MDNS responder started");
  }

  server.getServer().setRSACert(new BearSSL::X509List(serverCert), new BearSSL::PrivateKey(serverKey));

  server.on("/", handleRoot);

  server.on("/inline", [](){
    server.send(200, "text/plain", "this works as well");
  });

  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTPS server started");
}

void loop(void){
  server.handleClient();
  MDNS.update();
}
#包括
#包括
#包括
#包括
#ifndef STASSID
#定义STASSID“MyID”
#定义STAPSK“我的密码”
#恩迪夫
常量字符*ssid=STASSID;
const char*password=STAPSK;
BearSSL::ESP8266WebServerSecure服务器(443);
静态常量char serverCert[]PROGMEM=R“EOF(
-----开始证书-----
迈切特值
-----结束证书-----
)EOF”;
静态常量char serverKey[]PROGMEM=R“EOF(
-----开始私钥-----
Mykeyvalues
-----结束私钥-----
)EOF”;
常数int led=13;
void handleRoot(){
数码写入(led,1);
发送(200,“文本/普通”,“通过HTTPS从esp8266发送你好!”);
数字写入(led,0);
}
void handleNotFound(){
数码写入(led,1);
String message=“找不到文件\n\n”;
消息+=“URI:”;
message+=server.uri();
消息+=“\n方法:”;
message+=(server.method()==HTTP\u GET)?“GET”:“POST”;
消息+=“\n消息:”;
message+=server.args();
消息+=“\n”;
对于(uint8_t i=0;i 0;t--){
Serial.printf(“[设置]等待%d..\n”,t);
Serial.flush();
延迟(1000);
}
WiFi.模式(WiFi_STA);
WiFiMulti.addAP(“MyID”、“MyPassword”);
}
void循环(){
//等待WiFi连接
如果((WiFiMulti.run()==WL_已连接)){
std::unique_ptrclient(新BearSSL::WiFiClientSecure);
客户端->设置指纹(指纹);
HTTPClient-http;
Serial.print(“[HTTP]begin…\n”);
//配置悲剧服务器和url
http.begin(*客户端,“http://”服务器_IP);//http
addHeader(“内容类型”、“文本/普通”);
Serial.print(“[HTTP]POST…\n”);
//启动连接并发送HTTP头和正文
int httpCode=http.POST(“测试1,2,3”);
//httpCode在出现错误时为负值
如果(httpCode>0){
//HTTP标头已发送,服务器响应标头已处理
Serial.printf(“[HTTP]POST…代码:%d\n”,httpCode);
//在服务器上找到文件
如果(httpCode==HTTP\u代码\u确定){
const String&payload=http.getString();
Serial.println(“收到的有效负载:\n”);
}
}否则{
Serial.printf(“[HTTP]POST…失败,错误:%s\n”,HTTP.errorToString(httpCode.c_str());
}
http.end();
}
延迟(10 000);
}
#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#include <ESP8266HTTPClient.h>

#include <WiFiClientSecureBearSSL.h>
// Fingerprint for demo URL, expires on June 2, 2021, needs to be updated well before this date
const char fingerprint[] PROGMEM = "MyThumbprint";
#define SERVER_IP "ServerIP:443/"

ESP8266WiFiMulti WiFiMulti;

void setup() {

  Serial.begin(9600);
  // Serial.setDebugOutput(true);

  Serial.println();
  Serial.println();
  Serial.println();

  for (uint8_t t = 4; t > 0; t--) {
    Serial.printf("[SETUP] WAIT %d...\n", t);
    Serial.flush();
    delay(1000);
  }

  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("MyID", "MyPassword");
}

void loop() {
  // wait for WiFi connection
  if ((WiFiMulti.run() == WL_CONNECTED)) {

    std::unique_ptr<BearSSL::WiFiClientSecure>client(new BearSSL::WiFiClientSecure);

    client->setFingerprint(fingerprint);

    HTTPClient http;

    Serial.print("[HTTP] begin...\n");
    // configure traged server and url
    http.begin(*client, "http://" SERVER_IP); //HTTP
    http.addHeader("Content-Type", "text/plain");

    Serial.print("[HTTP] POST...\n");
    // start connection and send HTTP header and body
    int httpCode = http.POST("Testing 1,2,3");

    // httpCode will be negative on error
    if (httpCode > 0) {
      // HTTP header has been send and Server response header has been handled
      Serial.printf("[HTTP] POST... code: %d\n", httpCode);

      // file found at server
      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(10000);
}