Esp8266 Control d'Internet mitjançant protocol MQTT

Esp8266 Control d'Internet mitjançant protocol MQTT
Hola a tots! Aquest article descriurà detalladament i mostrarà com configurar el control remot del mòdul esp20 mitjançant una aplicació d'Android utilitzant el protocol MQTT en només 8266 minuts de temps lliure.

La idea del control remot i la supervisió sempre ha emocionat la ment de les persones apassionades per l'electrònica i la programació. Després de tot, la possibilitat de rebre o enviar les dades necessàries en qualsevol moment, independentment de la vostra ubicació, ofereix àmplies oportunitats. En els meus articles anteriors Article 1 и Article 2) Vaig intentar considerar diverses opcions assequibles i relativament senzilles per implementar el control remot de microcontroladors a través d'Internet. Tanmateix, el temps i el món sencer no s'atura: el progrés continua el seu inexorable moviment cap endavant. Durant aquest curt període de temps, el mòdul esp8266 ha guanyat una gran popularitat, que, gràcies al seu baix preu i al seu wi-fi integrat, s'ha convertit en un dels components principals de la Smart Home.

Actualment, MQTT és el protocol de transferència de dades avançat i més popular entre dispositius individuals dins dels sistemes Smart Home. Té diversos avantatges respecte a altres protocols:
— baix consum de trànsit;
- la connexió entre el client i el servidor està sempre oberta;
- no carrega el canal d'Internet;
— absència de retards en la transmissió de dades;
— sistema convenient de subscripcions a temes;
Tot això fa possible monitoritzar i controlar en temps real. Tanmateix, MQTT requereix el seu propi servidor, que actua com a intermediari entre els clients de la xarxa. Hi ha dues maneres de crear el vostre propi servidor o utilitzar serveis de tercers.

El sistema de control descrit consta de dues parts principals: el servidor MQTT (acostuma a ser un) i els clients, que poden ser força. En el nostre cas, l'aplicació d'Android i el mateix mòdul esp8266 actuaran com a clients.

L'algorisme de funcionament del sistema és el següent. Els clients es connecten al servidor i immediatament després de connectar-se, cadascun d'ells es subscriu als temes que li interessen. Tota la comunicació entre clients transita pel servidor, que redirigeix ​​les dades a altres clients en funció de les seves subscripcions.

Servidor MQTT.

En el nostre cas, utilitzarem un servei extremadament convenient www.cloudmqtt.com que compta amb un pla tarifari gratuït (Cute Cat) que cobrirà totalment les necessitats d'implementació d'un petit sistema domèstic intel·ligent a casa.
Esp8266 Control d'Internet mitjançant protocol MQTT
Registrem-nos al lloc i obtenim les dades necessàries per accedir al servidor. Quan configureu clients, heu d'utilitzar un port normal (sense SSL i TLS).
Esp8266 Control d'Internet mitjançant protocol MQTT

Aplicació per a Android.

La nostra aplicació actuarà com a panell de control del microcontrolador, i també rebrà i mostrarà tota la informació rebuda de l'esp8266.

L'aplicació es diu Tauler de control IoT MQTT i és un client mqtt ja fet amb un petit nombre de ginys molt útils. Podeu veure el vídeo per obtenir més detalls sobre com utilitzar l'aplicació.

Esp8266.

El mòdul es mostra a l'entorn de programació Arduino, però, vull assenyalar que el mòdul té problemes amb el microprogramari a les últimes versions d'Arduino, per la qual cosa recomano utilitzar la versió 1.6.4.
Per exemple, un LED (8266 pins) i un sensor de temperatura ds5b18 (20 pins) estan connectats a l'esp2.
Com que cal rebre dades per controlar el LED, després de connectar-se, esp s'ha de subscriure al tema "test / led" corresponent, en cas contrari totes les dades enviades passaran pel nostre microcontrolador.
No necessiteu una subscripció per enviar dades de temperatura, però quan envieu valors de temperatura, heu d'especificar el tema al qual aniran aquestes dades.

A continuació es mostra un esbós amb comentaris detallats.

Esbós Esp8266_mqtt.ino// Светодиод подлкючен к 5 пину
// Датчик температуры ds18b20 к 2 пину

