Esp8266 Internetkontrol via MQTT-protokol

Esp8266 Internetkontrol via MQTT-protokol
Hej alle sammen! Denne artikel vil forklare og demonstrere i detaljer, hvordan man konfigurerer fjernbetjening af esp8266-modulet ved hjælp af en app på bare 20 minutter fritid. Android via MQTT-protokollen.

Ideen om fjernbetjening og overvågning har altid begejstret hovederne hos folk, der brænder for elektronik og programmering. Når alt kommer til alt, giver muligheden for at modtage eller sende de nødvendige data til enhver tid, uanset din placering, rige muligheder. I mine tidligere artikler Artikel 1 и Artikel 2) Jeg forsøgte at overveje flere overkommelige og relativt enkle muligheder for at implementere fjernstyring af mikrocontrollere via internettet. Tiden og hele verden står dog ikke stille – fremskridtet fortsætter sin ubønhørlige bevægelse fremad. I løbet af denne korte tid har esp8266-modulet vundet stor popularitet, som takket være dens lave pris og indbyggede wi-fi er blevet en af ​​hovedkomponenterne i Smart Home.

I øjeblikket er MQTT den avancerede og mest populære dataoverførselsprotokol mellem individuelle enheder inden for Smart Home-systemer. Det har flere fordele i forhold til andre protokoller:
— lavt trafikforbrug;
- forbindelsen mellem klienten og serveren er altid åben;
- indlæser ikke internetkanalen;
— fravær af forsinkelser i datatransmissionen;
— bekvemt system med abonnementer på emner;
Alt dette gør det muligt at overvåge og kontrollere i realtid. MQTT kræver dog sin egen server, som fungerer som mellemled mellem netværksklienter. Der er to måder at enten oprette din egen server eller bruge tredjepartstjenester på.

Det beskrevne styresystem består af to hoveddele: en MQTT-server (normalt kun én) og klienter, hvoraf der kan være en hel del. I vores tilfælde vil klienterne være en applikation, der kører på Android og selve esp8266-modulet.

Systemoperationsalgoritmen er som følger. Klienter opretter forbindelse til serveren, og umiddelbart efter tilslutning abonnerer hver af dem på de emner, der interesserer ham. Al kommunikation mellem klienter går gennem serveren, som omdirigerer data til andre klienter baseret på deres abonnementer.

MQTT server.

I vores tilfælde vil vi bruge en yderst bekvem service www.cloudmqtt.com som har en gratis takstplan (Cute Cat), der fuldt ud vil dække behovene for implementering af et lille internt smart home system.
Esp8266 Internetkontrol via MQTT-protokol
Lad os registrere os på siden og få de nødvendige data for at få adgang til serveren. Når du konfigurerer klienter, skal du bruge en almindelig port (uden SSL og TLS).
Esp8266 Internetkontrol via MQTT-protokol

Ansøgning på Android.

Vores applikation vil fungere som et kontrolpanel for mikrocontrolleren og vil også modtage og vise al information modtaget fra esp8266.

Ansøgningen kaldes IoT MQTT Dashboard og er en færdiglavet mqtt-klient med et lille antal meget praktiske widgets. Du kan se videoen for flere detaljer om, hvordan du bruger appen.

Esp8266.

Modulet er flashet i Arduino programmeringsmiljøet, dog vil jeg bemærke at modulet har problemer med firmwaren i de nyeste versioner af Arduino, så jeg anbefaler at bruge version 1.6.4.
For eksempel er en LED (8266 ben) og en temperatursensor ds5b18 (20 ben) forbundet til esp2.
Da det er nødvendigt at modtage data for at styre LED'en, efter tilslutning, skal esp abonnere på det tilsvarende "test / led" emne, ellers vil alle sendte data passere af vores mikrocontroller.
Du behøver ikke et abonnement for at sende temperaturdata, men når du sender temperaturværdier, skal du angive, hvilket emne disse data skal gå til.

Nedenfor er en skitse med detaljerede kommentarer.

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

#omfatte
#omfatte
#omfatte
#omfatte

#definer ONE_WIRE_BUS 2
En ledning en ledning(ONE_WIRE_BUS);
DallasTemperatursensorer (&oneWire);

const char *ssid = "LUFTHAVN"; // Navn på WiFi-adgangspunktet
const char *adgangskode = "ADGANGSKODE"; // Adgangskode fra adgangspunkt

