Usando ESP-01 com MQTT: como conectar e controlar dispositivos IoT

Usando ESP-01 com MQTT: como conectar e controlar dispositivos IoT

Estar dentro do orçamento não significa necessariamente que você não pode assumir projetos avançados de bricolage. Se você está procurando um módulo WiFi pequeno, acessível e conveniente para ampliar seus projetos de IoT, o módulo ESP-01 é uma ótima escolha. No entanto, integrar esse módulo a um protocolo leve como o MQTT pode ser complicado, especialmente se você for novo no desenvolvimento de IoT.

Programar apenas a placa ESP-01 pode ser um desafio em comparação com outros módulos da série ESP8266. Mas vamos ver o básico de toda a configuração de hardware e software que você precisa para começar a usar o módulo, bem como configurar o MQTT de maneira simples e processual.

Conhecendo o Conselho

ESP8266 O ESP-01 é um módulo WiFi pequeno e compacto que vem com um chip ESP8266EX, que é um SoC altamente integrado projetado para aplicações IoT.

Usando ESP-01 com MQTT: como conectar e controlar dispositivos IoT

O módulo inclui um microcontrolador sem fio de chip único com uma pilha de protocolo TCP/IP e é capaz de se conectar a uma rede sem fio ou atuar como um ponto de acesso. O módulo ESP-01 também possui um cabeçalho de pino 2x4 que fornece acesso aos pinos GPIO, alimentação e aterramento e interface UART.

Configurando o hardware

O módulo não é compatível com a placa de ensaio. Por conveniência, você pode comprar uma placa de extensão pré-fabricada ou simplesmente seguir o caminho antigo - usando cabos de jumper e uma placa de ensaio.

Existe um programador dedicado, o ESP8266 Serial Module Board, que pode facilitar sua experiência de programação. Se você preferir seguir esse caminho, o DIYHOBI tem um tutorial útil sobre como atualizar um programa no módulo ESP-01 usando um programador (incluindo o Adaptador do Módulo Conversor USB para TTL CH340G).

Mas você ainda pode programar o módulo usando uma placa Arduino. Veja o diagrama de circuito abaixo para referência.

Usando ESP-01 com MQTT: como conectar e controlar dispositivos IoT

Embora possa parecer tentador, geralmente não recomendamos conectar o módulo diretamente ao pino de 3,3 V do Arduino, pois requer mais corrente do que o pino fornece. Em vez disso, conecte o Arduino 5V a um regulador de tensão de 3,3V como LM1117/LD117 e, em seguida, ligue o módulo WiFi do regulador.

Não conecte os pinos VCC e CH_PD do ESP ao pino 5V do Arduino. Conectar o módulo à alimentação de 5V pode danificá-lo.

Todos os capacitores são 10uF e o resistor é um resistor de 1K .

Requisitos de software

O módulo ESP-01 é comumente usado com a plataforma Arduino. Como tal, configurar o software é bastante simples, especialmente se você estiver familiarizado com o Arduino C. No entanto, se você estiver mais familiarizado com o Raspberry, há muitos projetos Raspberry Pi IoT que você pode experimentar.

Estes são os requisitos básicos:

  • Um corretor ou servidor MQTT (como Mosquitto ou CloudMQTT).
  • Um Arduino IDE com a biblioteca central ESP8266.
  • A biblioteca PubSubClient para Arduino.

Você deve se lembrar que ter seu próprio servidor MQTT localmente oferece flexibilidade em seus projetos.

Instalando as bibliotecas necessárias

Primeiro, baixe e instale o Arduino IDE em seu computador. Depois de instalado, abra o IDE do Arduino e vá para Arquivo > Preferências .

Usando ESP-01 com MQTT: como conectar e controlar dispositivos IoT

No campo URLs adicionais do gerenciador de placas , insira a seguinte URL:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Clique em OK para fechar a janela Preferências.

Usando ESP-01 com MQTT: como conectar e controlar dispositivos IoT

Em seguida, vá para Ferramentas > Placa > Gerenciador de placas .

Em seguida, procure por esp8266 e instale o pacote da placa esp8266 - isso inclui todas as bibliotecas necessárias para o módulo ESP-01.

Usando ESP-01 com MQTT: como conectar e controlar dispositivos IoT

Para instalar a biblioteca PubSubClient, vá para Sketch > Include Library > Manage Libraries .

Usando ESP-01 com MQTT: como conectar e controlar dispositivos IoT

Pesquise por PubSubClient e clique na biblioteca para instalá-la.

Usando ESP-01 com MQTT: como conectar e controlar dispositivos IoT

Depois de instalar todas as bibliotecas necessárias, você pode começar a programar o módulo ESP-01. Uma coisa a observar, porém, é que você pode usar o Wifi.h que está incluído na biblioteca ou baixar a biblioteca ESPWifi.h e incluí-la em seu esboço.

Estabelecendo uma conexão entre o ESP-01 e o MQTT Broker

Um broker MQTT é um servidor que atua como intermediário entre clientes MQTT. Ele permite que os clientes enviem e recebam mensagens entre si por meio de um modelo de publicação-assinatura.

Para conectar seu módulo ESP-01 a um broker MQTT, você precisará especificar o endereço IP do broker e o número da porta em seu código. Você também precisará fornecer um ID de cliente exclusivo que identifique seu módulo ESP-01 para o corretor.

Primeiro, inclua as bibliotecas necessárias na parte superior do seu esboço

#include ESP8266WiFi.h> #include PubSubClient.h>

