Esp8266 ovládanie cez internet podľa protokolu MQTT

Esp8266 ovládanie cez internet podľa protokolu MQTT
Ahojte všetci! V tomto článku podrobne popíšem a ukážem, ako si za 20 minút voľného času nastaviť vzdialené ovládanie modulu esp8266 pomocou aplikácie na Android podle protokolu MQTT.

Myšlienka vzdialeného ovládania a monitorovania vždy fascinovala tých, ktorí sa zaoberajú elektronikou a programovaním. Možnosť v ktoromkoľvek okamihu získať alebo odoslať potrebné dáta, nezávisle od svojho umiestnenia, ponúka široké možnosti. V mojich predchádzajúcich článkoch ( Článok 1 a Článok 2) som sa snažil preskúmať niekoľko dostupných a relatívne jednoduchých variantov realizácie vzdialeného ovládania mikrokontrolérmi cez internet. Avšak čas a celý svet nestojí na mieste – pokrok neúprosne postupuje vpred. Počas tejto krátkej doby sa modul esp8266 stal veľmi populárnym, pretože vďaka nízkej cene a integrovanému wi-fi sa stal jedným z hlavných komponentov „Inteligentného domu“.

V súčasnosti je MQTT najpokročilejší a najpopulárnejší protokol na prenos dát medzi jednotlivými zariadeniami v rámci systémov „Inteligentného domu“. Má niekoľko výhod oproti iným protokolom:
— nízka spotreba dát;
— spojenie medzi klientom a serverom je vždy otvorené;
— nespôsobuje tlak na internetový kanál;
— absencia oneskorení pri prenose dát;
— pohodlný systém odberu tém;
To všetko umožňuje monitorovanie a ovládanie v reálnom čase. Avšak MQTT vyžaduje existenciu vlastného servera, ktorý slúži ako sprostredkovateľ medzi klientmi siete. Tu sú dve možnosti: buď vytvoriť vlastný server alebo využiť externé služby.

Opísaný systém riadenia pozostáva z dvoch hlavných častí: servera MQTT (zvyčajne jediného) a klientov, ktorých môže byť pomerne veľa. V našom prípade budú klientmi aplikácia na Android a samotný modul esp8266.

Algoritmus práce systému je nasledujúci. Klienti sa pripoja k serveru a bezprostredne po pripojení sa každý z nich prihlási na zaujímavé témy. Všetka komunikácia medzi klientmi prebieha tranzitne cez server, ktorý smeruje dáta iným klientom s ohľadom na ich odber.

MQTT server.

V našom prípade použijeme veľmi pohodlnú službu www.cloudmqtt.com , ktorá má bezplatný tarif (Cute Cat), ktorý úplne pokryje potreby na realizáciu malej vlastnej systému "inteligentného domu".
Esp8266 ovládanie cez internet podľa protokolu MQTT
Zaregistrujeme sa na stránke a získame potrebné údaje na prístup k serveru. Pri nastavovaní klientskej aplikácie je potrebné použiť bežný port (bez SSL a TLS).
Esp8266 ovládanie cez internet podľa protokolu MQTT

Aplikácia pre Android.

Naša aplikácia bude slúžiť ako diaľkové ovládanie pre mikrokontrolér a taktiež bude prijímať a zobrazovať všetky získané informácie z esp8266.

Aplikácia sa nazýva IoT MQTT Dashboard a predstavuje kompletný mqtt klient s malým počtom veľmi pohodlných widgetov. Podrobnejšie informácie o práci s aplikáciou si môžete pozrieť vo videu.

Esp8266.

Modul sa nahráva v prostredí programovania Arduino, avšak chcem poznamenať, že modul má problémy s nahrávaním v posledných verziách Arduina, preto odporúčam použiť verziu 1.6.4.
Ako príklad je k esp8266 pripojená LED dióda (pin 5) a teplotný senzor ds18b20 (pin 2).
Keďže na ovládanie LED diódy je potrebné získavať údaje, esp po pripojení musí prihlásiť odber na príslušnú tému "test/led" inak všetky odoslané dáta prejdú okolo nášho mikrokontroléra.
Na odosielanie teplotných údajov nie je potrebné prihlásiť sa, ale pri prenose hodnôt teploty je potrebné uviesť tému, do ktorej tieto údaje pôjdu.

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

Skeč 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"; // Názov Wi-Fi prístupového bodu
const char *pass = "PASSWORD"; // Heslo k prístupovému bodu

const char *mqtt_server = "server"; // Názov MQTT servera
const int mqtt_port = 11140; // Port na pripojenie k MQTT serveru
const char *mqtt_user = "Login"; // Prihlasovacie údaje k serveru
const char *mqtt_pass = "Pass"; // Heslo k serveru

#define BUFFER_SIZE 100

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

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

void callback(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); // cez sériový port vypíšeme názov témy
Serial.print(" => ");
Serial.print(pub.payload_string()); // cez sériový port vypíšeme hodnotu prijatých údajov

String payload = pub.payload_string();

if(String(pub.topic()) == "test/led") // kontrolujeme, z ktorej témy nám prišli údaje
{
int stled = payload.toInt(); // prevádzame prijaté údaje na typ integer
digitalWrite(5,stled); // zapneme alebo vypneme LED diódu v závislosti od prijatých hodnôt údajov
}
}

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"); // prihlásime sa k téme s údajmi pre LED
} else {
Serial.println("Could not connect to MQTT server");
}
}

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

}
} // koniec hlavného cyklu

// Функция отправки показаний с термодатчика
void TempSend(){
if (tm==0)
{
sensors.requestTemperatures(); // získať hodnotu teploty z senzora
float temp = sensors.getTempCByIndex(0);
client.publish("test/temp",String(temp)); // posielame do témy pre teplomer hodnotu teploty
Serial.println(temp);
tm = 300; // prestávka medzi odosielaním hodnôt teploty približne 3 sekundy
}
tm--;
delay(10);
}

V dôsledku tohto získavame pohodlný nástroj na diaľkové ovládanie a monitorovanie údajov, ktorý je dosť jednoduchý na naučenie a bude zvládnuteľný aj pre začiatočníkov.

Video s demonštráciou fungovania systému ovládania

Prehrajte video

Podrobný video návod na nastavenie systému

Prehrajte video

Jeden z variantov aplikácie ovládania esp8266 cez MQTT protokol

Prehrajte video

Ovládanie LED pásku cez internet

Prehrajte video

Ak máte otázky ohľadom tohto materiálu, odporúčam pozrieť druhú časť videa, kde je materiál podaný zrozumiteľnejšie.

V archíve sa nachádzajú sketch a všetky potrebné knižnice na prepísanie mikrokontroléra sketchom z príkladu.
Upozorňujem, že knižnica ESP8266WiFi.h nie je zahrnutá v tomto archíve, inštaluje sa cez správcov dosiek v prostredí Arduino.

ARCHÍV

MQTT server — www.cloudmqtt.com

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

Všetkým ďakujem za pozornosť.

Zdroj: habr.com

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