#include <ESP8266WiFi.h> // Wifi-Bibliothek einbinden
#include <PubSubClient.h> // MQTT Bibliothek einbinden

const char* ssid = "DeineSSID"; // SSID deines Routers
const char* pwd = "DeinPasswort"; // WLan-Passwort deines Routers
const char* MeinBroker = "DeineBrokerAdresse"; // MQTT-Server (Broker) Adresse
const int BrokerPort = 1883; // Broker-Portnummer
const char* Topic = "test1"; // Topic-Name
int x = 0;

WiFiClient espClient;
PubSubClient client(espClient);

void WifiSetup() {
Serial.println(); // Leerzeile
Serial.println("ESP gestartet"); // Begrüßungstext
WiFi.begin(ssid, pwd); // SSID und Passwort übergeben
Serial.println("Starte WiFi-Verbindung");
while (WiFi.status() !=WL_CONNECTED) // gib Punkte aus bis WLan-Verbindung steht
{ delay(250); Serial.print("."); }
Serial.println(); // Leerzeile
Serial.print("Verbunden über IP: ");
Serial.println(WiFi.localIP()); // gibt die IP aus mit der der ESP8266 am Router angemeldet ist
}

void reconnect() {
while (!client.connected()){ // Verbinde mit Broker
Serial.print("Verbinde mit MQTT Broker...");
if (client.connect("UUID-0815")){ // hier eine eindeutige Client-ID angeben
Serial.println(" verbunden");
} else {delay(5000);}} // in 5 Sekunden erneut versuchen
}

void setup() {
Serial.begin(9600); // Übertragungsgeschwindigkeit Serial-Monitor
// initiale Wifi
WifiSetup();
// initiale Serververbindung
client.setServer(MeinBroker, BrokerPort);
}



void loop() {
if (!client.connected()){reconnect();} // Rufe Funktion "reconnect" auf, wenn nicht mehr verbunden

x = x +1;
String s = "Nachricht ";
s = s + x;
char msg[50];
s.toCharArray(msg, 50);

client.publish(Topic, msg); // client.publish(Topic, msg, true); das "ture" setzt einen Retain Flag
Serial.print("Sende: ");
Serial.println(msg);

delay(5000); // warte 5 Sekunden
}