Em seguida, defina os detalhes da conexão WiFi e MQTT.

const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASSWORD"; const char* mqtt_server = "YOUR_MQTT_SERVER";

Não se esqueça de substituir os espaços reservados pelos seus próprios detalhes de conexão WiFi e MQTT.

Depois disso, crie um cliente WiFi e conecte-se à sua rede WiFi local:

WiFiClient espClient; void setup_wifi() {   delay(10);   WiFi.begin(ssid, password);   while (WiFi.status() != WL_CONNECTED) {     delay(500);   } }

Esta função deve ser chamada na função setup() do seu esboço.

Em seguida, você precisará criar um cliente MQTT e conectar-se ao seu broker MQTT:

PubSubClient client(espClient); void reconnect() {   while (!client.connected()) {     if (client.connect("ESP01", mqtt_user, mqtt_password)) {       // Subscribe to a topic       client.subscribe("test/topic");     } else {       delay(5000);     }   } }

Depois de se conectar ao seu broker MQTT, você pode começar a publicar e assinar os tópicos.

Publicando dados do ESP-01 para o MQTT Broker

Agora que você conectou com sucesso seu módulo ESP01 ao broker MQTT, vamos ver como você pode publicar dados do ESP-01 no broker.

Para publicar dados, use a função client.publish() para publicar uma mensagem no tópico inTopic .

client.publish("inTopic", "Hello from ESP-01");

Isso publicará a mensagem "Hello from ESP-01" no tópico inTopic .

Você também pode publicar dados do sensor do ESP-01 para o corretor. Por exemplo, se você tiver um sensor de temperatura conectado ao seu ESP-01, poderá publicar os dados de temperatura para o corretor conforme mostrado abaixo.

float temperature = 25.5; String temperatureString = String(temperature); char temperatureChar[5]; temperatureString.toCharArray(temperatureChar, 5); client.publish("Temp", temperatureChar);

Isso publicará os dados de temperatura no tópico Temp .

Os dados podem ser publicados em loop ou em intervalos regulares, dependendo dos requisitos do seu projeto. Certifique-se de que você não está inundando o corretor com muitos dados e que está publicando em um intervalo razoável.

Inscrevendo-se em tópicos MQTT e recebendo dados no ESP-01

Para assinar um tópico, use a função client.subscribe() . Para nosso caso abaixo, o cliente se inscreve no tópico outTopic .

client.subscribe("outTopic");

Depois de se inscrever em um tópico, você pode receber mensagens publicadas nesse tópico usando a função client.loop() na função loop() no esboço abaixo:

void loop() {   if (!client.connected()) {     reconnect();   }   client.loop(); }

Isso verificará continuamente novas mensagens e executará a função de retorno de chamada quando uma nova mensagem for recebida.

Para lidar com as mensagens recebidas, defina uma função de callback como a mostrada abaixo:

void callback(char* topic, byte* payload, unsigned int length) {   // Print the received message   Serial.print("Message received on topic: ");   Serial.print(topic);   Serial.print(". Message: ");   for (int i=0;i     Serial.print((char)payload[i]);   }   Serial.println(); }

Esta função será chamada quando uma nova mensagem for recebida no tópico assinado. Ele imprimirá a mensagem recebida no Serial Monitor.

Usando Níveis de QoS (Qualidade de Serviço) e Recursos de Segurança

Uma das técnicas mais importantes usadas no tratamento de solicitações é usar níveis de QoS (Quality of Service) para suas mensagens MQTT. Os níveis de QoS definem como o broker e os assinantes devem lidar com suas mensagens. Existem três níveis de QoS: 0, 1 e 2.

O nível 0 de QoS é o menos confiável, pois as mensagens são enviadas apenas uma vez e não há garantia de entrega ao assinante. O nível 1 de QoS é mais confiável, pois as mensagens são enviadas pelo menos uma vez e têm a garantia de serem entregues ao assinante pelo menos uma vez. O nível 2 de QoS é o mais confiável, pois as mensagens são enviadas exatamente uma vez e têm a garantia de serem entregues ao assinante exatamente uma vez. A forma como seus dispositivos se comunicam está alinhada com outros problemas de segurança comuns da Internet das Coisas (IoT) e correções que você deseja manter atualizado.

Para usar níveis de QoS, você pode especificar o nível desejado ao publicar mensagens usando a função client.publish() :

client.publish("topic", "Hello, world!", 1);

Isso publicará a mensagem Hello, world! ao tópico tópico com QoS nível 1 .

Outra técnica avançada é usar mensagens de Última Vontade e Testamento (LWT) . As mensagens LWT são mensagens enviadas pelo intermediário quando um cliente se desconecta inesperadamente. Acreditamos que isso seja importante para detectar dispositivos off-line ou para acionar ações quando um dispositivo é desconectado.

Para usar mensagens LWT, você pode especificar a mensagem LWT ao conectar-se ao corretor usando a função client.setWill() :

client.setWill("status", "offline", 1, true);

Isso definirá a mensagem LWT como offline no tópico de status com QoS nível 1 e o sinalizador de retenção definido como true .

Prepare-se para o seu próximo projeto de IoT

O módulo ESP-01 é uma solução acessível e compacta para projetos IoT, e usá-lo com MQTT pode levar seu projeto para o próximo nível. Embora a configuração inicial possa ser assustadora, os benefícios do MQTT, como comunicação leve e alta escalabilidade, fazem dele um investimento que vale a pena.