
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 ( a ) 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 která má bezplatný tarif (Cute Cat), který plně pokryje potřeby pro realizaci malé vlastní "inteligentní domácnosti".

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

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

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

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

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

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.
MQTT server —
Odkaz na aplikaci IoT MQTT Dashboard —
Děkuji všem za pozornost.
Zdroj: habr.com
