Esp8266-Internetsteuerung über das MQTT-Protokoll

Esp8266-Internetsteuerung über das MQTT-Protokoll
Hallo zusammen! In diesem Artikel wird detailliert erklärt und gezeigt, wie man in nur 20 Minuten freie Zeit die Fernsteuerung des esp8266-Moduls mithilfe einer Android-App über das MQTT-Protokoll einrichten kann.

Die Idee der Fernsteuerung und Überwachung hat immer die Köpfe derjenigen beschäftigt, die sich für Elektronik und Programmierung interessieren. Die Möglichkeit, jederzeit die benötigten Daten zu empfangen oder zu senden, unabhängig von Ihrem Standort, eröffnet enorme Möglichkeiten. In meinen früheren Artikeln ( Artikel 1 und Artikel 2) habe ich versucht, mehrere verfügbare und relativ einfache Optionen für die Fernsteuerung von Mikrokontrollern über das Internet zu beleuchten. Doch die Zeit und die Welt stehen nicht still – der Fortschritt schreitet unaufhörlich voran. In dieser kurzen Zeit hat der esp8266-Modul, dank seines niedrigen Preises und des integrierten Wi-Fi, große Popularität erlangt und gehört zu den Grundpfeilern des "intelligenten Hauses".

Derzeit ist MQTT das führende und am weitesten verbreitete Protokoll für die Datenübertragung zwischen einzelnen Geräten in "Smart Home"-Systemen. Es bietet eine Reihe von Vorteilen gegenüber anderen Protokollen:
— geringer Datenverbrauch;
— die Verbindung zwischen Client und Server ist stets offen;
— belastet das Internet nicht;
— keine Verzögerungen bei der Datenübertragung;
— komfortable Abonnementsysteme für Topics;
All dies ermöglicht eine Überwachung und Steuerung in Echtzeit. MQTT erfordert jedoch einen eigenen Server, der als Vermittler zwischen den Netzwerkkunden fungiert. Hier gibt es zwei Möglichkeiten: entweder einen eigenen Server zu erstellen oder externe Dienste zu nutzen.

Das beschriebene Steuerungssystem besteht aus zwei Hauptteilen: einem MQTT-Server (in der Regel gibt es nur einen) und einer Vielzahl von Clients. In unserem Fall dienen als Clients die Android-App und das Modul esp8266.

Der Ablauf des Systems sieht folgendermaßen aus: Kunden verbinden sich mit dem Server, und sofort nach der Verbindung abonniert jeder von ihnen die Themen, die für ihn von Interesse sind. Alle Kommunikationen zwischen den Kunden verlaufen über den Server, der die Daten entsprechend ihren Abonnements an andere Kunden weiterleitet.

MQTT-Server.

In unserem Fall werden wir einen äußerst praktischen Service nutzen, www.cloudmqtt.com , der einen kostenlosen Tarif (Cute Cat) anbietet, der vollständig die Anforderungen für die Umsetzung eines kleinen eigenen "Smart Home"-Systems erfüllt.
Esp8266-Internetsteuerung über das MQTT-Protokoll
Wir registrieren uns auf der Website und erhalten die erforderlichen Daten für den Zugriff auf den Server. Bei der Konfiguration der Clients ist es notwendig, den regulären Port (ohne SSL und TLS) zu verwenden.
Esp8266-Internetsteuerung über das MQTT-Protokoll

Android-Anwendung.

Unsere Anwendung wird als Steuerzentrale für den Mikrocontroller fungieren und alle empfangenen Informationen von esp8266 anzeigen.

Die Anwendung heißt IoT MQTT Dashboard und ist ein fertiger MQTT-Client mit einer kleinen Anzahl sehr nützlicher Widgets. Weitere Informationen zur Nutzung der Anwendung finden Sie in einem Video.

Esp8266.

Das Modul wird in der Arduino-Programmierungsumgebung programmiert, jedoch möchte ich darauf hinweisen, dass es bei den neuesten Versionen von Arduino Probleme mit der Programmierung des Moduls gibt. Daher empfehle ich, die Version 1.6.4 zu verwenden.
Zum Beispiel sind ein LED (Pin 5) und ein Temperaturfühler DS18B20 (Pin 2) an das ESP8266 angeschlossen.
Da für die Steuerung der LED Daten benötigt werden, muss das ESP nach dem Anschluss ein Abonnement für das entsprechende Topic „test/led“ einrichten, da sonst alle gesendeten Daten an unserem Mikrocontroller vorbeigehen.
Für das Senden von Temperaturdaten ist kein Abonnement erforderlich, jedoch muss beim Übertragen der Temperaturwerte das Topic angegeben werden, in das diese Daten gesendet werden.

