Comunicação MQTT entre NodeMCU e Raspberry Pi 3 B +
Usando MQTT, NodeMCU, DHT22, RaspberryPi e IoT MQTT Panel para monitorar temperatura e umidade.
Usando um Raspberry Pi 3 B + como corretor para vários NodeMCU com sensores DHT-22, medindo temperatura e umidade e monitorando no aplicativo IoT MQTT Panel. Eu fiz o algoritmo para NodeMCU e Raspberry escalável. Basta alterar os tópicos publicados e assinados e adicionar IoT MQTT Panel App para ter todos os dados disponíveis a qualquer momento.
Pesquisei muitas informações na Internet, pois não tenho conhecimento de raspberry, python e MQTT. Então, eu resumi tudo que aprendi e dei crédito a esses sites.
Se sua conexão com a Internet for perdida, seus sensores continuarão enviando dados para seu corretor. O que significa que você pode salvar seus dados !!! (é claro que você precisa fazer alguma programação)
Por favor, siga-me para quaisquer atualizações. Em breve postarei um vídeo de tudo rodando! 🙂
1. Conectando coisas:
Qual será a aparência da sua rede:
2. Coisas de programação:
Primeiro, você precisa ter certeza de que todas as bibliotecas estão instaladas em seu Arduino IDE e em seu Raspberry Pi 3B +.
2.1 Arduino
Instale as bibliotecas em seu Arduino IDE.
- MQTT - https://github.com/knolleary/pubsubclient/releases/tag/v2.7
- Biblioteca de sensores DHT:https://github.com/adafruit/DHT-sensor-library
- Adafruit Unified Sensor Lib:https://github.com/adafruit/Adafruit_Sensor
- Esp8266 - https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WiFi
2.2 Raspberry Pi 3 b +
Instale as bibliotecas em seu Python IDE.
- tempo - biblioteca nativa em Python
- Paho MQTT - digite “pip install paho-mqtt” em seu terminal LX para instalar a biblioteca MQTT. Se tiver alguma dúvida este site é INCRÍVEL !! http://www.steves-internet-guide.com/mqtt/
2.3 Carregando códigos
Faça upload dos códigos respectivamente para seu NodeMCU e Raspberry.
2.4 Explicando o código - ARDUINO IDE
Essas são as bibliotecas mencionadas antes para serem instaladas em seu Arduino IDE.
#include // Esp8266 / Biblioteca NodeMCU # include // Biblioteca MQTT # include "DHT.h" // Sensor DHT
Variáveis declaradas para serem usadas em todo o código:
const char * mqtt_server ="Broker_IP_Address"; // Endereço IP do servidor MQTT
mqtt_server :para obter o endereço IP no Raspberry pi, abra uma tela de terminal e digite:
[email protected]:~ $ ifconfigwlan0:flags =4163 mtu 1500 inet 192.168.1.200 netmask 255.255.255.0 broadcast 192.168.1.255
Neste exemplo, o endereço IP seria 192.168.1.200
const char * clientID ="room1"; // O ID do cliente identifica o dispositivo NodeMCU.
ID do cliente :Qualquer nome ou número para identificar o NodeMCU que você está usando. Nesse caso, ele estará localizado na sala 1. Portanto, é denominado room1.
const char * topicT ="/ room1 / temperature"; // Topic temperatureconst char * topicH ="/ room1 / umidade"; // Umidade do tópico
tópicoT :Tópico para publicar a temperatura. Neste exemplo, para a temperatura ambiente1, o tópico será “/ ambiente1 / temperatura”.
tópicoH :Tópico para publicar umidade. Neste exemplo, para a umidade da sala1, o tópico será “/ sala1 / umidade”.
const char * willTopic ="/ room1 / status"; // Status do tópicoconst char * willMessage ="0"; // 0 - Desconectado
willTopic :Tópico para publicar o testamento. Isso será usado para verificar se o NodeMCU está conectado / ligado. Se desconectar, publicará o willMessage para o willTopic. Neste caso, “/ room1 / status”
willMessage :Mensagem a ser publicada em willTopic se o NodeMCU estiver desconectado / desligado.
int willQoS =0; boolean willRetain =true;
willQoS :Usado para definir a qualidade do serviço. Neste caso, 0.
willRetain :Usado para reter a mensagem em caso de desconexão. Defina como Verdadeiro.
int counter =0; // Usado para reconectar ao MQTT serverconst char * swversion ="1.0"; // Versão do software
contador :contador usado na rotina de reconexão.
swversion :usado para controlar minha revisão de software.
WiFiClient wifiClient; cliente PubSubClient (mqtt_server, 1883, wifiClient); // 1883 é a porta do ouvinte para o Broker
wifiClient :Cria um cliente que pode se conectar a um endereço IP e porta da Internet especificados, conforme definido em client.connect ().
cliente () :Cliente é a classe base para todas as chamadas baseadas em clientes WiFi. Ele não é chamado diretamente, mas sim sempre que você usa uma função que depende dele.
DHT dhtA (2, DHT22); // Instância DHT chamada dhtA, Pin on NodeMCU D4 e tipo de sensor
DHT :Cria uma instância chamada dhtA e atribui o pino 2 do NodeMCU V3 (D4) do sensor DHT-22. De acordo com os esquemas abaixo. Se você quiser usar outro pino, altere o valor para o pino correto. Antes de mudar o pino usado, verifique a pinagem abaixo para atribuir o pino correto.
- Usando o pino D2 -> GPIO4
- DHT dhtA (4, DHT22)
Se você estiver usando DHT-11, seria:
- Usando o pino D2 -> GPIO4
- DHT dhtA (4, DHT11)
NOTA: Se você estiver usando a mesma biblioteca que eu. Se você usar uma biblioteca diferente, verifique a documentação da biblioteca para verificar como você deve declarar o pino e os sensores usados.
configuração vazia () :Aqui inicializamos as coisas.
void setup () {Serial.begin (9600); // Para fins de depuração, verifique se o DHT e a conexão com o MQTT Broker estão funcionandoSerial.print (swversion); // Depure. Versão do softwaredhtA.begin (); // Iniciando o DHT-22
Conectando-se ao corretor MQTT.
delay (2000); // Atrase para permitir a primeira conexão com o MQTT Broker
atraso (2000) :aumenta o tempo se a primeira conexão falhar. Neste caso, 2000 permite que o NodeMCU se conecte ao Broker.
if (client.connect (clientID, "", "", willTopic, willQoS, willRetain, willMessage, true)) {// Conectando ao Broker MQTT
client.connect () :explicado abaixo. Retirado de:https://pubsubclient.knolleary.net/api.html#connect5
____________________________________________________________
conexão booleana (clientID, nome de usuário, senha, willTopic, willQoS, willRetain, willMessage, cleanSession)
Conecta o cliente com uma mensagem Will, nome de usuário, senha e sinalizador de sessão limpa especificado.
Nota :mesmo se a
cleanSession
está definido como false
/ 0
o cliente não tente novamente qos 1 com falha publica. Este sinalizador é útil apenas para manter assinaturas no corretor. Parâmetros
- clientID:o ID do cliente a ser usado ao se conectar ao servidor.
- nome de usuário:o nome de usuário a ser usado. Se NULL, nenhum nome de usuário ou senha é usado (const char [])
- senha:a senha a ser usada. Se NULL, nenhuma senha é usada (const char [])
- willTopic:o tópico a ser usado pela mensagem de testamento (const char [])
- willQoS:a qualidade de serviço a ser utilizada pela mensagem will (int:0,1 ou 2)
- willRetain:se o testamento deve ser publicado com o sinalizador de retenção (int:0 ou 1)
- willMessage:a carga útil da mensagem will (const char [])
- cleanSession:se deseja conectar-se à sessão limpa ou não (booleano)
Devoluções
- falso - falha na conexão.
- verdadeiro - conexão bem-sucedida.
Fonte:comunicação MQTT entre NodeMCU e Raspberry Pi 3 B +
Processo de manufatura
- Sensor de temperatura Python e Raspberry Pi
- Temperatura do Raspberry Pi e sensor de luz
- Sensor Raspberry Pi e controle do atuador
- NOVO FRAMBOESA PI 3 MODELO B + RECURSOS E COMPRA
- Construindo robôs com Raspberry Pi e Python
- Diferença entre galvanoplastia e anodização
- Diferença entre metais não ferrosos e ferrosos
- Diferença entre brasagem e solda
- Diferença entre furação, mandrilamento e alargamento
- Diferença entre máquina modeladora e plaina