Como enviar dados MQTT do ESP32/ESP8266 para Raspberry Pi

Como enviar dados MQTT do ESP32/ESP8266 para Raspberry Pi

É possível montar um sistema de automação residencial faça você mesmo com placa ESP e Raspberry Pi (RPi). Ambos oferecem conectividade Wi-Fi e podem se comunicar facilmente através de uma rede doméstica. No entanto, é necessário um protocolo de comunicação para a comunicação sem fio de dispositivos que operam em uma rede mais ampla.

Como os protocolos convencionais da Internet, como o HTTP, geralmente exigem muitos recursos para serem implementados com placas microcontroladoras, os protocolos IoT como o MQTT oferecem uma opção. MQTT é um protocolo de mensagens padrão para a Internet das Coisas.

Neste projeto, projetaremos um monitor meteorológico baseado em ESP e o configuraremos como um editor MQTT. Um corretor MQTT (ou seja, Mosquitto) será configurado no RPi para se comunicar com o dispositivo ESP. Um assinante MQTT será configurado no mesmo RPi para ler e registrar leituras de temperatura e umidade.

O sensor usado para ler a temperatura e umidade no ESP32/ESP8266 é o DHT11. DHT22 também pode ser usado se preferir.

Componentes necessários
1. Framboesa Pi x1
2. Monitor de exibição x1
3. Cabo micro-USB e adaptador de energia para Raspberry Pi x1
4. Cabo HDMI x1
5. Teclado e mouse x1
6. ESP8266/ESP32 x1
7. DHT11/DHT22 x1
8. Cabo micro USB para ESP8266/ESP32 x1

Configurando RPi como um corretor MQTT
Mosquitto, o corretor que usamos, é responsável por toda a comunicação na forma de mensagens associadas a tópicos entre clientes MQTT. O ESP32/ESP8266 está configurado como editor MQTT. O assinante está configurado no Raspberry Pi.

Certifique-se de que o RPi esteja configurado como um computador desktop. Em seguida, instale o Mosquitto nele. Para fazer isso, abra o terminal e execute este comando:

sudo apt-get instalar mosquito

Em seguida, instale o cliente de linha de comando Mosquitto executando o seguinte comando no terminal:

sudo apt-get install mosquito-clients -y

Após instalar o broker MQTT, precisaremos fazer alterações em seus arquivos de configuração. O arquivo de configuração padrão é armazenado em /etc/mosquitto/mosquitto.conf. Abra o arquivo de configuração padrão no editor nano executando o seguinte comando no terminal:

sudo nano /etc/mosquitto/mosquitto.conf

O arquivo de configuração deve ser semelhante a este…

No arquivo de configuração, desabilitaremos as configurações padrão com esta linha:

include_dir /etc/mosquitto/conf.d

para

# include_dir /etc/mosquitto/conf.d

A seguir, não permitiremos que usuários anônimos se conectem ao corretor adicionando esta linha:

permitir_anônimo falso

Teremos que definir um arquivo para salvar a senha adicionando esta linha:

password_file /etc/mosquitto/pwfile

Em seguida, definiremos a porta de escuta como 1883 adicionando esta linha:

ouvinte 1883

Salve as alterações pressionando Ctrl+S e saia pressionando Ctrl+X. O arquivo de configuração ficará semelhante a este depois de concluir essas edições…

Agora, vamos definir o nome de usuário e a senha para que os clientes MQTT possam acessar o broker MQTT. Para criar um nome de usuário ou redefinir a senha de um usuário existente, execute o seguinte comando no terminal:

sudo mosquitto_passwd -c /etc/mosquitto/pwfile

Para este projeto, definimos o nome de usuário como “neo” e a senha como “eglabs”. Certifique-se de escolher uma senha forte. Observe que quando você digita a senha, nada fica visível na janela.

Você pode remover um usuário existente executando este comando no terminal:

sudo mosquitto_passwd -d /etc/mosquitto/pwfile

Após gerar um nome de usuário e senha, reinicie o Raspberry Pi para que essas alterações tenham efeito. Para fazer isso, execute este comando no terminal:

sudo reiniciar

O corretor Mosquitto pode ser iniciado executando o seguinte comando no terminal:

sudo systemctl iniciar mosquito

Vamos garantir que o corretor Mosquitto esteja funcionando executando este comando no terminal:

sudo systemctl status mosquito

O corretor Mosquitto pode ser interrompido executando este comando no terminal:

sudo systemctl pare o mosquito

O corretor Mosquitto pode ser reiniciado executando este comando no terminal:

sudo systemctl reiniciar mosquito

O broker Mosquitto pode ser habilitado na inicialização executando este comando no terminal:

