- O que é o protocolo MQTT?
- Como funciona o MQTT?
- O corretor Eclipse Mosquitto
- Componentes necessários
- Circuito de Teste Eclipse MQTT - Esquemático
- Programando ESP8266 para estabelecer comunicação com o corretor
- Testando MQTT com ESP8266 usando Arduino
Nos últimos anos, os dispositivos IoT (Internet of Things) tornaram-se uma parte indistinguível de nossas vidas diárias. De casas inteligentes, lâmpadas inteligentes a eletrodomésticos inteligentes; criadores e desenvolvedores estão incorporando essa tecnologia para criar uma rede de dispositivos conectados que torna nosso dia-a-dia um pouco mais emocionante. Tudo isso foi possível devido à facilidade de comunicação. Há muitas maneiras possíveis de se comunicar entre os dispositivos, mas em produtos comerciais e de passatempo, um único protocolo comumente usado é o Message Queuing Telemetry Transport (MQTT). Anteriormente, construímos um rádio FM controlado por voz usando Arduino e Google Assistant que utiliza MQTT para se comunicar com a placa NodeMCU. Verifique se isso parece interessante para você.
Neste projeto, estaremos usando um broker Eclipse MQTT gratuito e popular e aprenderemos como conectar um dispositivo IoT (em nosso caso, é um módulo NodeMCU) a um broker MQTT e transferir dados entre o broker MQTT e NodeMCU.
O que é o protocolo MQTT?
Antes de avançar ainda mais, é melhor ter uma ideia clara sobre o MQTT (Message Queuing Telemetry Transport) protocolo. É um protocolo de mensagens leve que usa o método de publicação / assinatura e traduz mensagens entre vários dispositivos. Usando o protocolo MQTT, também podemos enviar / receber dados e controlar vários dispositivos de saída, como ler dados do sensor, etc. É desenvolvido em cima do TCP, por isso é mais rápido do que protocolos semelhantes como HTTP. Fora isso, tem muitas outras vantagens sobre outros protocolos como o seu muito leve, por isso não consome memória excessiva, pode trabalhar com muito menos largura de banda de rede, além disso, tem um protocolo de segurança robusto embutido. Esses recursos o tornam adequado para muitas aplicações.
Como funciona o MQTT?
Para entender o funcionamento do protocolo MQTT, precisamos entender apenas três coisas básicas; o diagrama acima mostra isso. Além disso, explicamos isso abaixo no artigo.
Cliente MQTT:
Um cliente MQTT é qualquer dispositivo (pode ser um microcontrolador ou um servidor) que executa funções MQTT e se comunica com um servidor central, que é conhecido como o " intermediário ". O broker trata da comunicação de dados entre os clientes conectados.
Editor MQTT:
Quando um cliente deseja enviar alguma informação, o cliente é conhecido como “Editor”. O editor publicará as informações sobre um determinado tópico. “ Tópico ” é um caminho onde podemos publicar / assinar mensagens. O corretor então envia as informações publicadas pelo usuário para os clientes (também conhecidos como Assinantes) que se inscreveram naquele tópico específico.
Assinante MQTT:
O Assinante MQTT assina tópicos em um broker MQTT para ler as mensagens enviadas pelo broker.
O corretor Eclipse Mosquitto
Eclipse Mosquitto é um broker MQTT de software livre, leve e adequado para uso em dispositivos IoT para comunicação. O protocolo MQTT fornece um método leve de transferência de informações usando um modelo de publicação / assinatura. Se você quiser saber mais sobre o assunto, pode visitar o site oficial do mosquito.
Configurando o corretor Eclipse Mosquitto:
Para estabelecer comunicação com o corretor, primeiro precisamos configurá-lo. Neste projeto, um aplicativo Android é usado para publicar e assinar as informações com o Broker. As etapas a seguir lhe darão uma ideia melhor do processo de configuração.
Passo 1:
Primeiro, baixe qualquer aplicativo “cliente MQTT” disponível na Google Play Store / App Store e instale-o. Neste projeto, um aplicativo denominado “cliente MQTT” é usado, que se parece com a imagem mostrada abaixo.
Passo 2:
Clique no sinal “+” para listar as opções adicionais no aplicativo, onde vamos adicionar uma nova corretora. Quando o botão é clicado, uma nova tela aparece conforme mostrado abaixo.
Etapa 3:
Depois disso, os dados do corretor devem ser preenchidos no campo obrigatório. Primeiro, clique na opção “Habilitado” mostrada no Aplicativo. Neste projeto, o broker Eclipse MQTT é usado, os detalhes que devem ser preenchidos são fornecidos abaixo:
Apelido: Dê um nome de sua preferência
Host: mqtt.eclipse.org
Porto: 1883
ID do cliente: forneça um ID de sua preferência
Os detalhes acima devem ser preenchidos em seus respectivos campos. Todos os outros campos não são necessários e podem ser deixados em branco. Após a conclusão com sucesso, clique no botão Salvar para salvar os detalhes do Broker.
Uma vez feito isso, o processo de configuração do aplicativo Android acabou e agora podemos passar para o lado do hardware.
Componentes necessários
Uma lista completa de peças necessárias é descrita abaixo. Como este circuito é simples, você pode encontrar todas as peças necessárias em sua loja local de hobbies.
- NodeMCU
- CONDUZIU
- Tábua de pão
- Fios de conexão
- Cabo de programação
Circuito de Teste Eclipse MQTT - Esquemático
O diagrama de circuito para o projeto MQTT básico é dado abaixo:
Programando ESP8266 para estabelecer comunicação com o corretor
Um código Arduino simples cuida de todas as comunicações necessárias entre o broker MQTT e o NodeMCU. Nesta seção, aprenderemos como essa funcionalidade funciona em detalhes.
Configure o IDE do Arduino e faça upload do código:
Se você estiver carregando o código para o NodeMCU pela primeira vez, será necessário configurar o IDE do Arduino primeiro. Para fazer isso, basta seguir as instruções simples fornecidas abaixo.
Primeiro, abra o IDE do Arduino e vá para Arquivo–> Preferências–> Configurações .
Em seguida, copie o URL abaixo, cole-o no campo ' URL do gerente de placa adicional ' e clique em 'Ok'. Você pode conferir na imagem abaixo para saber como temos feito isso.
Link:
Em seguida, vá para Ferramentas> Placa> Gerenciador de placas . Na janela Board's Manager, digite ESP 8266 na caixa de pesquisa e pressione Enter. Em seguida, selecione a versão mais recente no menu suspenso e clique em instalar. A imagem abaixo lhe dará uma ideia clara.
Finalmente, quando a instalação for concluída, vá para Ferramentas -> Placa -> e selecione NodeMCU 1.0 (Módulo ESP-12E). Agora, você pode programar NodeMCU com Arduino IDE. Como concluímos a configuração do IDE do Arduino, agora podemos fazer upload do código completo. Mas primeiro, leia a explicação rápida de todo o código.
Em primeiro lugar, incluímos “ESP8266WiFi.h” para usar ESP8266 e “PubSubClient.h” para MQTT.
Você pode encontrar a biblioteca ESP8266 pré-construída dentro da biblioteca Arduino, mas você precisa baixar a biblioteca PubSubClient de seu repositório GitHub associado.
#incluir
Em seguida, defina as credenciais de rede, como seu nome de usuário e senha Wi-Fi. Substitua suas credenciais no lugar de “admin” e “12345678” respectivamente.
const char * ssid = "admin"; const char * password = "12345678";
Em seguida, precisamos configurar o servidor MQTT. Usamos o servidor Eclipse MQTT para este projeto, e é por isso que o endereço do servidor é fornecido como “mqtt.eclipse.org”. Mas se você planeja usar qualquer outro servidor, como Mosquitto, Adafruit, pode substituí-lo pelo endereço de servidor e número de porta específicos.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
Em seguida, as instâncias são criadas para as classes WiFiClient e PubSubClient , que serão usadas em todo o programa.
WiFiClient espClient; Cliente PubSubClient (espClient);
Na seção setup () , chamamos o WiFi.begin () primeiro, chamar esse método conectará o ESP ao seu HotSpot preferido.
WiFi.begin (ssid, senha);
A seguir, verificamos se a conexão de rede foi bem-sucedida usando o método WiFi.status () . Após uma conexão bem-sucedida, uma mensagem é impressa no Monitor Serial com o SSID da rede conectada.
enquanto (WiFi.status ()! = WL_CONNECTED) {atraso (500); Serial.println ("Conectando ao WiFi.."); } Serial.print ("Conectado a WiFi:"); Serial.println (WiFi.SSID ());
Agora, precisamos criar um corretor. Para isso, usamos o método setServer ; este método leva dois argumentos que predefinimos anteriormente. Agora, se quisermos receber mensagens do servidor, precisamos criar uma função de retorno de chamada. Para isso, estamos usando o método setCallback (callback) .
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
Agora, usamos a função conectar (clientID) para conectar ao cliente ESP8266. Aqui clientID é o nome do cliente e deve ser exclusivo. Se estiver conectado, uma mensagem de sucesso pode ser exibida dentro do monitor serial.
if (client.connect ("ESP8266")) {Serial.println ("conectado"); } else {Serial.print ("falhou com o estado") Serial.println (client.state ()); atraso (2000); }
Em seguida, chamamos client.subscribe () , uma função MQTT integrada, que é usada para assinar um determinado tópico. Para este projeto, usamos “ esp / test ” como nosso nome de assinante.
client.subscribe ("esp / test");
Agora, a função MQTTcallback é chamada para verificar se alguma informação atualizada está disponível ou não. Se novos dados estiverem disponíveis, esta função trata os dados recebidos e imprime uma mensagem no monitor serial com a mensagem original e o nome do tópico onde a mensagem foi recebida.
Em seguida, convertemos as mensagens em uma string, para que possam ser comparadas e verificadas quanto a quaisquer ações de disparo. Neste projeto, um LED é LIGADO / DESLIGADO usando comandos MQTT, conforme mostrado no código abaixo.
para (int i = 0; i <comprimento; i ++) {mensagem = mensagem + carga útil (char); } Serial.print (mensagem); if (mensagem == "on") {digitalWrite (LED, HIGH); }
Por fim, publicar as informações sobre o tema. A função client.publish () é usada. Neste projeto, o status de um botão de pressão é verificado, se o botão for pressionado, então uma mensagem é publicada no Tópico “ esp / test1 ” conforme mostrado abaixo.
if (digitalRead (D1) == 0)) {client.publish ("esp / test1", "Hello from ESP8266"); } outro; client.loop ();
Testando MQTT com ESP8266 usando Arduino
Para o nosso teste final, vamos usar o aplicativo Android, que configuramos anteriormente.
Abra o aplicativo cliente MQTT e certifique-se de que seu celular tenha uma conexão ativa com a Internet. Além disso, o ponto de acesso ao qual o NodeMCU está conectado deve ter uma conexão de Internet ativa. Assim que tudo estiver conectado à internet, enviaremos uma string “Hello from ESP8266” do módulo ESP, que será refletida no aplicativo Android, e receberemos uma notificação. Em seguida, enviaremos uma string do aplicativo Android, que ligará um LED conectado à placa MCU do Nó ESP8266.
Etapa 1: (Inscrever-se no tópico):
Clique na opção MQTT salvo no aplicativo, que configuramos anteriormente. Será exibida uma tela pop-up, onde será solicitado “Inscrever-se em um tópico”. Configuramos anteriormente o tópico como “ esp / test1 ”. Então, no aplicativo Android, vamos escrever “ esp / test1 ”. Clique em Inscrever-se e, ao fazer isso, aparecerá uma tela como a abaixo, onde será escrito como “Nenhuma mensagem recebida” do Tópico específico.
Agora, clique no botão 'Conectado' que está conectado ao nodeMCU. Agora conforme nosso código, uma mensagem “ Hello from ESP8266 ” será publicada no Topic e haverá uma notificação na tela com a mensagem recebida conforme mostrado abaixo.
Etapa 2: Publicar no tópico:
Agora, para publicar no Tópico, clique no botão SETA PARA CIMA do Aplicativo, e será aberta uma tela conforme mostrado abaixo.
Agora, no campo Tópico, escreva “ esp / test ” e no campo de mensagem, escreva “ on ” ou “ off ” para ligar e desligar o LED respectivamente. Por exemplo, se “ligado” for publicado no Tópico, o LED será ligado e se “desligado” for publicado no Tópico, o LED será desligado.
Espero que tenha gostado do artigo e aprendido algo novo. Se você tiver alguma dúvida sobre este artigo, sinta-se à vontade para comentar abaixo ou use nosso fórum.