Hallo liebe Arduino Community,
ich habe jetzt seit einigen Tagen das Problem das ich es nicht hinbekomme über TLS auf meinen EXTERNEN MQTT Server zu kommen. Ich habe nun schon viele Beispielcodes gesehen und auch einige versucht einzubinden, habe mich aber selbst so verwirrt das ich einfach nur noch total auf dem Schlauch stehe. Den jedes Codebeispiel ist rätselhafter weise (für meine Augen) völlig anders. Es werden jedes Mal andere libraries verwendet andere befehle für Fingersprints... Ich habe inzwischen auch schon so viel in meinem Code rum gemurkst das es inzwischen nur noch ein verzweifeltes try and error kopieren ist.
Deshalb wollte ich mal hier um Hilfe fragen kann mir jemand kurz verraten was ich alles falsch manche und/oder wo ich etwas Passendes finde?
#include <ESP8266WiFi.h> //Einfügen der ESP und der MQTT Library
#include <ESP8266mDNS.h>
#include <PubSubClient.h>
const char* ssid = "---"; //Loggon Daten für W-lan
const char* password = "---";
const char* mqttServer = "---";
const int mqttPort = ---;
const char* mqttUser = "---";
const char* mqttPassword = "---";
const uint8_t fingerprint[20] = {0xDA, 0xC9, 0x02, 0x4F, 0x54, 0xD8, 0xF6, 0xDF, 0x94, 0x93, 0x5F, 0xB1, 0x73, 0x26, 0x38, 0xCA, 0x6A, 0xD7, 0x7C, 0x13};
WiFiClientSecure espClient;
PubSubClient client(espClient);
//Initalisierung aller Variablen
long lastMsg = 0; //---------------------------------------------------
int i=0; // für die for schleife
const int LEDI = 2; // Interne LED des ESP8266
const int REEDA = 16; // GPIO Pin des REED Kontaktes
int REEDstatusA = 0; // Variable zum speichern des REED Statuses
const int REEDB = 5; // GPIO Pin des REED Kontaktes
int REEDstatusB = 0; // Variable zum speichern des REED Statuses
const int REEDC = 4; // GPIO Pin des REED Kontaktes
int REEDstatusC = 0; // Variable zum speichern des REED Statuses
const int REEDD = 14; // GPIO Pin des REED Kontaktes
int REEDstatusD = 0; // Variable zum speichern des REED Statuses
const int REEDE = 12; // GPIO Pin des REED Kontaktes
int REEDstatusE = 0; // Variable zum speichern des REED Statuses
char msg[50]; // Speicher für die Zu übermittelnde nachricht
int value = 0; //----------------------------------------------------
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the WiFi network");
//espClient.setInsecure();
espClient.setFingerprint(fingerprint);
client.setServer(mqttServer, mqttPort);
Serial.println(mqttServer);
while (!client.connected())
{
Serial.print("Connecting to MQTT Broker...");
if (client.connect("ESP8266Client", mqttUser, mqttPassword))
{
Serial.println("connected");
}
else
{
Serial.print("failed with state ");
Serial.println(client.state());
delay(2000);
}
}
pinMode(LEDI, OUTPUT);
pinMode(REEDA, INPUT);
pinMode(REEDB, INPUT);
pinMode(REEDC, INPUT);
pinMode(REEDD, INPUT);
pinMode(REEDE, INPUT);
}
void reconnect() { //Funktion für die ausgabe des Status bei einem Reconect Über den Micro-USB port (Boud rate 115200)
while (!client.connected()) {
Serial.print("Reconnecting...");
if (!client.connect("ESP8266Client", mqttUser, mqttPassword)) {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" retrying in 5 seconds");
for(i=0;i<10;i++){
digitalWrite(LEDI, HIGH);
delay(250);
digitalWrite(LEDI, LOW);
delay(250);
}
}
}
}
void loop() {
digitalWrite(LEDI, LOW);
if (!client.connected()) { //Abbfrage ob die Verbindung verloren wurde. Wenn ja wird die reconnect funktion aufgerufen
reconnect();
}
//client.loop(); //Nicht nötich da der client ausschließlich Pupliziert
REEDstatusA = digitalRead(REEDA); //Abfrage des REED-Kontaktes
REEDstatusB = digitalRead(REEDB);
REEDstatusC = digitalRead(REEDC);
REEDstatusD = digitalRead(REEDD);
REEDstatusE = digitalRead(REEDE);
if(REEDstatusA == LOW || REEDstatusB == LOW || REEDstatusC == LOW || REEDstatusD == LOW || REEDstatusE == LOW){ //Festlegen der nächsten nachricht anhand des REED-Kontakt statuses
snprintf (msg, 50, "open");
}
else{
if(REEDstatusA == HIGH && REEDstatusB == HIGH && REEDstatusC == HIGH && REEDstatusD == HIGH && REEDstatusE == HIGH)
{
snprintf (msg, 50, "closed");
}
else
{
snprintf (msg, 50, "undef");
}
}
//Serial.print("Publish message: ") //Auskommentiert da nur zu Fehler analyse nützlich. Pushed Nachricht auf Micro-USB port (Boud rate 115200)
Serial.println(msg); //Auskommentiert da nur zu Fehler analyse nützlich. Pushed Nachricht auf Micro-USB port (Boud rate 115200)
client.publish("/data/MCU000/", msg); //Senden der Festgelegten Nachricht auf den chanel pfad
delay(1000);
}