Im Folgenden finden Sie ein Sketch mit detaillierten Kommentaren.

Sketch Esp8266_mqtt.ino// Светодиод подлкючен к 5 пину
// Датчик температуры ds18b20 к 2 пину

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

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

const char *ssid = "AIRPORT"; // Name des WLAN-Zugangspunkts
const char *pass = "PASSWORD"; // Passwort für den Zugangspunkt

const char *mqtt_server = "server"; // Name des MQTT-Servers
const int mqtt_port = 11140; // Port für die Verbindung zum MQTT-Server
const char *mqtt_user = "Login"; // Login für den Server
const char *mqtt_pass = "Pass"; // Passwort für den Server

#define BUFFER_SIZE 100

bool LedState = false;
int tm=300;
float temp=0;

// Функция получения данных от сервера

void callback(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); // gibt den Namen des Topics auf dem seriellen Port aus
Serial.print(" => ");
Serial.print(pub.payload_string()); // sende die empfangenen Daten an den seriellen Port aus

String payload = pub.payload_string();

if(String(pub.topic()) == "test/led") // überprüfen, ob die Daten vom richtigen Thema kommen
{
int stled = payload.toInt(); // wandeln die empfangenen Daten in den Integer-Typ um
digitalWrite(5,stled); // schalten die LED je nach empfangenen Daten ein oder aus
}
}

WiFiClient wclient;
PubSubClient client(wclient, mqtt_server, mqtt_port);

void setup() {

sensors.begin();
Serial.begin(115200);
delay(10);
Serial.println();
Serial.println();
pinMode(5, OUTPUT);
}

void loop() {
// подключаемся к wi-fi
if (WiFi.status() != WL_CONNECTED) {
Serial.print("Connecting to ");
Serial.print(ssid);
Serial.println("...");
WiFi.begin(ssid, pass);

if (WiFi.waitForConnectResult() != WL_CONNECTED)
return;
Serial.println("WiFi connected");
}

// подключаемся к MQTT серверу
if (WiFi.status() == WL_CONNECTED) {
if (!client.connected()) {
Serial.println("Connecting to MQTT server");
if (client.connect(MQTT::Connect("arduinoClient2")
.set_auth(mqtt_user, mqtt_pass))) {
Serial.println("Connected to MQTT server");
client.set_callback(callback);
client.subscribe("test/led"); // abonnieren des Topics für die LED-Daten
} else {
Serial.println("Could not connect to MQTT server");
}
}

if (client.connected()){
client.loop();
TempSend();
}

}
} // Ende der Hauptschleife

// Функция отправки показаний с термодатчика
void TempSend(){
if (tm==0)
{
sensors.requestTemperatures(); // Temperatur vom Sensor abrufen
float temp = sensors.getTempCByIndex(0);
client.publish("test/temp",String(temp)); // senden der Temperaturwerte in das Topic für den Temperatursensor
Serial.println(temp);
tm = 300; // Pause zwischen den Temperaturwertübertragungen von etwa 3 Sekunden
}
tm--;
delay(10);
}

Das Ergebnis ist ein praktisches Tool für die Fernsteuerung und Datenüberwachung, das ziemlich einfach zu bedienen ist und auch für Anfänger geeignet sein wird.

Video zur Demonstration des Steuerungssystems

Video abspielen

Detaillierte Videoanleitung zur Einrichtung des Systems

Video abspielen

Eine der Möglichkeiten zur Nutzung der Steuerung des esp8266 über das MQTT-Protokoll

Video abspielen

Steuerung des LED-Streifens über das Internet

Video abspielen

Sollten Sie Fragen zu diesem Material haben, empfehle ich Ihnen, den zweiten Teil des Videos anzusehen, in dem das Material anschaulicher dargestellt wird.

Im Archiv befinden sich der Sketch und alle notwendigen Bibliotheken für das Flashen des Mikrokontrollers mit dem Beispielsketch.
Bitte beachten Sie, dass die Bibliothek ESP8266WiFi.h nicht in diesem Archiv enthalten ist; sie wird über den Board-Manager in der Arduino-Umgebung installiert.

ARCHIV

MQTT-Server — www.cloudmqtt.com

Link zur IoT MQTT Dashboard-App — play.google.com/store/apps/details?id=com.thn.iotmqttdashboard&hl=de

Vielen Dank für Ihre Aufmerksamkeit.

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster