Esp8266 upravljanje preko interneta po protokolu MQTT

Esp8266 upravljanje preko interneta po protokolu MQTT
Pozdravljeni! V tem članku bo podrobno opisano in prikazano, kako v le 20 minutah prostega časa nastaviti daljinsko upravljanje z modulom esp8266 preko aplikacije na Androidu po protokolu MQTT.

Ideja o daljinskem upravljanju in spremljanju je vedno vznemirjala umove entuziastov v elektroniki in programiranju. Možnost, da kadar koli pridobite ali pošljete potrebne podatke, ne glede na vašo lokacijo, nudi široke možnosti. V svojih prejšnjih člankih ( Članek 1 in Članek 2) sem poskušal obravnavati več dostopnih in razmeroma preprostih možnosti za izvajanje daljinskega upravljanja z mikrokontrolerji preko interneta. Vendar pa čas in ves svet ne stojita mirno – napredek neizprosno napreduje naprej. V tem kratkem času je modul esp8266 pridobil široko priljubljenost, saj je zaradi nizke cene in vgrajenega wi-fi postal ena od glavnih sestavin 'Pametnega doma'.

Trenutno je MQTT napreden in najbolj priljubljen protokol za prenos podatkov med posameznimi napravami v okviru sistemov 'Pametnega doma'. Ima vrsto prednosti v primerjavi z drugimi protokoli:
— nizka poraba prometa;
— povezava med odjemalcem in strežnikom je vedno odprta;
— ne obremenjuje internetne povezave;
— ni zamud pri prenosu podatkov;
— priročen sistem naročanja na teme;
Vse to omogoča spremljanje in upravljanje v realnem času. Vendar MQTT zahteva prisotnost lastnega strežnika, ki deluje kot posrednik med odjemalci omrežja. Tu imamo dve možnosti: ali ustvariti svoj strežnik ali uporabiti zunanje storitve.

Opisani sistem upravljanja je sestavljen iz dveh glavnih delov: strežnika MQTT (ki je običajno en sam) in odjemalcev, katerih je lahko precej veliko. V našem primeru bosta odjemalca aplikacija na Androidu in sam modul esp8266.

Algoritem delovanja sistema je naslednji. Odjemalci se povežejo s strežnikom, in takoj po povezovanju se vsak od njih naroči na teme, ki jih zanimajo. Vsa komunikacija med odjemalci poteka tranzitno prek strežnika, ki usmerja podatke drugim odjemalcem glede na njihove naročnine.

MQTT strežnik.

V našem případě budeme používat extrémně pohodlnou službu www.cloudmqtt.com , která má bezplatný tarifní plán (Cute Cat), jež plně pokryje potřeby pro realizaci malé vlastní systému "inteligentního domu".
Esp8266 upravljanje preko interneta po protokolu MQTT
Provedeme registraci na webových stránkách a obdržíme potřebné údaje pro přístup k serveru. Při nastavování klientů je třeba použít běžný port (bez SSL a TLS).
Esp8266 upravljanje preko interneta po protokolu MQTT

Aplikace na Android.

Naše aplikace bude sloužit jako ovládací panel pro mikrokontrolér a také bude přijímat a zobrazovat všechny informace, které získáme od esp8266.

Aplikace se jmenuje IoT MQTT Dashboard a představuje hotového mqtt klienta s menším množstvím velmi užitečných widgetů. Podrobněji o práci s aplikací se můžete podívat na videu.

Esp8266.

Modul je nahráván v prostředí Arduino, ale chci poznamenat, že modul má v posledních verzích Arduina problémy s nahráváním, takže doporučuji používat verzi 1.6.4.
Pro 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 třeba přijímat data, musí se esp po připojení přihlásit k odpovídajícímu tématu "test/led", jinak všechny odeslané údaje projdou kolem našeho mikrokontroléru.
Pro odesílání teplotních dat přihlášení není nutné, ale při přenosu hodnot teploty je třeba uvést téma, do kterého tyto údaje půjdou.

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

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á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řihlášení 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 tématu
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 tématu
{
int stled = payload.toInt(); // Převádíme přijatá data 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"); // подписываемся по топик с данными для светодиода
} else {
Serial.println("Could not connect to MQTT server");
}
}

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

}
} // конец основного цикла

// Функция отправки показаний с термодатчика
void TempSend(){
if (tm==0)
{
sensors.requestTemperatures(); // от датчика получаем значение температуры
float temp = sensors.getTempCByIndex(0);
client.publish("test/temp",String(temp)); // отправляем в топик для термодатчика значение температуры
Serial.println(temp);
tm = 300; // пауза меду отправками значений температуры коло 3 секунд
}
tm--;
delay(10);
}

Výsledkem je pohodlný nástroj pro dálkové ovládání a monitorování dat, který je poměrně snadný na naučení a bude zvládnutelný i pro začátečníky.

Video s demonstrací fungování řídícího systému

Predvajaj video

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

Predvajaj video

Jedna z možností použití ovládání ESP8266 přes protokol MQTT

Predvajaj video

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

Predvajaj video

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

V archivě jsou sketche a všechny potřebné knihovny pro nahrání firmware do mikrokontroléru dle příkladu.
Věnuji vaší pozornost, že knihovna ESP8266WiFi.h není součástí tohoto archivu, nainstaluje se 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=ru

Všem děkuji za pozornost.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster