Esp8266-Beispielcodes – für die MQTT-Client-App

blankAuf dieser Seite finden Sie einige Beispiele, die hervorragend mit der MQTT-Client-Android-App funktionieren.
Die MQTT-Client-App und ESP8266 verbinden sich mit dem MQTT-Broker und steuern die verbundene LED.
Mit dem Dimmer können wir die Helligkeit der LED regulieren. Verwenden wir die Farbauswahl, um RGB-Farben festzulegen.

MQTT-Client-App
MQTT-Client-App

Im ersten Beispiel wird die an den ESP8266 angeschlossene LED schalten. Die LED kann durch einen Transistor ersetzt werden, um ein Relais zu steuern, um ein Gerät mit höherer Leistung anzuschließen.

Korrigieren wir im folgenden Code das Benutzername-Passwort-Paar, das für die Verbindung mit WLAN erforderlich ist, die IP-Adresse des mqtt-Brokers und das geführte Topic. Öffnen Sie Arduino und laden wir die Skizze auf ESP8266 hoch.

Erstellen wir in der MQTT-Client-App eine Schaltfläche und fügen wir das Topic für die LED hinzu. Dies können Sie hier nachlesen .

/**************************************/
/*      https://myhomethings.eu       */
/**************************************/

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const char* ssid = "mySSID";
const char* password = "mypassword";
const char* mqtt_server = "192.168.x.xxx";

const char Led = D5;

WiFiClient espClient;
PubSubClient client(espClient);

void setup() 
{
  pinMode(Led, OUTPUT);
  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
  }
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}

void loop() 
{
  if (!client.connected()) 
  {
    reconnect();
  }
  client.loop();
}

void reconnect() 
{
  while (!client.connected()) 
  {
    if (client.connect("ESP8266-LedClient"))
    {
      client.subscribe("App/Led");
    } 
    else 
    {
      delay(6000);
    }
  }
}

void callback(char* topic, byte* payload, unsigned int length) 
{
  payload[length] = '\0';
  String strTopic = String(topic);
  String strPayload = String((char * ) payload);
  
  if(strTopic == "App/Led") 
  {
    if(strPayload == "false") 
    {
      digitalWrite(Led, LOW);
    }
    
    if(strPayload == "true") 
    {
      digitalWrite(Led, HIGH);
    }
  }
}

Machen wir die folgende Schaltung:

ESP 8266 mit LED

Das zweite Beispiel ist ESP8266 LED Switch mit Authentifizierung. Wenn der MQTT-Broker passwortgeschützt ist, sollte die Gliederung wie folgt geändert werden.

Wir müssen auch den Benutzernamen und das Passwort eingeben, die für die Broker-Authentifizierung in der MQTT-Client-Anwendung erforderlich sind.

/**************************************/
/*      https://myhomethings.eu       */
/**************************************/

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const char* ssid = "mySSID";
const char* password = "mypassword";
const char* mqtt_server = "192.168.x.xxx";
const char* mqttUser = "myMqttUsername";
const char* mqttPassword = "myMqttPassword";

const char Led = D5;

WiFiClient espClient;
PubSubClient client(espClient);

void setup() 
{
  pinMode(Led, OUTPUT);
  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
  }
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}

void loop() 
{
  if (!client.connected()) 
  {
    reconnect();
  }
  client.loop();
}

void reconnect() 
{
  while (!client.connected()) 
  {
    if (client.connect("ESP8266-LedClient", mqttUser, mqttPassword))
    {
      client.subscribe("/App/Led");
    } 
    else 
    {
      delay(6000);
    }
  }
}

void callback(char* topic, byte* payload, unsigned int length) 
{
  payload[length] = '\0';
  String strTopic = String(topic);
  String strPayload = String((char * ) payload);
  
  if(strTopic == "/App/Led") 
  {
    if(strPayload == "false") 
    {
      digitalWrite(Led, LOW);
    }
    
    if(strPayload == "true") 
    {
      digitalWrite(Led, HIGH);
    }
  }
}

Können wir die Helligkeit der LED mit der MQTT-Client-Anwendung anpassen. Verwenden wir für ESP8266 und LED-Paare das folgende LED-Dimmer-Beispiel.

Meross Smart RGB LED Streifen

Meross Smart RGB LED Streifen

Funktioniert mit Apple HomeKit, Amazon Alexa, Google Assistant  und SmartThings.

werbung – amazon.de

Aktivieren wir in der MQTT-Client-App in den LED-Schaltflächeneinstellungen das Kontrollkästchen Dimmer und fügen wir das Dimmer-Topic hinzu.


/**************************************/
/*      https://myhomethings.eu       */
/**************************************/

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const char* ssid = "mySSID";
const char* password = "mypassword";
const char* mqtt_server = "192.168.x.xxx";


