Control de Internet Esp8266 a través del protocolo MQTT


Hola a todos! Este artículo describirá en detalle y demostrará cómo configurar literalmente el control remoto del módulo esp8266 usando la aplicación de Android usando el protocolo MQTT en solo 20 minutos de tiempo libre.

La idea del control remoto y el monitoreo siempre ha despertado las mentes de las personas entusiastas de la electrónica y la programación. Después de todo, la oportunidad en cualquier momento de recibir o enviar los datos necesarios, independientemente de su ubicación, ofrece amplias oportunidades. En sus artículos anteriores ( Artículo 1 y Artículo 2) Traté de considerar varias opciones asequibles y relativamente simples para implementar el control remoto de microcontroladores a través de Internet. Sin embargo, el tiempo y el mundo entero no se detienen: el progreso continúa su avance inexorable. En este corto tiempo, el módulo esp8266 ganó una gran popularidad, que, gracias a su bajo precio y wi-fi incorporado, se ha convertido en uno de los componentes principales de Smart Home.

Por el momento, MQTT es el protocolo más avanzado y popular para transferir datos entre dispositivos individuales en el marco de los sistemas Smart Home. Tiene una serie de ventajas en relación con otros protocolos:
- bajo consumo de tráfico;
- La conexión entre el cliente y el servidor siempre está abierta;
- no carga el canal de Internet;
- sin demoras en la transmisión de datos;
- conveniente sistema de suscripciones a temas;
Todo esto hace posible monitorear y controlar en tiempo real. Sin embargo, MQTT requiere su propio servidor, que actúa como intermediario entre los clientes de la red. Hay dos formas de crear su propio servidor o utilizar servicios de terceros.

El sistema de control descrito consta de dos partes principales: el servidor MQTT (generalmente es uno) y los clientes, que pueden ser bastante. En nuestro caso, la aplicación de Android y el módulo esp8266 actuarán como clientes.

El algoritmo de operación del sistema es el siguiente. Los clientes se conectan al servidor e inmediatamente después de conectarse, cada uno de ellos se suscribe a temas de interés para él. Toda comunicación entre clientes pasa a través de un servidor que redirige los datos a otros clientes en función de sus suscripciones.

Servidor MQTT.

En nuestro caso, utilizaremos el servicio extremadamente conveniente www.cloudmqtt.com que tiene un plan de tarifas gratuito (Cute Cat) que cubrirá completamente las necesidades para implementar su propio sistema de "hogar inteligente".

Revisemos el registro en el sitio y obtengamos los datos necesarios para acceder al servidor. Al configurar clientes, debe usar un puerto normal (sin SSL y TLS).


Aplicación de Android

Nuestra aplicación actuará como panel de control para el microcontrolador y también recibirá y mostrará toda la información recibida de esp8266.

La aplicación se llama IoT MQTT Dashboard y es un cliente mqtt listo para usar con una pequeña cantidad de widgets muy convenientes. Se pueden ver más detalles sobre cómo trabajar con la aplicación en el video.

Esp8266.

El módulo se actualiza en el entorno de programación Arduino, pero quiero señalar que el módulo tiene problemas con el firmware en las últimas versiones de Arduino, por lo que recomiendo usar la versión 1.6.4.
Por ejemplo, un LED (5 pines) y un sensor de temperatura ds18b20 (2 pines) están conectados al esp8266.
Dado que es necesario recibir datos para controlar el LED, esp, después de conectarse, debe suscribirse al tema apropiado "prueba / led", de lo contrario, todos los datos enviados pasarán por nuestro microcontrolador.
Para enviar datos de temperatura, no es necesaria una suscripción, pero al transmitir valores de temperatura, debe especificar el tema al que irán estos datos.

A continuación se muestra un boceto con comentarios detallados.

Sketch 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"; //
const char *pass = "PASSWORD"; //

const char *mqtt_server = "server"; // MQTT
const int mqtt_port = 11140; // MQTT
const char *mqtt_user = "Login"; //
const char *mqtt_pass = "Pass"; //

#define BUFFER_SIZE 100

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

//

void callback(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); //
Serial.print(" => ");
Serial.print(pub.payload_string()); //

String payload = pub.payload_string();

if(String(pub.topic()) == "test/led") //
{
int stled = payload.toInt(); // integer
digitalWrite(5,stled); //
}
}

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);
}



Como resultado, obtenemos una herramienta conveniente para control remoto y monitoreo de datos, que es bastante fácil de aprender y será efectiva incluso para principiantes.

Video que demuestra el funcionamiento del sistema de control.


Instrucciones detalladas de configuración del sistema de video


Una aplicación de control esp8266 a través del protocolo MQTT


Control de tira de LED a través de Internet


Si tiene alguna pregunta sobre este material, le recomiendo que vea la segunda parte del video, donde el material se presenta más claramente.

El archivo contiene el boceto y todas las bibliotecas necesarias para actualizar el microcontrolador con el boceto del ejemplo.
Le llamo la atención sobre el hecho de que la biblioteca ESP8266WiFi.h no está incluida en este archivo; se instala a través del administrador de Tableros en el entorno Arduino.

ARCHIVE

MQTT server - www.cloudmqtt.com

Enlace a la aplicación IoT MQTT Dashboard - play.google.com/store/apps/details?id=com.thn.iotmqttdashboard

Gracias a todos por su atención.

Source: https://habr.com/ru/post/es393277/


All Articles