sudo systemctl habilitar mosquito

O corretor Mosquitto pode ser executado em segundo plano executando este comando no terminal:

mosquito -d

Configurando o monitor meteorológico
Configuraremos a estação meteorológica usando ESP32/ESP8266. Para fazer isso, você precisará conectar DHT11/DHT22 com ESP32/ESP8266

DHT11 fez interface com ESP32 para criar a estação meteorológica.

Configurando ESP32/ESP8266 como editor MQTT
Carregue o seguinte esboço no ESP32/ESP8266 para executar o ESP como uma estação meteorológica. Ele publicará os valores de temperatura e umidade para o corretor MQTT.

#incluir “DHT.h”
#incluir “PubSubClient.h”
#incluir “WiFi.h”

#define DHTPIN4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

// Wi-fi
const char*ssid = “SSID”;
const char* wifi_password = “SENHA”;

//MQTT
const char* mqtt_server = “192.168.*.*”;
const char* umidade_topic = “umidade”;
const char* temperatura_topic = “temperatura”;
const char* mqtt_username = “neo”; //Nome de usuário MQTT
const char* mqtt_password = “eglabs”; // senha MQTT
const char* clientID = “Weather_Reporter”; //ID do cliente MQTT

// Inicializa os objetos WiFi e Cliente MQTT
WiFiClient wifiClient;

// 1883 é a porta listener do Broker
Cliente PubSubClient(mqtt_server, 1883, wifiClient);

// Função personalizada para conectar-se ao corretor MQTT via WiFi
void connect_MQTT {
Serial.print(“Conectando a “);
Serial.println(ssid);

//Conecte-se ao Wi-Fi
WiFi.begin(ssid, wifi_password);

//Aguarde até que a conexão seja confirmada
enquanto (WiFi.status ! = WL_CONNECTED) {
atraso(500);
Serial.print(“.”);
}

// Depuração – Gera o endereço IP do ESP8266
Serial.println(“WiFi conectado”);
Serial.print(“Endereço IP: “);
Serial.println(WiFi.localIP );

//Conecte-se ao corretor MQTT
if (client.connect(clientID, mqtt_username, mqtt_password)) {
Serial.println(“Conectado ao Broker MQTT!”);
}
outro {
Serial.println(“Falha na conexão com o Broker MQTT…”);
}
}

configuração vazia {
Serial.begin(9600);
dht.begin ;
}

