Control de Internet Esp8266 a través del protocolo MQTT

Control de Internet Esp8266 a través del protocolo MQTT
¡Hola a todos! Este artículo describirá en detalle y mostrará cómo configurar el control remoto del módulo esp20 usando una aplicación de Android usando el protocolo MQTT en solo 8266 minutos de tiempo libre.

La idea del control y monitoreo remoto siempre ha emocionado la mente de las personas apasionadas por la electrónica y la programación. Después de todo, la capacidad de recibir o enviar los datos necesarios en cualquier momento, independientemente de su ubicación, brinda amplias oportunidades. En mis artículos anteriores artículo 1 и 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 detiene: el progreso continúa su inexorable movimiento hacia adelante. Durante este corto tiempo ha ganado gran popularidad el módulo esp8266 que, gracias a su bajo precio y wi-fi incorporado, se ha convertido en uno de los principales componentes del Smart Home.

Por el momento, MQTT es el protocolo de transferencia de datos avanzado y más popular entre dispositivos individuales dentro de los sistemas Smart Home. Tiene varias ventajas sobre 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;
— ausencia de retrasos en la transmisión de datos;
— sistema conveniente de suscripciones a temas;
Todo esto hace posible el seguimiento y control 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 (normalmente es uno) y los clientes, que pueden ser bastantes. En nuestro caso, la aplicación de Android y el propio 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 los temas que le interesan. Toda la comunicación entre los clientes transita por el servidor, que redirige los datos a otros clientes en función de sus suscripciones.

servidor MQTT.

En nuestro caso, utilizaremos un servicio extremadamente conveniente. www.cloudmqtt.com que cuenta con un plan tarifario gratuito (Lindo Gato) que cubrirá totalmente las necesidades de implementación de un pequeño sistema doméstico inteligente.
Control de Internet Esp8266 a través del protocolo MQTT
Registrémonos en el sitio y obtengamos los datos necesarios para acceder al servidor. Al configurar clientes, debe utilizar un puerto normal (sin SSL ni TLS).
Control de Internet Esp8266 a través del protocolo MQTT

Aplicación para Android.

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

La aplicación se llama Panel MQTT de IoT y es un cliente mqtt listo para usar con una pequeña cantidad de widgets muy útiles. Puede ver el video para obtener más detalles sobre cómo usar la aplicación.

Esp8266.

El módulo está flasheado en el entorno de programación de Arduino, sin embargo, 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 (8266 pines) y un sensor de temperatura ds5b18 (20 pines) están conectados al esp2.
Dado que es necesario recibir datos para controlar el LED, después de conectarse, esp debe suscribirse al tema "prueba / led" correspondiente, de lo contrario, todos los datos enviados pasarán por nuestro microcontrolador.
No necesita una suscripción para enviar datos de temperatura, pero al enviar valores de temperatura, debe especificar el tema al que irán estos datos.

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

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

#incluir
#incluir
#incluir
#incluir

#definir ONE_WIRE_BUS 2
un cable un cable (ONE_WIRE_BUS);
Sensores de temperatura Dallas(&oneWire);

const char *ssid = "AEROPUERTO"; // Nombre del punto de acceso WiFi
const char *pass = "CONTRASEÑA"; // Contraseña del punto de acceso

const char *mqtt_server = "servidor"; // Nombre del servidor MQTT
constante int mqtt_port = 11140; // Puerto para conectarse al servidor MQTT
const char *mqtt_user = "Iniciar sesión"; // Registros del servidor
const char *mqtt_pass = "Pase"; // Contraseña del servidor

#definir BUFFER_SIZE 100

bool LedState = falso;
entero tm=300;
temperatura flotante=0;

// Función para recibir datos del servidor

devolución de llamada vacía (const MQTT::Publish& pub)
{
Serial.print(pub.tema()); // Envía el nombre del tema al puerto serial
Serie.print(" => ");
Serial.print(pub.payload_string()); // envía el valor de los datos recibidos al puerto serie

Cadena de carga útil = pub.payload_string();

if(String(pub.topic()) == "test/led") // verificamos si los datos provienen del tema que necesitamos
{
int stled = carga útil.toInt(); // convierte los datos recibidos a tipo entero
digitalWrite(5,stled); // enciende o apaga el LED dependiendo de los valores de datos recibidos
}
}

Cliente WiFi wclient;
cliente PubSubClient(wclient, mqtt_server, mqtt_port);

configuración nula () {

sensores.begin();
Serial.begin (115200);
retraso (10);
Serial.println ();
Serial.println ();
pinMode (5, SALIDA);
}

bucle vacío () {
// conectarse a wifi
si (WiFi.estado() != WL_CONECTADO) {
Serial.print("Conectando a ");
Serial.print(ssid);
Serial.println("...");
WiFi.begin(ssid, pass);

si (WiFi.waitForConnectResult() != WL_CONNECTED)
volver;
Serial.println ("WiFi conectado");
}

// conectarse al servidor MQTT
si (WiFi.estado() == WL_CONECTADO) {
si (!cliente.conectado()) {
Serial.println("Conectando al servidor MQTT");
si (cliente.conectar(MQTT::Connect("arduinoClient2")
.set_auth(usuario_mqtt, contraseña_mqtt))) {
Serial.println("Conectado al servidor MQTT");
cliente.set_callback(devolución de llamada);
cliente.subscribe("prueba/liderado"); // suscríbete al tema con datos para el LED
} Else {
Serial.println("No se pudo conectar al servidor MQTT");
}
}

si (cliente.conectado()){
cliente.loop();
Envío temporal();
}

}
} // fin del bucle principal

// Función para enviar lecturas de un sensor de temperatura
vacío TempSend(){
si (tm==0)
{
sensores.solicitudTemperaturas(); // obtenemos el valor de temperatura del sensor
temperatura flotante = sensores.getTempCByIndex(0);
cliente.publish("prueba/temp",String(temp)); // envía el valor de temperatura al tema para el sensor de temperatura
Serial.println (temp);
tm = 300; // pausa entre el envío de valores de temperatura de unos 3 segundos
}
tm--;
retraso (10);
}

Como resultado, obtenemos una herramienta conveniente para el control remoto y el monitoreo de datos, que es bastante fácil de aprender e incluso los principiantes podrán hacer.

Video que demuestra el funcionamiento del sistema de control

Ver mas

Instrucciones detalladas en video para configurar el sistema

Ver mas

Una de las opciones para usar el control esp8266 a través del protocolo MQTT

Ver mas

Control de Internet de la tira de LED

Ver mas

Si tiene alguna pregunta sobre este material, le recomiendo ver la segunda parte del video, donde se presenta el material con mayor claridad.

El archivo contiene el boceto y todas las bibliotecas necesarias para actualizar el microcontrolador con el boceto del ejemplo.
Tenga en cuenta que la biblioteca ESP8266WiFi.h no está incluida en este archivo, se instala a través del administrador de placas en el entorno Arduino.

ARCHIVO

servidor MQTT - www.cloudmqtt.com

Enlace a la aplicación de panel de IoT MQTT − play.google.com/store/apps/details?id=com.thn.iotmqttdashboard&hl=ru

Gracias por su atención.

Fuente: habr.com

Añadir un comentario