const char Led = D5;

int brightness = 255;

WiFiClient espClient;
PubSubClient client(espClient);

void setup() 
{
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
  }
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}

void loop() 
{
  if (!client.connected()) 
  {
    reconnect();
  }
  client.loop();
}

void reconnect() 
{
  while (!client.connected()) 
  {
    if (client.connect("ESP8266-LedDimmerClient"))
    {
      client.subscribe("App/Led");
      client.subscribe("App/dimmer");
    } 
    else 
    {
      delay(6000);
    }
  }
}

void callback(char* topic, byte* payload, unsigned int length) 
{
  payload[length] = '\0';
  String strTopic = String(topic);
  String strPayload = String((char * ) payload);
  
  if(strTopic == "App/dimmer") 
  {
    brightness = map(strPayload.toInt(), 0, 100, 0, 255);
    analogWrite(Led, brightness);
    if(brightness == 0)
    {
      client.publish("App/Led", "false");
    }
    else
    {
      client.publish("App/Led", "true");
    }
  }
  if(strTopic == "App/Led") 
  {
    if(strPayload == "false") 
    {
      analogWrite(Led, 0);
    }
    
    if(strPayload == "true") 
    {
      analogWrite(Led, brightness);
    }
  }
}

Verbinden wir nun eine RGB-LED mit dem ESP8266. 

ESP8266 mit RGB LED

Deaktivieren wir auf dem Bildschirm MQTT-Client-App-Einstellungen bei der Schaltfläche LED das Kontrollkästchen Dimmer und aktivieren wir das Kontrollkästchen RGB, fügen wir das Topic rgb hinzu.


/**************************************/
/*      https://myhomethings.eu       */
/**************************************/

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const char* ssid = "mySSID";
const char* password = "mypassword";
const char* mqtt_server = "192.168.x.xxx";


const char pinR = D5;
const char pinG = D6;
const char pinB = D7;

int R = 255;
int G = 255;
int B = 255;


WiFiClient espClient;
PubSubClient client(espClient);

void setup() 
{
  Serial.begin(9600);
  analogWriteRange(255);

  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
  }
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}

void loop() 
{
  if (!client.connected()) 
  {
    reconnect();
  }
  client.loop();
}

void reconnect() 
{
  while (!client.connected()) 
  {
    if (client.connect("ESP8266-LedRGBClient"))
    {
      client.subscribe("App/Led");
      client.subscribe("App/rgb");
    } 
    else 
    {
      delay(6000);
    }
  }
}

void callback(char* topic, byte* payload, unsigned int length)
{
  payload[length] = '\0';
  String strTopic = String(topic);
  String strPayload = String((char * ) payload);

  if(strTopic == "App/rgb") 
  {
    int indexR = strPayload.indexOf("R:");
    int indexG = strPayload.indexOf("G:");
    int indexB = strPayload.indexOf("B:");
    
    R = strPayload.substring(indexR+2,indexG-1).toInt();
    G = strPayload.substring(indexG+2,indexB-1).toInt();
    B = strPayload.substring(indexB+2).toInt();

    analogWrite(pinR, R);
    analogWrite(pinG, G);
    analogWrite(pinB, B);

    if(R+G+B > 0)
    {
      client.publish("App/Led", "true");
    }
    else
    {
      client.publish("App/Led", "false");
    }
  }
  
  if(strTopic == "App/Led") 
  {
    if(strPayload == "false") 
    {
      analogWrite(pinR, 0);
      analogWrite(pinG, 0);
      analogWrite(pinB, 0);
    }
    
    if(strPayload == "true") 
    {
      analogWrite(pinR, R);
      analogWrite(pinG, G);
      analogWrite(pinB, B);
    }
  }
}

Ich habe die obigen Beispiele in ioBroker und auf Mosquitto Mqtt-Servern getestet. Es gibt einen kleinen Unterschied im Code des ESP8266, je nachdem, mit welchem Broker er verbunden ist, muss der Topic-Pfad anders angegeben werden. Bei mir funktioniert es gut.

IoBroker beginnt ohne Schrägstrich:

client.subscribe("App/Led");

Und beim Mosquitto beginnt es mit einem Schrägstrich:

client.subscribe("/App/Led");

Ich werde bald weitere Beispiele hinzufügen. In der Zwischenzeit viel Spaß.

Meross Smart Aroma Diffusor

Meross Alexa Aroma Diffuser Funktioniert mit Apple HomeKit, Alexa und Google Home, 400ML Ätherische Öle Smart Ultraschall Luftbefeuchter, APP Steuerbar WLAN Duftöl Diffuser Duftlampe mit RGB-LED-Licht

werbung – amazon.de

Meross Smart Aroma Diffusor