loop vazio {
conectar_MQTT ;
Serial.setTimeout(2000);

float h = dht.readHumidity ;
float t = dht.readTemperature ;

Serial.print(“Umidade: “);
Serial.print(h);
Serial.println(”%”);
Serial.print(“Temperatura: “);
Serial.print
Serial.println(”*C”);

// MQTT só pode transmitir strings
String hs=”Hum: “+String((float)h)+” % “;
String ts=”Temp: “+String((float)t)+”C “;

// PUBLICAR no Broker MQTT (tópico = Temperatura)
if (client.publish(temperature_topic, String
Serial.println(“Temperatura enviada!”);
}
outro {
Serial.println(“Falha ao enviar temperatura. Reconectando ao MQTT Broker e tentando novamente”);
cliente.connect(clientID, mqtt_username, mqtt_password);
atraso(10); // Esse atraso garante que client.publish não entre em conflito com a chamada client.connect
cliente.publish(temperature_topic, String
}

// PUBLICAR para o MQTT Broker (tópico = Umidade)
if (client.publish(humidity_topic, String(h).c_str )) {
Serial.println(“Umidade enviada!”);
}
outro {
Serial.println(“Falha ao enviar umidade. Reconectando ao MQTT Broker e tentando novamente”);
cliente.connect(clientID, mqtt_username, mqtt_password);
atraso(10); // Esse atraso garante que client.publish não entre em conflito com a chamada client.connect
cliente.publish(humidity_topic, String(h).c_str );
}
cliente.disconnect ; // desconecta do corretor MQTT
atraso(1000*60); // imprime novos valores após 1 minuto
}

Como funciona o editor MQTT baseado em ESP
ESP32 está configurado como um editor MQTT. Para trabalhar com DHT11/DHT22, o DHT.h deve primeiro ser importado. A biblioteca PubSubClient.h também é importada para configurar o ESP32 como cliente MQTT. A biblioteca foi escrita por Nick O'Leary. Ele pode ser instalado no Arduino IDE navegando até Ferramentas->Gerenciar Bibliotecas e pesquisando por PubSubClient.

Observação:

  • A biblioteca deve ser instalada antes de importá-la para o esboço. O WiFi.h deve ser importado para conectar o ESP32/ESP8266 à rede WiFi.
  • O pino de saída do DHT11 se conecta ao pino D04.
  • O objeto DHT é instanciado com DHTTYPE para DHT11 e DHTPIN para 4.
  • O SSID e a senha do WiFi são armazenados nas variáveis ​​SSID e wifi_password. Certifique-se de substituir “SSID” e “SENHA” por SSID e a chave de rede WiFi da sua própria rede WiFi.
  • As variáveis ​​são declaradas para armazenar o IP do servidor MQTT, os nomes dos tópicos, o nome de usuário e senha do MQTT e o ID do cliente.
  • O endereço IP do corretor MQTT é igual ao endereço IP do Raspberry Pi na rede.

O endereço IP do Raspberry Pi pode ser obtido executando o seguinte comando no terminal:

nome do host -I

A primeira string obtida ao executar o comando acima é o endereço IPv4, que deve ser utilizado no sketch. Substitua o IP do servidor MQTT (“192.168.*.*”) pelo endereço IP do seu próprio Raspberry Pi.

Um objeto WiFiClient é instanciado e usado para instanciar o objeto cliente MQTT. A função connect_MQTT é definida para conectar-se à rede WiFi e ao corretor MQTT.

Na função setup , a taxa de transmissão para registrar informações no Serial Monitor do Arduino IDE é definida como 9600 e o DHT é inicializado chamando o método DHT.begin .

Na função loop , os valores de temperatura e umidade do DH11 são recuperados chamando os métodos dht.readHumidity e dht.readTemperature . Os valores recuperados são agrupados como strings e passados ​​como mensagens para os tópicos MQTT de 'umidade' e 'temperatura', respectivamente, chamando o método client.publish .

Por último, o cliente é desconectado chamando o método client.disconnect . É fornecido um atraso de um minuto.

Configurando o assinante MQTT no RPi
Instale a biblioteca paho-mqtt para configurar o cliente MQTT no Raspberry Pi. Execute o seguinte comando no terminal para instalar esta biblioteca:

sudo pip instalar paho-mqtt

Abra o IDE Thonny e copie o seguinte código no editor:

importar paho.mqtt.client como mqtt

MQTT_ADDRESS = '192.168.*.*'
MQTT_USER = 'neo'
MQTT_PASSWORD = 'eglabs'
MQTT_TOPIC_TEMP = 'Temperatura'
MQTT_TOPIC_HUMD = 'Umidade'

def on_connect(cliente,userdata,flags,rc):
print('Conectado com código de resultado ' + str(rc))
cliente.subscribe(MQTT_TOPIC_TEMP)
cliente.subscribe(MQTT_TOPIC_HUMD)

def on_message(cliente, dados do usuário, mensagem):
imprimir(msg.topic + ' ' + str(msg.payload))

def principal :
mqtt_client = mqtt.Client
mqtt_client.username_pw_set(MQTT_USER, MQTT_PASSWORD)
mqtt_client.on_connect=on_connect
mqtt_client.on_message=on_message

mqtt_client.connect(MQTT_ADDRESS, 1883)
mqtt_client.loop_forever

se __nome__ == '__principal__':
print('Ponte MQTT para InfluxDB')
principal

Salve o script como RPI-Sub.py e execute o script.

Como funciona o assinante MQTT
O assinante MQTT no RPi é executado com a ajuda de um script Python. O script importa a biblioteca paho.mqtt.client. As variáveis ​​são declaradas para armazenar o endereço IP do broker MQTT (que é igual ao endereço IP do RPi), o nome de usuário do MQTT, a senha do MQTT e os tópicos do MQTT.

O cliente assina dois tópicos, ‘temperatura’ e ‘umidade’, ao se conectar com a corretora. Para isso, a função on_connect é definida e chamada no loop main . As mensagens publicadas do editor MQTT baseado em ESP são impressas no console chamando a função on_message definida pelo usuário.

No loop main , o cliente MQTT é iniciado chamando o método mqtt.Client . O nome de usuário e a senha do MQTT são definidos chamando o método mqtt_client.username_pw_set . O cliente é conectado ao broker chamando o método mqtt_client.connect e entra em loop infinito chamando o método mqtt_client.loop_forever .

Ao se conectar com o broker MQTT, a função on_connect definida pelo usuário é chamada, inscrevendo-se nos respectivos tópicos. Ao receber mensagens do editor baseado em ESP, a função on_message definida pelo usuário é chamada, que imprime as mensagens no console.

Resultados

Bloga dön

Yorum yapın

Yorumların yayınlanabilmesi için onaylanması gerektiğini lütfen unutmayın.