Skocz do zawartości

Serwer na ESP8266 i HTTPS. Błąd: ERR_EMPTY_RESPONSE


Sebolas

Pomocna odpowiedź

Cześć, postawiłem na ESP8266 serwer http, który służy do sterowania diodami i wysyłania odczytu temperatury z czujnika. Następnie chciałbym przeprogramować go na serwer https. W tym celu wygenerowałem certyfikat + klucz i użyłem ich w kodzie, wykorzystując bibliotekę ESP8266WebServerSecure. Program się kompiluje, serwer startuje jednak przy próbie połączenia się z nim przy użyciu przeglądarki Chrome dostaje komunikat: 

"Serwer <IP> nie wysłał żadnych danych.

ERR_EMPTY_RESPONSE"

Nie działają również requesty, które służyły do obsługi LEDów. Zerknijcie proszę na kod czy wszystko z nim w porządku 🙂 

#include <Arduino.h>
#include <ESP8266WebServerSecure.h>
#include <ESP8266mDNS.h>
#include <ArduinoJson.h>

#define output4 4
#define output5 5
#define input0 A0


const char* ssid = "SSID";
const char* password = "password";

 //HTTPS server object, port number 443
BearSSL::ESP8266WebServerSecure server(443);


static const char serverCert[] PROGMEM = R"EOF(
-----BEGIN CERTIFICATE-----
*tutaj certyfikat*
-----END CERTIFICATE-----
)EOF";

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

void handleNotFound() { 
   String message = "No such a data or incorrect request...";
   server.send(404, "text/plain", message);
}

void changeStatus(){
    //Parsing request argument to string
  String postBody = server.arg("plain");
    //Changing output value condition
  if(server.hasArg("number")&&server.hasArg("status")){
    int pinNumber = server.arg("number").toInt();
    if(server.arg("status")=="on"){
      digitalWrite(pinNumber, HIGH);
    } else if(server.arg("status")=="off"){
      digitalWrite(pinNumber, LOW);
    } 
  } else {
      handleNotFound();
    }
  Serial.println("Argument: "+postBody);
  server.send(200, "text/plain", postBody); 
}
 
void getStatus(){
    //Creating json document
  DynamicJsonDocument doc(200);
    //Pushing data to json document
  if(digitalRead(output4)==LOW){
    JsonObject out4 = doc.createNestedObject("sensor 4");
    out4["name"] = "output4";
    out4["value"] = 0;
  } else {
    JsonObject out4 = doc.createNestedObject("sensor 4");
    out4["name"] = "output4";
    out4["value"] = 1;
  }
  if(digitalRead(output5)==LOW){
    JsonObject out5 = doc.createNestedObject("sensor 5");
    out5["name"] = "output5";
    out5["value"] = 0;
  } else {
    JsonObject out5 = doc.createNestedObject("sensor 5");
    out5["name"] = "output5";
    out5["value"] = 1;
  }
    //Getting analog input value
    JsonObject in0 = doc.createNestedObject("sensor 0");
    in0["name"] = "input0";
    in0["value"] = analogRead(A0);
    
   String outputData = "";
   serializeJsonPretty(doc, outputData);
   server.send(200, "application/json", outputData);
}
 
 void testF(){
   server.send(200, "application/json", "outputData");
 }

void setup() {
  // put your setup code here, to run once:
 
  Serial.begin(115200);
  // Initialize the output variables as outputs
  pinMode(output5, OUTPUT);
  pinMode(output4, OUTPUT);
  // Set outputs to LOW
  digitalWrite(output5, LOW);
  digitalWrite(output4, LOW);

  //Start wifi connection
  WiFi.begin(ssid, password);
  delay(100);
  Serial.println("Trying to connect wifi network");
  while(WiFi.status() != WL_CONNECTED){
    Serial.print(".");
    delay(500);
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(WiFi.SSID());
  Serial.print("IP adress: ");
  Serial.println(WiFi.localIP());
  

  server.on("/", HTTP_GET, getStatus);
  server.on("/led", HTTP_PUT, changeStatus);
  
  //Setting server certificate and key
  server.getServer().setRSACert(new BearSSL::X509List(serverCert), new BearSSL::PrivateKey(serverKey));
  // Start server
  server.begin();
  Serial.println("Secured server ready");
}

void loop() {
  server.handleClient();
}

 

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.