#incloure
#incloure
#incloure
#incloure

#definir ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
Sensors de temperatura de Dallas(&oneWire);

const char *ssid = "AIRPORT"; // Nom del punt d'accés WiFi
const char *pass = "PASSWORD"; // Contrasenya del punt d'accés

const char *mqtt_server = "servidor"; // nom del servidor MQTT
const int mqtt_port = 11140; // Port per connectar-se al servidor MQTT
const char *mqtt_user = "Inici de sessió"; // Registres del servidor
const char *mqtt_pass = "Pass"; // Contrasenya del servidor

#defineix la MIDA_DE_LA_MEMORIA_INTERMÈDIA 100

bool EstatLed = fals;
int tm=300;
temperatura de flotació = 0;

// Funció per rebre dades del servidor

callback void(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); // envia el nom del tema al port sèrie
Serial.print(" => ");
Serial.print(pub.payload_string()); // envia el valor de les dades rebudes al port sèrie

String payload = pub.payload_string();

if(String(pub.topic()) == "test/led") // comprovem si les dades provenen del tema que necessitem
{
int stled = payload.toInt(); // converteix les dades rebudes a tipus enter
digitalWrite(5,stled); // encén o apaga el LED segons els valors de les dades rebudes
}
}

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

void setup () {

sensors.begin();
Serial.begin (115200);
delay (10);
Serial.println ();
Serial.println ();
pinMode (5, OUTPUT);
}

void loop () {
// connectar-se a la wifi
si (WiFi.status() != WL_CONNECTED) {
Serial.print("Connectant a ");
Serial.print(ssid);
Serial.println("...");
WiFi.començar(ssid, contrasenya);

si (WiFi.waitForConnectResult() != WL_CONNECTED)
tornar;
Serial.println("Wi-Fi connectat");
}

// connectar-se al servidor MQTT
si (WiFi.status() == WL_CONNECTED) {
si (!client.connectat()) {
Serial.println("Connectant al servidor MQTT");
si (client.connect(MQTT::Connect("arduinoClient2")
.set_auth(mqtt_user, mqtt_pass))) {
Serial.println("Connectat al servidor MQTT");
client.set_callback(callback);
client.subscribe("test/led"); // subscriure's al tema amb dades per al LED
} Else {
Serial.println("No s'ha pogut connectar al servidor MQTT");
}
}

si (client.connectat()){
client.loop();
EnviamentTemporal();
}

}
} // final del bucle principal

// Funció per enviar lectures d'un sensor de temperatura
void TempSend(){
si (tm==0)
{
sensors.requestTemperatures(); // obtenim el valor de la temperatura del sensor
temperatura flotant = sensors.getTempCByIndex(0);
client.publish("test/temp",String(temp)); // envia el valor de la temperatura al tema per al sensor de temperatura
Serial.println(temp);
tm = 300; // pausa entre l'enviament de valors de temperatura d'uns 3 segons
}
tm--;
delay (10);
}

Com a resultat, obtenim una eina convenient per al control remot i el seguiment de les dades, que és bastant fàcil d'aprendre i fins i tot els principiants ho podran fer.

Vídeo que demostra el funcionament del sistema de control

Reprodueix un vídeo

Instruccions de vídeo detallades per configurar el sistema

Reprodueix un vídeo

Una de les opcions per utilitzar el control esp8266 mitjançant el protocol MQTT

Reprodueix un vídeo

Control d'Internet de la tira LED

Reprodueix un vídeo

Si teniu cap pregunta sobre aquest material, us recomano veure la segona part del vídeo, on el material es presenta amb més claredat.

L'arxiu conté l'esbós i totes les biblioteques necessàries per flashejar el microcontrolador amb l'esbós de l'exemple.
Tingueu en compte que la biblioteca ESP8266WiFi.h no està inclosa en aquest arxiu, s'instal·la mitjançant el gestor de taules a l'entorn Arduino.

ARXIU

servidor MQTT - www.cloudmqtt.com

Enllaç a l'aplicació IoT MQTT Dashboard − play.google.com/store/apps/details?id=com.thn.iotmqttdashboard&hl=ru

Gràcies a tots per la vostra atenció.

Font: www.habr.com

Afegeix comentari