Olá pessoal! Este artigo descreve em detalhes e demonstra como configurar literalmente o controle remoto do módulo esp8266 usando o aplicativo Android usando o protocolo MQTT em apenas 20 minutos de tempo livre.A idéia de controle remoto e monitoramento sempre excitou as mentes das pessoas entusiasmadas em eletrônica e programação. Afinal, a oportunidade a qualquer momento de receber ou enviar os dados necessários, independentemente de sua localização, oferece amplas oportunidades. Nos artigos anteriores (artigos 1 e 2) Tentei considerar várias opções acessíveis e relativamente simples para implementar o controle remoto de microcontroladores via Internet. No entanto, o tempo e o mundo inteiro não param - o progresso continua seu avanço inexorável. Durante esse curto período de tempo, o módulo esp8266 ganhou ampla popularidade, que, graças ao seu baixo preço e wi-fi integrado, tornou-se um dos principais componentes do Smart Home.No momento, o MQTT é o protocolo mais avançado e popular para transferir dados entre dispositivos individuais dentro da estrutura dos sistemas Smart Home. Possui várias vantagens em relação a outros protocolos:- baixo consumo de tráfego;- A conexão entre o cliente e o servidor está sempre aberta;- não carrega o canal da Internet;- sem atrasos na transmissão de dados;- sistema conveniente de assinaturas de tópicos;Tudo isso torna possível monitorar e controlar em tempo real. No entanto, o MQTT requer seu próprio servidor, que atua como intermediário entre os clientes da rede. Existem duas maneiras de criar seu próprio servidor ou usar serviços de terceiros.O sistema de controle descrito consiste em duas partes principais: o servidor MQTT (geralmente é um) e clientes, o que pode ser bastante. No nosso caso, o aplicativo Android e o próprio módulo esp8266 atuarão como clientes.O algoritmo de operação do sistema é o seguinte. Os clientes se conectam ao servidor e imediatamente após conectar cada um deles assina tópicos de interesse para ele. Toda a comunicação entre clientes passa por um servidor que redireciona dados para outros clientes com base em suas assinaturas.Servidor MQTT.No nosso caso, usaremos o serviço extremamente conveniente www.cloudmqtt.com, que possui um plano tarifário gratuito (Cute Cat) que cobrirá completamente as necessidades de implementação de seu próprio pequeno sistema de “casa inteligente”.
Vamos fazer o registro no site e obter os dados necessários para acessar o servidor. Ao configurar clientes, você deve usar uma porta regular (sem SSL e TLS).
Aplicativo para Android.Nossa aplicação atuará como um painel de controle para o microcontrolador e também receberá e exibirá todas as informações recebidas do esp8266.O aplicativo é chamado IoT MQTT Dashboard e é um cliente mqtt pronto com um pequeno número de widgets muito convenientes. Mais detalhes sobre o trabalho com o aplicativo podem ser vistos no vídeo.Esp8266.O módulo está piscando no ambiente de programação do Arduino, mas quero observar que o módulo tem problemas com o firmware nas versões mais recentes do Arduino, por isso recomendo usar a versão 1.6.4.Por exemplo, um LED (5 pinos) e um sensor de temperatura ds18b20 (2 pinos) são conectados ao esp8266.Como é necessário receber dados para controlar o LED, esp após a conexão deve assinar o tópico apropriado "test / led", caso contrário, todos os dados enviados passarão pelo nosso microcontrolador.Para enviar dados de temperatura, uma assinatura não é necessária, mas ao transmitir valores de temperatura, é necessário especificar o tópico para o qual esses dados serão enviados.Abaixo está um esboço com comentários detalhados.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, obtemos uma ferramenta conveniente para controle remoto e monitoramento de dados, que é bastante fácil de aprender e será eficaz mesmo para iniciantes.Vídeo demonstrativo da operação do sistema de controleInstruções detalhadas de configuração do sistema de vídeoUma aplicação do controle esp8266 via protocolo MQTTControle de faixa de LED via InternetSe você tiver alguma dúvida sobre este material, recomendo que assista à segunda parte do vídeo, onde o material é apresentado com mais clareza.O arquivo contém o esboço e todas as bibliotecas necessárias para atualizar o microcontrolador com o esboço do exemplo.Chamo a atenção para o fato de que a biblioteca ESP8266WiFi.h não está incluída neste arquivo; é instalada através do gerenciador de placas no ambiente Arduino.ARQUIVOservidor MQTT - www.cloudmqtt.comLink para o aplicativo IoT MQTT Dashboard - play.google.com/store/apps/details?id=com.thn.iotmqttdashboardObrigado por sua atenção.