Esp8266 řízení přes internet pomocí protokolu MQTT

Esp8266 řízení přes internet pomocí protokolu MQTT
Ahoj všichni! V tomto článku bude podrobně popsáno a ukázáno, jak doslova za 20 minut volného času nastavit dálkové ovládání modulu esp8266 pomocí aplikace na Android přes protokol MQTT.

Myšlenka dálkového ovládání a monitorování vždy vzrušovala mysl nadšenců v oblasti elektroniky a programování. Možnost kdykoli získat nebo odeslat potřebná data bez ohledu na svou polohu nabízí široké možnosti. Ve svých předchozích článcích ( Článek 1 a Článek 2) jsem se snažil prozkoumat několik dostupných a relativně jednoduchých variant realizace dálkového ovládání mikrokontroléry přes internet. Avšak čas a celý svět nezůstávají na místě – pokrok pokračuje neúprosně vpřed. Během této krátké doby si modul esp8266 získal širokou popularitu, protože díky nízké ceně a vestavěnému wi-fi se stal jednou z hlavních součástí "Chytré domácnosti".

V současné době je MQTT inovativní a nejpopulárnější protokol pro přenos dat mezi jednotlivými zařízeními v rámci systémů "Chytré domácnosti". Má několik výhod oproti jiným protokolům:
— nízká spotřeba dat;
— spojení mezi klientem a serverem je vždy otevřené;
— nezatěžuje internetový kanál;
— absence zpoždění v přenosu dat;
— pohodlný systém odběru na témata;
To vše umožňuje monitorování a ovládání v reálném čase. Nicméně MQTT vyžaduje existenci vlastního serveru, který slouží jako prostředník mezi klienty sítě. Tady jsou dvě cesty: buď vytvořit svůj vlastní server nebo používat externí služby.

Popisovaný systém řízení se skládá ze dvou hlavních částí: serveru MQTT (obvykle je jen jeden) a klientů, kterých může být poměrně hodně. V našem případě budou klienty aplikace na Android a samotný modul esp8266.

Algoritmus fungování systému je následující. Klienti se připojují k serveru a hned po připojení se každý z nich přihlásí k tématům, které je zajímají. Veškerá komunikace mezi klienty probíhá tranzitně přes server, který přesměrovává data jiným klientům s ohledem na jejich odběry.

MQTT server.

V našem případě použijeme velmi pohodlnou službu www.cloudmqtt.com která má bezplatný tarif (Cute Cat), který plně pokryje potřeby pro realizaci malé vlastní "inteligentní domácnosti".
Esp8266 řízení přes internet pomocí protokolu MQTT
Zaregistrujeme se na webu a získáme potřebné údaje pro přístup k serveru. Při nastavování klientů je nutné použít standardní port (bez SSL a TLS).
Esp8266 řízení přes internet pomocí protokolu MQTT

Aplikace pro Android.

Naše aplikace bude sloužit jako ovládací panel pro mikrořadič a také bude přijímat a zobrazovat všechny informace přijímané od esp8266.

Aplikace se jmenuje IoT MQTT Dashboard a představuje hotového mqtt klienta s několika velmi užitečnými widgety. Podrobnosti o práci s aplikací si můžete prohlédnout na videu.

Esp8266.

Modul se programuje v prostředí Arduino, ale chci poznamenat, že modul má problémy s nahráváním v posledních verzích Arduina, proto doporučuji použít verzi 1.6.4.
Jako příklad je k esp8266 připojena LED dioda (pin 5) a teplotní senzor ds18b20 (pin 2).
Protože pro ovládání LED diody je nutné získávat data, musí se esp po připojení přihlásit k odpovídajícímu topicu "test/led", jinak všechny odeslané údaje projdou kolem našeho mikrořadiče.
Pro odesílání teplotních dat není potřeba přihlášení, ale při převodu teplotních hodnot je nutné uvést topic, do kterého tyto údaje půjdou.

Níže je uveden skica s podrobnými komentáři.

Skica 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ázev Wi-Fi přístupového bodu
const char *pass = "PASSWORD"; // Heslo k přístupovému bodu

const char *mqtt_server = "server"; // Název MQTT serveru
const int mqtt_port = 11140; // Port pro připojení k MQTT serveru
const char *mqtt_user = "Login"; // Přihlašovací ú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()); // Vypisujeme do sériového portu název topicu
Serial.print(" => ");
Serial.print(pub.payload_string()); // Vypisujeme do sériového portu hodnotu přijatých dat

String payload = pub.payload_string();

if(String(pub.topic()) == "test/led") // Kontrolujeme, zda data přišla z potřebného topicu
{
int stled = payload.toInt(); // Převádíme přijaté údaje na typ integer
digitalWrite(5, stled); // Zapínáme nebo vypínáme LED diodu podle přijatých hodnot
}
}

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"); // přihlásit se k tématu dat pro LED diodu
} else {
Serial.println("Could not connect to MQTT server");
}
}

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

}
} // konec hlavního cyklu

// Функция отправки показаний с термодатчика
void TempSend(){
if (tm==0)
{
sensors.requestTemperatures(); // získat hodnotu teploty ze senzoru
float temp = sensors.getTempCByIndex(0);
client.publish("test/temp", String(temp)); // poslat hodnotu teploty do tématu pro teploměr
Serial.println(temp);
tm = 300; // pauza mezi odesíláním hodnot teploty přibližně 3 sekundy
}
tm--;
delay(10);
}

V důsledku toho máme pohodlný nástroj pro vzdálené řízení a monitorování údajů, který je poměrně snadno ovladatelný a zvládne ho i začátečník.

Video s ukázkou funkce řídicího systému

Přehrát video

Podrobný video návod na nastavení systému

Přehrát video

Jeden z variant aplikace řízení esp8266 přes MQTT protokol

Přehrát video

Ovládání LED pásku přes internet

Přehrát video

Pokud máte dotazy k tomuto materiálu, doporučuji se podívat na druhou část videa, kde je materiál podán názorněji.

V archivu se nachází skica a všechny potřebné knihovny pro nahrání mikrokontroléru skicou z příkladu.
Věnuji vaší pozornosti, že knihovna ESP8266WiFi.h není součástí tohoto archivu, je třeba ji nainstalovat přes správce desek v prostředí Arduino.

ARCHIV

MQTT server — www.cloudmqtt.com

Odkaz na aplikaci IoT MQTT Dashboard — play.google.com/store/apps/details?id=com.thn.iotmqttdashboard&hl=cs

Děkuji všem za pozornost.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster