Esp8266 Internetsteuerung über das MQTT-Protokoll


Hallo allerseits! In diesem Artikel wird detailliert beschrieben und gezeigt, wie die Fernbedienung des esp8266-Moduls mithilfe der Android-Anwendung mithilfe des MQTT-Protokolls in nur 20 Minuten Freizeit buchstäblich konfiguriert wird.

Die Idee der Fernsteuerung und -überwachung hat schon immer Menschen begeistert, die sich für Elektronik und Programmierung begeistern. Schließlich bietet die Möglichkeit, jederzeit die erforderlichen Daten unabhängig von ihrem Standort zu empfangen oder zu senden, zahlreiche Möglichkeiten. In seinen früheren Artikeln ( Artikel 1 und Artikel 2) Ich habe versucht, mehrere erschwingliche und relativ einfache Optionen für die Implementierung der Fernsteuerung von Mikrocontrollern über das Internet in Betracht zu ziehen. Die Zeit und die ganze Welt stehen jedoch nicht still - der Fortschritt setzt seinen unaufhaltsamen Fortschritt fort. In dieser kurzen Zeit gewann das esp8266-Modul große Popularität, das dank seines niedrigen Preises und des eingebauten Wi-Fi zu einer der Hauptkomponenten des Smart Home geworden ist.

Derzeit ist MQTT das fortschrittlichste und beliebteste Protokoll für die Datenübertragung zwischen einzelnen Geräten im Rahmen von Smart Home-Systemen. Es hat eine Reihe von Vorteilen gegenüber anderen Protokollen:
- geringer Verkehrsverbrauch;
- Die Verbindung zwischen Client und Server ist immer offen;
- lädt den Internetkanal nicht;
- keine Verzögerungen bei der Datenübertragung;
- bequemes Abonnementsystem für Themen;
All dies ermöglicht die Überwachung und Steuerung in Echtzeit. MQTT benötigt jedoch einen eigenen Server, der als Vermittler zwischen Netzwerkclients fungiert. Es gibt zwei Möglichkeiten, entweder einen eigenen Server zu erstellen oder Dienste von Drittanbietern zu verwenden.

Das beschriebene Steuerungssystem besteht aus zwei Hauptteilen: dem MQTT-Server (normalerweise einer) und Clients, was ziemlich viel sein kann. In unserem Fall fungieren die Android-Anwendung und das esp8266-Modul selbst als Clients.

Der Systembetriebsalgorithmus ist wie folgt. Clients stellen eine Verbindung zum Server her und abonnieren unmittelbar nach dem Verbinden jeweils Themen, die für ihn von Interesse sind. Die gesamte Kommunikation zwischen Clients erfolgt über einen Server, der Daten basierend auf ihren Abonnements an andere Clients umleitet.

MQTT-Server.

In unserem Fall werden wir den äußerst praktischen Service www.cloudmqtt.com nutzen, der über einen kostenlosen Tarifplan (Cute Cat) verfügt, der den Bedarf für die Implementierung eines eigenen kleinen „Smart Home“ -Systems vollständig abdeckt.

Lassen Sie uns die Registrierung auf der Site durchgehen und die erforderlichen Daten für den Zugriff auf den Server abrufen. Bei der Konfiguration von Clients müssen Sie einen regulären Port verwenden (ohne SSL und TLS).


Android App.

Unsere Anwendung fungiert als Bedienfeld für den Mikrocontroller und empfängt und zeigt alle empfangenen Informationen von esp8266 an.

Die Anwendung heißt IoT MQTT Dashboard und ist ein vorgefertigter mqtt-Client mit einer kleinen Anzahl sehr praktischer Widgets. Weitere Details zur Arbeit mit der Anwendung finden Sie im Video.

Esp8266.

Das Modul wird in der Arduino-Programmierumgebung geflasht, aber ich möchte darauf hinweisen, dass das Modul Probleme mit der Firmware in den neuesten Versionen von Arduino hat. Daher empfehle ich die Verwendung von Version 1.6.4.
Beispielsweise sind eine LED (5-polig) und ein Temperatursensor ds18b20 (2-polig) an den esp8266 angeschlossen.
Da es erforderlich ist, Daten zur Steuerung der LED zu empfangen, muss insbesondere nach dem Anschließen das entsprechende Thema „Test / LED“ abonniert werden, da sonst alle gesendeten Daten von unserem Mikrocontroller weitergeleitet werden.
Zum Senden von Temperaturdaten ist kein Abonnement erforderlich. Bei der Übertragung von Temperaturwerten müssen Sie jedoch das Thema angeben, zu dem diese Daten gehen sollen.

Unten finden Sie eine Skizze mit detaillierten Kommentaren.

Skizzieren Sie 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"; //
const char *pass = "PASSWORD"; //

const char *mqtt_server = "server"; // MQTT
const int mqtt_port = 11140; // MQTT
const char *mqtt_user = "Login"; //
const char *mqtt_pass = "Pass"; //

#define BUFFER_SIZE 100

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

//

void callback(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); //
Serial.print(" => ");
Serial.print(pub.payload_string()); //

String payload = pub.payload_string();

if(String(pub.topic()) == "test/led") //
{
int stled = payload.toInt(); // integer
digitalWrite(5,stled); //
}
}

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"); //
} else {
Serial.println("Could not connect to MQTT server");
}
}

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

}
} //

//
void TempSend(){
if (tm==0)
{
sensors.requestTemperatures(); //
float temp = sensors.getTempCByIndex(0);
client.publish("test/temp",String(temp)); //
Serial.println(temp);
tm = 300; // 3
}
tm--;
delay(10);
}



Als Ergebnis erhalten wir ein praktisches Tool für die Fernsteuerung und Datenüberwachung, das recht einfach zu erlernen ist und auch für Anfänger effektiv ist.

Video zur Funktionsweise des Steuerungssystems


Detaillierte Anweisungen zur Einrichtung des Videosystems


Eine Anwendung der esp8266-Steuerung über das MQTT-Protokoll


LED-Streifensteuerung über das Internet


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

Das Archiv enthält die Skizze und alle notwendigen Bibliotheken zum Flashen des Mikrocontrollers mit der Skizze aus dem Beispiel.
Ich mache Sie darauf aufmerksam, dass die Bibliothek ESP8266WiFi.h nicht in diesem Archiv enthalten ist und über den Boards-Manager in der Arduino-Umgebung installiert wird.

ARCHIVE

MQTT-Server - www.cloudmqtt.com

Link zur IoT MQTT-Dashboard-Anwendung - play.google.com/store/apps/details?id=com.thn.iotmqttdashboard

Vielen Dank für Ihre Aufmerksamkeit.

Source: https://habr.com/ru/post/de393277/


All Articles