const char *mqtt_server = "server"; // MQTT-servernavn
konstant int mqtt_port = 11140; // Port til forbindelse til MQTT-server
const char *mqtt_user = "Login"; // Logfiler fra serveren
const char *mqtt_pass = "Bestået"; // Serveradgangskode

#definer BUFFER_SIZE 100

bool LedState = falsk;
int tm=300;
flydetemperatur=0;

// Funktion til at modtage data fra serveren

void callback(const MQTT::Publish& pub)
{
Seriel.print(pub.emne()); // udskriv emnenavnet til den serielle port
Seriel.print(" => ");
Seriel.print(pub.payload_string()); // udsend værdien af ​​de modtagne data til den serielle port

String nyttelast = pub.nyttelast_streng();

hvis (String (pub.topic ()) == "test/led") // tjek om dataene kom fra det emne, vi har brug for
{
int stled = payload.toInt(); // konverter de modtagne data til heltalsdata
digitalWrite(5,stled); // tænd eller sluk LED'en afhængigt af de modtagne dataværdier
}
}

WiFi-klient wclient;
PubSubClient klient(wclient, mqtt_server, mqtt_port);

ugyldig opsætning () {

sensorer.begin();
Serial.begin (115200);
forsinkelse (10);
Serial.println ();
Serial.println ();
pinMode (5, OUTPUT);
}

void loop () {
// opret forbindelse til Wi-Fi
hvis (WiFi.status() != WL_CONNECTED) {
Seriel.print("Opretter forbindelse til");
Seriel.print(ssid);
Seriel.println("...");
WiFi.begin(ssid, pass);

hvis (WiFi.waitForConnectResult() != WL_CONNECTED)
vende tilbage;
Serial.println("WiFi tilsluttet");
}

// opret forbindelse til MQTT-server
hvis (WiFi.status() == WL_CONNECTED) {
hvis (!klient.tilsluttet()) {
Serial.println("Opretter forbindelse til MQTT-server");
hvis (client.connect(MQTT::Connect("arduinoClient2")
.set_auth(mqtt_user, mqtt_pass))) {
Serial.println("Forbundet til MQTT-server");
klient.sæt_tilbagekald(tilbagekald);
klient.abonner("test/led"); // abonner på emnet med data til LED'en
} Else {
Serial.println("Kunne ikke oprette forbindelse til MQTT-server");
}
}

hvis (klient.tilsluttet()) {
klient.løkke();
MidlertidigSend();
}

}
} // slutningen af ​​hovedløkken

// Funktion til at sende aflæsninger fra en temperatursensor
void TempSend() {
hvis (tm==0)
{
sensorer.anmodningTemperaturer(); // vi får temperaturværdien fra sensoren
float temp = sensorer.getTempCByIndex(0);
klient.publicer("test/temp",String(temp)); // send temperaturværdien til emnet for temperatursensoren
Serial.println(temp);
tm = 300; // pause mellem afsendelse af temperaturværdier ca. 3 sekunder
}
tm--;
forsinkelse (10);
}

Som et resultat får vi et praktisk værktøj til fjernstyring og overvågning af data, som er ret let at lære, og selv begyndere vil være i stand til at gøre.

Video, der demonstrerer betjeningen af ​​kontrolsystemet

Afspil video

Detaljerede videoinstruktioner til opsætning af systemet

Afspil video

En af mulighederne for at bruge esp8266 kontrol via MQTT-protokollen

Afspil video

Internetstyring af LED strip

Afspil video

Hvis du har spørgsmål til dette materiale, så anbefaler jeg at se anden del af videoen, hvor materialet præsenteres mere overskueligt.

Arkivet indeholder skitsen og alle de nødvendige biblioteker til at flashe mikrocontrolleren med skitsen fra eksemplet.
Bemærk venligst, at ESP8266WiFi.h-biblioteket ikke er inkluderet i dette arkiv, det er installeret via Boards-manageren i Arduino-miljøet.

ARKIV

MQTT server - www.cloudmqtt.com

Link til IoT MQTT Dashboard App − play.google.com/store/apps/details?id=com.thn.iotmqttdashboard&hl=ru

Tak til jer alle for jeres opmærksomhed.

Kilde: www.habr.com

Køb pålidelig hosting til websteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster