Controlador Esp8266 a través de internet usando el protocolo MQTT.

Controlador Esp8266 a través de internet usando el protocolo MQTT.
¡Hola a todos! En este artículo se explicará y mostrará cómo configurar el control remoto del módulo esp8266 con una aplicación de Android mediante el protocolo MQTT en tan solo 20 minutos de tiempo libre.

La idea del control y monitoreo remoto siempre ha fascinado a aquellos interesados en la electrónica y la programación. La posibilidad de recibir o enviar datos en cualquier momento, independientemente de la ubicación, ofrece amplias oportunidades. En mis artículos anteriores ( Artículo 1 y Artículo 2) intenté explorar varias opciones disponibles y relativamente simples para implementar el control remoto de microcontroladores a través de Internet. Sin embargo, el tiempo y el mundo no se detienen: el progreso continúa su implacable avance. En este corto tiempo, el módulo esp8266 ha ganado amplia popularidad gracias a su bajo costo y Wi-Fi integrado, convirtiéndose en uno de los componentes principales del 'Hogar Inteligente'.

En la actualidad, MQTT es el protocolo más avanzado y popular para la transmisión de datos entre dispositivos dentro de sistemas de 'Hogar Inteligente'. Tiene varias ventajas en comparación con otros protocolos:
— bajo consumo de tráfico;
— la conexión entre el cliente y el servidor siempre está abierta;
— no sobrecarga el canal de Internet;
— ausencia de retrasos en la transmisión de datos;
— un sistema conveniente de suscripciones a temas;
Todo esto permite el monitoreo y control en tiempo real. Sin embargo, MQTT requiere un servidor propio, que actúe como intermediario entre los clientes de la red. Aquí hay dos caminos: crear su propio servidor o utilizar servicios externos.

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

El algoritmo de funcionamiento del sistema es el siguiente. Los clientes se conectan al servidor y, inmediatamente después de conectarse, cada uno de ellos se suscribe a los temas que le interesan. Toda la comunicación entre clientes pasa a través del servidor, que reenvía los datos a otros clientes de acuerdo con sus suscripciones.

Servidor MQTT.

En nuestro caso, utilizaremos un servicio muy conveniente www.cloudmqtt.com que tiene un plan gratuito (Cute Cat), que cubrirá completamente las necesidades para implementar un pequeño sistema de «hogar inteligente».
Controlador Esp8266 a través de internet usando el protocolo MQTT.
Procedemos a registrarnos en el sitio web y obtenemos los datos necesarios para acceder al servidor. Al configurar los clientes, es necesario utilizar un puerto común (sin SSL ni TLS).
Controlador Esp8266 a través de internet usando el protocolo MQTT.

Aplicación en Android.

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

La aplicación se llama IoT MQTT Dashboard y es un cliente mqtt listo con un pequeño número de widgets muy convenientes. Se puede ver más detalles sobre el uso de la aplicación en el video.

Esp8266.

El módulo se programa en el entorno de programación Arduino, sin embargo, quiero señalar que el módulo tiene problemas de programación en las últimas versiones de Arduino, por lo que recomiendo usar la versión 1.6.4.
Por ejemplo, a esp8266 se conecta un LED (pin 5) y un sensor de temperatura ds18b20 (pin 2).
Dado que es necesario recibir datos para controlar el LED, esp debe suscribirse al tema correspondiente «test/led» después de la conexión; de lo contrario, todos los datos enviados pasarán por alto nuestro microcontrolador.
Para enviar datos de temperatura no se necesita suscripción, pero al transmitir valores de temperatura es necesario especificar el tema al que irán esos datos.

A continuación, se presenta un boceto con comentarios detallados.

Boceto 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"; // Nombre de la red WiFi
const char *pass = "PASSWORD"; // Contraseña de la red

const char *mqtt_server = "server"; // Nombre del servidor MQTT
const int mqtt_port = 11140; // Puerto para conectar al servidor MQTT
const char *mqtt_user = "Login"; // Credenciales del servidor
const char *mqtt_pass = "Pass"; // Contraseña del servidor

#define BUFFER_SIZE 100

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

// Функция получения данных от сервера

void callback(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); // Mostramos en el puerto serie el nombre del tema
Serial.print(" => ");
Serial.print(pub.payload_string()); // Mostramos en el puerto serie el valor de los datos recibidos

String payload = pub.payload_string();

if(String(pub.topic()) == "test/led") // Comprobamos si los datos provienen del tema correcto
{
int stled = payload.toInt(); // Convertimos los datos recibidos al tipo integer
digitalWrite(5,stled); // Encendemos o apagamos el LED según los valores recibidos
}
}

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("Conectando a ");
Serial.print(ssid);
Serial.println("...");
WiFi.begin(ssid, pass);

if (WiFi.waitForConnectResult() != WL_CONNECTED)
return;
Serial.println("WiFi conectado");
}

// подключаемся к MQTT серверу
if (WiFi.status() == WL_CONNECTED) {
if (!client.connected()) {
Serial.println("Conectando al servidor MQTT");
if (client.connect(MQTT::Connect("arduinoClient2")
.set_auth(mqtt_user, mqtt_pass))) {
Serial.println("Conectado al servidor MQTT");
client.set_callback(callback);
client.subscribe("test/led"); // nos suscribimos al topic con datos para el LED
} else {
Serial.println("No se pudo conectar al servidor MQTT");
}
}

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

}
} // fin del ciclo principal

// Функция отправки показаний с термодатчика
void TempSend(){
if (tm==0)
{
sensors.requestTemperatures(); // obtenemos el valor de temperatura del sensor
float temp = sensors.getTempCByIndex(0);
client.publish("test/temp",String(temp)); // enviamos el valor de temperatura al topic para el sensor de temperatura
Serial.println(temp);
tm = 300; // pausa entre envíos de valores de temperatura de aproximadamente 3 segundos
}
tm--;
delay(10);
}

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

Video demostrando el funcionamiento del sistema de control

Reproducir video

Instrucción en video detallada para configurar el sistema

Reproducir video

Una de las variantes de control de esp8266 a través del protocolo MQTT

Reproducir video

Control de una tira LED a través de Internet

Reproducir video

Si tienes preguntas sobre este material, te recomiendo ver la segunda parte del video, donde el material se presenta de manera más visual.

En el archivo están el sketch y todas las bibliotecas necesarias para programar el microcontrolador con el sketch de ejemplo.
Te recuerdo que la biblioteca ESP8266WiFi.h no está incluida en este archivo, se instala a través del Gestor de placas en el entorno de Arduino.

ARCHIVO

Servidor MQTT — www.cloudmqtt.com

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

Gracias a todos por su atención.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster