Esp8266 Control de Internet mediante protocolo MQTT

Esp8266 Control de Internet mediante protocolo MQTT
Ola a todos! Este artigo explicará en detalle e demostrará como configurar o control remoto do módulo esp8266 usando unha aplicación en só 20 minutos de tempo libre. Android mediante o protocolo MQTT.

A idea de control remoto e monitorización sempre emocionou a mente das persoas apaixonadas pola electrónica e a programación. Despois de todo, a posibilidade de recibir ou enviar os datos necesarios en calquera momento, independentemente da súa localización, ofrece moitas oportunidades. Nos meus artigos anteriores Artigo 1 и Artigo 2) Tentei considerar varias opcións accesibles e relativamente sinxelas para implementar o control remoto de microcontroladores a través de Internet. Non obstante, o tempo e o mundo enteiro non se paran: o progreso continúa o seu inexorable movemento cara adiante. Durante este curto período de tempo, o módulo esp8266 gañou unha gran popularidade, que, grazas ao seu baixo prezo e ao seu wifi integrado, converteuse nun dos principais compoñentes do Smart Home.

Polo momento, MQTT é o protocolo de transferencia de datos avanzado e máis popular entre dispositivos individuais dentro dos sistemas Smart Home. Ten varias vantaxes sobre outros protocolos:
- baixo consumo de tráfico;
- a conexión entre o cliente e o servidor está sempre aberta;
- non carga a canle de Internet;
— ausencia de atrasos na transmisión de datos;
— sistema cómodo de subscricións a temas;
Todo isto fai posible monitorizar e controlar en tempo real. Non obstante, MQTT require o seu propio servidor, que actúa como intermediario entre os clientes da rede. Hai dúas formas de crear o teu propio servidor ou usar servizos de terceiros.

O sistema de control descrito consta de dúas partes principais: un servidor MQTT (normalmente só un) e clientes, dos cales pode haber bastantes. No noso caso, os clientes serán unha aplicación que se executa en Android e o propio módulo esp8266.

O algoritmo de funcionamento do sistema é o seguinte. Os clientes conéctanse ao servidor e inmediatamente despois de conectarse, cada un deles subscríbese aos temas do seu interese. Toda a comunicación entre clientes transita polo servidor, que redirixe os datos a outros clientes en función das súas subscricións.

Servidor MQTT.

No noso caso, utilizaremos un servizo moi cómodo www.cloudmqtt.com que conta cun plan tarifario gratuíto (Cute Cat) que cubrirá integramente as necesidades de implantación dun pequeno sistema de fogar intelixente interno.
Esp8266 Control de Internet mediante protocolo MQTT
Imos rexistrarse no sitio e obter os datos necesarios para acceder ao servidor. Ao configurar clientes, debes usar un porto normal (sen SSL nin TLS).
Esp8266 Control de Internet mediante protocolo MQTT

Aplicación en Android.

A nosa aplicación actuará como panel de control para o microcontrolador, e tamén recibirá e mostrará toda a información recibida do esp8266.

A aplicación chámase Panel de control IoT MQTT e é un cliente mqtt preparado cun pequeno número de widgets moi útiles. Podes ver o vídeo para obter máis detalles sobre como usar a aplicación.

Esp8266.

O módulo parpadea no entorno de programación Arduino, non obstante, quero notar que o módulo ten problemas co firmware nas últimas versións de Arduino, polo que recomendo usar a versión 1.6.4.
Por exemplo, un LED (8266 pinos) e un sensor de temperatura ds5b18 (20 pinos) están conectados ao esp2.
Dado que é necesario recibir datos para controlar o LED, despois da conexión, esp debe subscribirse ao tema "test/led" correspondente, se non, todos os datos enviados pasarán polo noso microcontrolador.
Non precisa unha subscrición para enviar datos de temperatura, pero ao enviar valores de temperatura, debe especificar o tema ao que se dirixirán estes datos.

A continuación tes un esbozo con comentarios detallados.

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

#incluír
#incluír
#incluír
#incluír

#define UN_CABLE_BUS 2
Un fío un fío(UN_FÍO_BUS);
Sensores de temperatura de Dallas (&oneWire);

const char *ssid = "AEROPORTO"; // Nome do punto de acceso WiFi
const char *contrasinal = "CONTRASINAL"; // Contrasinal do punto de acceso

const char *mqtt_server = "servidor"; // Nome do servidor MQTT
const int mqtt_porto = 11140; // Porto para conectar ao servidor MQTT
const char *mqtt_usuario = "Iniciar sesión"; // Rexistros do servidor
const char *mqtt_pass = "Paso"; // Contrasinal do servidor

#define BUFFER_SIZE 100

bool EstadoLed = falso;
int tm=300;
temperatura de flotación=0;

// Función para recibir datos do servidor

devolución de chamada baleira(const MQTT::Publicar e publicar)
{
Impresión en serie (publicación.tema ()); // envía o nome do tema ao porto serie
Impresión en serie(" => ");
Serial.print(pub.payload_string()); // envía o valor dos datos recibidos ao porto serie

Cadea de caracteres carga útil = pub.payload_string();

if(String(pub.topic()) == "test/led") // comprobamos se os datos proceden do tema que necesitamos
{
int stled = payload.toInt(); // converte os datos recibidos a tipo enteiro
escritura dixital(5, estilo); // acende ou apaga o LED dependendo dos valores de datos recibidos
}
}

Cliente WiFi; cliente wifi;
Cliente PubSubClient(cliente_de_Pub, servidor_mqtt, porto_mqtt);

configuración nula () {

sensores.comezar();
Serial.begin (115200);
atraso (10);
Serial.println ();
Serial.println ();
pinMode (5, OUTPUT);
}

bucle baleiro () {
// conectarse á wifi
se (WiFi.status() != WL_CONNECTED) {
Serial.print("Conectando a ");
Serie.impresión(ssid);
Serie.println("...");
WiFi.comezo(ssid, contrasinal);

se (WiFi.waitForConnectResult() != WL_CONNECTED)
regreso;
Serial.println("WiFi conectado");
}

// conectar ao servidor MQTT
se (WiFi.status() == WL_CONNECTED) {
se (!cliente.conectado()) {
Serial.println("Conectando ao servidor MQTT");
se (cliente.conectar(MQTT::Conectar("arduinoCliente2")
.set_auth(mqtt_user, mqtt_pass))) {
Serial.println("Conectado ao servidor MQTT");
cliente.set_callback(callback);
cliente.subscribe("proba/led"); // subscrición ao tema con datos para o LED
Else {}
Serial.println("Non se puido conectar co servidor MQTT");
}
}

se (cliente.conectado()){
bucle_cliente();
EnvíoTemporal();
}

}
} // fin do bucle principal

// Función para enviar lecturas dun sensor de temperatura
baleiro EnvíoTemporal(){
se (tm==0)
{
sensores.solicitudTemperaturas(); // obtemos o valor da temperatura do sensor
temperatura flotante = sensores.obterTempCByIndex(0);
cliente.publicar("proba/temp",String(temp)); // envía o valor da temperatura ao tema para o sensor de temperatura
Serial.println(temp);
tm = 300; // pausa entre o envío de valores de temperatura duns 3 segundos
}
tm--;
atraso (10);
}

Como resultado, obtemos unha ferramenta conveniente para o control remoto e o seguimento dos datos, que é bastante fácil de aprender e que incluso os principiantes poderán facelo.

Vídeo que demostra o funcionamento do sistema de control

Reproducir vídeo

Instrucións de vídeo detalladas para configurar o sistema

Reproducir vídeo

Unha das opcións para usar o control esp8266 a través do protocolo MQTT

Reproducir vídeo

Control por Internet da tira LED

Reproducir vídeo

Se tes algunha dúbida sobre este material, recoméndoche ver a segunda parte do vídeo, onde o material se presenta con máis claridade.

O arquivo contén o bosquexo e todas as bibliotecas necesarias para flashear o microcontrolador co bosquexo do exemplo.
Teña en conta que a biblioteca ESP8266WiFi.h non está incluída neste arquivo, instálase a través do xestor de Boards no ambiente Arduino.

ARQUIVO

servidor MQTT - www.cloudmqtt.com

Ligazón á aplicación IoT MQTT Dashboard − play.google.com/store/apps/details?id=com.thn.iotmqttdashboard&hl=ru

Grazas a todos pola vosa atención.

Fonte: www.habr.com

Compre hospedaxe fiable para sitios con protección DDoS, servidores VPS VDS 🔥 Compra aloxamento web fiable con protección DDoS, servidores VPS VDS | ProHoster