Comunicación MQTT entre NodeMCU y Raspberry Pi 3 B +
Usando MQTT, NodeMCU, DHT22, RaspberryPi y IoT MQTT Panel para monitorear la temperatura y la humedad.
Usar una Raspberry Pi 3 B + como intermediario para varios NodeMCU con sensores DHT-22 que miden la temperatura y la humedad y monitorean en la aplicación IoT MQTT Panel. Hice escalable el algoritmo para NodeMCU y Raspberry. Simplemente cambie los temas publicados y suscritos y agregue la aplicación IoT MQTT Panel para tener todos los datos a su alcance en cualquier momento.
He buscado en Internet mucha información porque no tengo conocimiento de frambuesa, pitón y MQTT. Entonces, resumí todo lo que aprendí y le di crédito a esos sitios web.
Si su conexión a Internet se pierde, sus sensores seguirán enviando datos a su corredor. ¡¡¡Lo que significa que puede guardar sus datos !!! (por supuesto que necesita hacer algo de programación)
Síganme para recibir actualizaciones. ¡Pronto publicaré un video de todo funcionando! 🙂
1. Conectando cosas:
Cómo se verá su red:
2. Programación de cosas:
Primero debe asegurarse de tener todas las bibliotecas instaladas en su Arduino IDE y en su Raspberry Pi 3B +.
2.1 Arduino
Instale las bibliotecas en su 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 las bibliotecas en su Python IDE.
- tiempo:biblioteca nativa en Python
- Paho MQTT:escriba “pip install paho-mqtt” en su terminal LX para instalar la biblioteca MQTT. Si tiene alguna duda, este sitio web es IMPRESIONANTE !! http://www.steves-internet-guide.com/mqtt/
2.3 Subiendo códigos
Sube los códigos respectivamente a tu NodeMCU y Raspberry.
2.4 Explicando el código - ARDUINO IDE
Esas son las bibliotecas mencionadas anteriormente para instalar en su IDE de Arduino.
#include // Esp8266 / NodeMCU Library # include // MQTT Library # include "DHT.h" // Sensor DHT
Variables declaradas para ser utilizadas en todo el código:
const char * mqtt_server ="Broker_IP_Address"; // Dirección IP del servidor MQTT
mqtt_server :para obtener la dirección IP en Raspberry pi, abra una pantalla de terminal y escriba:
[email protected]:~ $ ifconfigwlan0:flags =4163 mtu 1500 inet 192.168.1.200 netmask 255.255.255.0 broadcast 192.168.1.255
En este ejemplo, la dirección IP sería 192.168.1.200
const char * clientID ="room1"; // La identificación del cliente identifica el dispositivo NodeMCU.
ID de cliente :Cualquier nombre o número para identificar el NodeMCU que está utilizando. En este caso estará ubicado en la habitación 1. Por eso se llama habitación1.
const char * topicT ="/ room1 / temperature"; // Tema temperatureconst char * topicH ="/ habitación1 / humedad"; // Tema humedad
topicT :Tema para publicar la temperatura. En este ejemplo, para la temperatura ambiente1, el tema será "/ ambiente1 / temperatura".
topicH :Tema para publicar humedad. En este ejemplo, para la humedad de la habitación 1, el tema será "/ habitación1 / humedad".
const char * willTopic ="/ room1 / status"; // Tema Statusconst char * willMessage ="0"; // 0 - Desconectado
willTopic :Tema para publicar el testamento. Esto se usará para verificar si el NodeMCU está conectado / encendido. Si se desconecta, publicará el willMessage al willTopic. En este caso "/ room1 / status"
willMessage :Mensaje que se publicará en willTopic si el NodeMCU está desconectado / apagado.
int willQoS =0; boolean willRetain =true;
willQoS :Se utiliza para establecer la calidad del servicio. En este caso 0.
willRetain :Se utiliza para retener el mensaje de voluntad en caso de desconexión. Establecer en Verdadero
int contador =0; // Se utiliza para volver a conectarse a MQTT serverconst char * swversion ="1.0"; // Versión de software
contador :contador utilizado en la rutina de reconexión.
swversion :utilizado para controlar la revisión de mi software.
WiFiClient wifiClient; Cliente PubSubClient (mqtt_server, 1883, wifiClient); // 1883 es el puerto de escucha del Broker
wifiClient :Crea un cliente que puede conectarse a una dirección IP de Internet y un puerto especificados como se define en client.connect ().
cliente () :Cliente es la clase base para todas las llamadas basadas en clientes WiFi. No se llama directamente, sino que se invoca cada vez que utiliza una función que se basa en ella.
DHT dhtA (2, DHT22); // Instancia DHT llamada dhtA, Pin en NodeMCU D4 y tipo de sensor
DHT :Crea una instancia llamada dhtA y asigna el pin 2 del NodeMCU V3 (D4) del sensor DHT-22. Según los esquemas a continuación. Si desea utilizar otro pin, cambie el valor al pin correcto. Antes de cambiar el pin utilizado, verifique el pinout a continuación para asignar el pin correcto.
- Usando el pin D2 -> GPIO4
- DHT dhtA (4, DHT22)
Si está utilizando DHT-11, sería:
- Usando el pin D2 -> GPIO4
- DHT dhtA (4, DHT11)
NOTA: Si está utilizando la misma biblioteca que yo. Si usa una biblioteca diferente, consulte la documentación de la biblioteca para verificar cómo debe declarar el pin y los sensores utilizados.
configuración nula () :Aquí inicializamos las cosas.
void setup () {Serial.begin (9600); // Para fines de depuración, compruebe si DHT y la conexión con MQTT Broker están funcionandoSerial.print (swversion); // Depuración. Versión de software dhtA.begin (); // Iniciando el DHT-22
Conectando con el corredor de MQTT.
retraso (2000); // Retraso para permitir la primera conexión con MQTT Broker
retraso (2000) :aumenta el tiempo si falla la primera conexión. En este caso 2000 permite que NodeMCU se conecte al Broker.
if (client.connect (clientID, "", "", willTopic, willQoS, willRetain, willMessage, true)) {// Conectando a MQTT Broker
client.connect () :explicado a continuación. Tomado de:https://pubsubclient.knolleary.net/api.html#connect5
____________________________________________________________
conexión booleana (ID de cliente, nombre de usuario, contraseña, willTopic, willQoS, willRetain, willMessage, cleanSession)
Conecta al cliente con un mensaje Will, nombre de usuario, contraseña y bandera de sesión limpia especificada.
Nota :incluso si la cleanSession
está configurado en false
/ 0
el cliente no reintento fallido qos 1 publica. Esta bandera solo se usa para mantener las suscripciones en el corredor.
Parámetros
- clientID:el ID de cliente que se utilizará cuando se conecte al servidor.
- nombre de usuario:el nombre de usuario que se utilizará. Si es NULL, no se utiliza ningún nombre de usuario ni contraseña (const char [])
- contraseña:la contraseña a utilizar. Si es NULL, no se usa contraseña (const char [])
- willTopic:el tema que utilizará el mensaje will (const char [])
- willQoS:la calidad del servicio que utilizará el mensaje will (int:0,1 o 2)
- willRetain:si el testamento debe publicarse con la marca de retención (int:0 o 1)
- willMessage:la carga útil del mensaje will (const char [])
- cleanSession:si conectar una sesión limpia o no (booleano)
Devoluciones
- falso:la conexión falló.
- verdadero:la conexión se realizó correctamente.
Fuente:Comunicación MQTT entre NodeMCU y Raspberry Pi 3 B +
Proceso de manufactura
- Sensor de temperatura Python y Raspberry Pi
- Sensor de temperatura y luz Raspberry Pi
- Control de actuador y sensor Raspberry Pi
- NUEVA FRAMBUESA PI 3 MODELO B + CARACTERÍSTICAS Y COMPRA
- Creación de robots con Raspberry Pi y Python
- Diferencia entre galvanoplastia y anodizado
- Diferencia entre metales no ferrosos y ferrosos
- Diferencia entre soldadura fuerte y soldadura blanda.
- Diferencia entre taladrado, mandrinado y escariado
- Diferencia entre máquina formadora y cepilladora
- Diferencia entre bomba centrífuga y recíproca