Esp8266 ovládanie internetu cez protokol MQTT

Esp8266 ovládanie internetu cez protokol MQTT
Ahojte všetci! Tento článok podrobne vysvetlí a ukáže, ako nastaviť diaľkové ovládanie modulu esp8266 pomocou aplikácie za púhych 20 minút. Android prostredníctvom protokolu MQTT.

Myšlienka diaľkového ovládania a monitorovania vždy vzrušovala mysle ľudí nadšených pre elektroniku a programovanie. Koniec koncov, možnosť prijímať alebo odosielať potrebné údaje kedykoľvek, bez ohľadu na vašu polohu, poskytuje dostatok príležitostí. V mojich minulých článkoch ( Článok 1 и Článok 2) Snažil som sa zvážiť niekoľko dostupných a relatívne jednoduchých možností realizácie diaľkového ovládania mikrokontrolérov cez internet. Čas a celý svet však nestoja – pokrok pokračuje vo svojom neúprosnom pohybe vpred. Za túto krátku dobu si získal širokú obľubu modul esp8266, ktorý sa vďaka nízkej cene a zabudovanej wi-fi stal jedným z hlavných komponentov Smart Home.

V súčasnosti je MQTT pokročilý a najpopulárnejší protokol na prenos dát medzi jednotlivými zariadeniami v rámci systémov Smart Home. Oproti iným protokolom má niekoľko výhod:
— nízka spotreba dopravy;
— spojenie medzi klientom a serverom je vždy otvorené;
— nenačíta internetový kanál;
— žiadne oneskorenia pri prenose údajov;
— pohodlný systém odberov tém;
To všetko umožňuje sledovať a ovládať v reálnom čase. MQTT však vyžaduje vlastný server, ktorý funguje ako sprostredkovateľ medzi sieťovými klientmi. Tu sú dve možnosti: buď si vytvorte vlastný server alebo použite služby tretích strán.

Popisovaný riadiaci systém sa skladá z dvoch hlavných častí: MQTT servera (zvyčajne len jedného) a klientov, ktorých môže byť pomerne veľa. V našom prípade budú klientmi aplikácia bežiaca na Android a samotný modul esp8266.

Algoritmus činnosti systému je nasledujúci. Klienti sa pripájajú na server a hneď po pripojení sa každý z nich prihlási k témam, ktoré ho zaujímajú. Všetka komunikácia medzi klientmi prechádza cez server, ktorý presmeruje údaje na iných klientov na základe ich predplatného.

server MQTT.

V našom prípade využijeme mimoriadne pohodlnú službu www.cloudmqtt.com ktorá má bezplatný tarifný plán (Cute Cat), ktorý plne pokryje potreby implementácie malého vlastného systému „inteligentnej domácnosti“.
Esp8266 ovládanie internetu cez protokol MQTT
Zaregistrujme sa na stránke a získajme potrebné údaje na prístup na server. Pri konfigurácii klientov musíte použiť bežný port (bez SSL a TLS).
Esp8266 ovládanie internetu cez protokol MQTT

Žiadosť o Android.

Naša aplikácia bude fungovať ako ovládací panel pre mikrokontrolér a bude tiež prijímať a zobrazovať všetky informácie prijaté z esp8266.

Aplikácia sa volá IoT MQTT Dashboard a je to hotový klient mqtt s malým počtom veľmi pohodlných widgetov. Viac podrobností o používaní aplikácie si môžete pozrieť vo videu.

Esp8266.

Modul je flashovaný v programovacom prostredí Arduino, ale rád by som poznamenal, že modul má problémy s firmvérom v najnovších verziách Arduina, preto odporúčam použiť verziu 1.6.4.
Napríklad LED (8266 pinov) a teplotný senzor ds5b18 (20 piny) sú pripojené k esp2.
Keďže na ovládanie LED je potrebné prijímať dáta, po pripojení sa esp musí prihlásiť k odberu príslušnej témy „test/led“, inak všetky odoslané dáta prejdú naším mikrokontrolérom.
Na odosielanie údajov o teplote nepotrebujete predplatné, ale pri odosielaní hodnôt teploty musíte uviesť tému, ku ktorej tieto údaje budú smerovať.

Nižšie je uvedený náčrt s podrobnými komentármi.

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

#include
#zahrnúť
#zahrnúť
#zahrnúť

#definovať JEDNODRÔTOVÚ_ZBERNICU 2
JedenWire jedenWire(JEDNODRÔTOVÁ_ZBUSNICA);
DallasTeplotné senzory (&oneWire);

