
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 и ) 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 som har en gratis takstplan (Cute Cat), der fuldt ud vil dække behovene for implementering af et lille internt smart home system.

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).

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 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

Detaljerede videoinstruktioner til opsætning af systemet

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

Internetstyring af LED strip

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.
MQTT server -
Link til IoT MQTT Dashboard App −
Tak til jer alle for jeres opmærksomhed.
Kilde: www.habr.com