const char *ssid = "LETISKO"; // Názov prístupového bodu WiFi
const char *pass = "HESLO"; // Heslo z prístupového bodu

const char *mqtt_server = "server"; // názov servera MQTT
const int mqtt_port = 11140; // Port pre pripojenie k MQTT serveru
const char *mqtt_user = "Prihlásenie"; // Záznamy zo servera
const char *mqtt_pass = "Heslo"; // Heslo servera

#definovať BUFFER_SIZE 100

bool StavLed = false;
int tm=300;
teplota plaváka = 0;

// Funkcia na príjem údajov zo servera

void callback(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); // vypíše názov témy na sériový port
Serial.print(" => ");
Serial.print(pub.payload_string()); // výstup prijatej dátovej hodnoty do sériového portu

Reťazec užitočné zaťaženie = pub.reťazec_užitočného_zaťaženia();

if(String(pub.topic()) == "test/led") // skontrolujeme, či dáta pochádzajú z požadovanej témy
{
int stled = payday.toInt(); // prevod prijatých dát na celočíselný typ
digitalWrite(5,stled); // zapne alebo vypne LED diódu v závislosti od prijatých hodnôt údajov
}
}

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

void setup () {

senzory.begin();
Serial.egegin (115200);
oneskorenie (10);
Serial.println ();
Serial.println ();
pinMode (5, VÝSTUP);
}

void loop () {
// pripojenie k Wi-Fi
ak (WiFi.status() != WL_CONNECTED) {
Serial.print("Pripájam sa k ");
Serial.print(ssid);
Serial.println("...");
WiFi.begin(ssid, pass);

ak (WiFi.waitForConnectResult() != WL_CONNECTED)
návrat;
Serial.println("Pripojené k Wi-Fi");
}

// pripojenie k MQTT serveru
ak (WiFi.status() == WL_CONNECTED) {
if (!client.connected()) {
Serial.println("Pripájam sa k serveru MQTT");
ak (client.connect(MQTT::Connect("arduinoClient2")
.set_auth(používateľ_mqtt, heslo_mqtt))) {
Serial.println("Pripojené k serveru MQTT");
klient.set_callback(spätné volanie);
client.subscribe("test/led"); // prihlásiť sa na odber témy s údajmi pre LED diódu
} Else {
Serial.println("Nepodarilo sa pripojiť k serveru MQTT");
}
}

ak (klient.pripojený()){
klient.loop();
DočasnéOdoslanie();
}

}
} // koniec hlavnej slučky

// Funkcia na odosielanie údajov z teplotného senzora
void TempSend(){
ak (tm==0)
{
sensors.requestTemperatures(); // získame hodnotu teploty zo senzora
float temp = sensors.getTempCByIndex(0);
client.publish("test/temp",String(temp)); // odošle hodnotu teploty do témy pre teplotný senzor
Serial.println(dočasný);
tm = 300; // pauza medzi odosielaním hodnôt teploty približne 3 sekundy
}
tm--;
oneskorenie (10);
}

Výsledkom je pohodlný nástroj na diaľkové ovládanie a monitorovanie údajov, ktorý sa dá celkom ľahko naučiť a môžu ho používať aj začiatočníci.

Video demonštrujúce fungovanie riadiaceho systému

Prehrať video

Podrobný video návod na nastavenie systému

Prehrať video

Jedna z možností využitia ovládania esp8266 cez protokol MQTT

Prehrať video

Ovládanie LED pásika cez internet

Prehrať video

Ak máte nejaké otázky k tomuto materiálu, odporúčam pozrieť si druhú časť videa, kde je materiál podaný prehľadnejšie.

Archív obsahuje skicu a všetky potrebné knižnice na flashovanie mikrokontroléra skicou z príkladu.
Upozorňujeme, že knižnica ESP8266WiFi.h nie je súčasťou tohto archívu, inštaluje sa cez Boards manager v prostredí Arduino.

ARCHÍV

server MQTT - www.cloudmqtt.com

Odkaz na aplikáciu IoT MQTT Dashboard – play.google.com/store/apps/details?id=com.thn.iotmqttdashboard

Ďakujem vám všetkým za vašu pozornosť.

Zdroj: hab.com

Kúpte si spoľahlivý hosting pre stránky s DDoS ochranou, VPS VDS servery 🔥 Kúpte si spoľahlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster