Tabla de contenido:
- Paso 1: componentes necesarios
- Paso 2: instalar las bibliotecas necesarias
- Paso 3: ESP32 LoRa Thingspeak Gateway
- Paso 4: Nodo del sensor ESP32 LoRa
- Paso 5: Configurar Thingspeak
- Paso 6: Código de puerta de enlace
- Paso 7: Código de nodo del sensor
- Paso 8: supervisar los datos en el servidor Thingspeak
- Paso 9: referencias
Video: Puerta de enlace ESP32 Lora Thingspeak con nodo sensor: 9 pasos
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
En este proyecto de IoT, diseñé ESP32 LoRa Gateway y también ESP32 LoRa Sensor Node para monitorear la lectura del sensor de forma inalámbrica desde distancias de unos pocos kilómetros. El remitente leerá los datos de humedad y temperatura utilizando el sensor DHT11. Luego transmite los datos a través de LoRa Radio. Los datos son recibidos por el módulo receptor. El receptor luego enviará los datos a Thingspeak Server después de un cierto intervalo.
Paso 1: componentes necesarios
1. Placa ESP32 - 2
2. Módulo Lora SX1278 / SX1276
3. Sensor de temperatura de humedad DHT11
4. Tablero de pruebas
5. Conexión de cables de puente
Paso 2: instalar las bibliotecas necesarias
Primero necesitamos instalar diferentes bibliotecas:
1. Biblioteca DHT11
2. Biblioteca LoRa
Paso 3: ESP32 LoRa Thingspeak Gateway
Ahora veamos el circuito emisor y receptor para construir ESP32 LoRa Gateway & Sensor Node. Monté ambos circuitos en una placa de pruebas. Puede hacerlo en PCB si lo desea.
Aquí hay un circuito de puerta de enlace ESP32 LoRa Module SX1278. Esta parte funciona como un receptor. Los datos de humedad y temperatura se reciben mediante LoRa Radio y se cargan en Thingspeak Server.
Paso 4: Nodo del sensor ESP32 LoRa
Aquí hay un circuito de nodo de sensor ESP32 LoRa con sensor DHT11. Esta parte funciona como transmisor. Los datos de humedad y temperatura son leídos por el sensor de temperatura de humedad DHT11 y transmitidos usando LoRa Radio.
Paso 5: Configurar Thingspeak
Para monitorear los datos del sensor en el servidor Thingspeak, primero debe configurar el Thingspeak. Para configurar el servidor Thingspeak, visite https://thingspeak.com/. Cree una cuenta o simplemente inicie sesión si creó la cuenta anteriormente. Luego crea un nuevo canal con los siguientes detalles.
Paso 6: Código de puerta de enlace
#incluir
// Bibliotecas para LoRa #include #include // define los pines utilizados por el módulo transceptor LoRa #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 // 433E6 para Asia, 866E6 para Europa, 915E6 para Norteamérica // Reemplace con sus credenciales de red String apiKey = "14K8UL2QEK8BTHN6"; // Ingrese su clave de API de escritura de ThingSpeak const char * ssid = "Wifi SSID"; // reemplace con su wifi ssid y wpa2 key const char * password = "Password"; const char * server = "api.thingspeak.com"; Cliente WiFiClient; // Inicializar variables para obtener y guardar datos de LoRa int rssi; String loRaMessage; Temperatura de la cuerda; Humedad de cuerdas; String readingID; // Reemplaza el marcador de posición con valores DHT. Procesador de cadenas (const String & var) {//Serial.println(var); if (var == "TEMPERATURA") {temperatura de retorno; } else if (var == "HUMEDAD") {humedad de retorno; } else if (var == "RRSI") {return String (rssi); } return String (); } configuración vacía () {Serial.begin (115200); int contador; // configurar el módulo transceptor LoRa LoRa.setPins (ss, rst, dio0); // configura el módulo transceptor LoRa while (! LoRa.begin (BAND) && contador <10) {Serial.print ("."); contador ++; retraso (2000); } if (contador == 10) {// Incrementar readID en cada nueva lectura Serial.println ("¡El inicio de LoRa falló!"); } Serial.println ("¡Inicialización de LoRa OK!"); retraso (2000); // Conéctese a la red Wi-Fi con SSID y contraseña Serial.print ("Conectando a"); Serial.println (ssid); WiFi.begin (ssid, contraseña); while (WiFi.status ()! = WL_CONNECTED) {retraso (2000); Serial.print ("."); } // Imprime la dirección IP local e inicia el servidor web Serial.println (""); Serial.println ("WiFi conectado"); Serial.println ("dirección IP:"); Serial.println (WiFi.localIP ()); } // Leer el paquete LoRa y obtener las lecturas del sensor void loop () {int packetSize = LoRa.parsePacket (); if (packetSize) {Serial.print ("Paquete Lora recibido:"); while (LoRa.available ()) // Leer paquete {String LoRaData = LoRa.readString (); Serial.print (LoRaData); int pos1 = LoRaData.indexOf ('/'); int pos2 = LoRaData.indexOf ('&'); readID = LoRaData.substring (0, pos1); // Obtener la temperatura de readID = LoRaData.substring (pos1 +1, pos2); // Obtener la temperatura y la humedad = LoRaData.substring (pos2 + 1, LoRaData.length ()); // Obtener humedad} rssi = LoRa.packetRssi (); // Obtener RSSI Serial.print ("con RSSI"); Serial.println (rssi); } if (client.connect (server, 80)) // "184.106.153.149" o api.thingspeak.com {String postStr = apiKey; postStr + = "& campo1 ="; postStr + = String (readingID); postStr + = "& campo2 ="; postStr + = String (temperatura); postStr + = "& field3 ="; postStr + = String (humedad); postStr + = "& campo4 ="; postStr + = Cadena (rssi); postStr + = "\ r / n / r / n / r / n / r / n"; client.print ("POST / actualización HTTP / 1.1 / n"); client.print ("Host: api.thingspeak.com / n"); client.print ("Conexión: cerrar / n"); client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); client.print ("Tipo de contenido: aplicación / x-www-form-urlencoded / n"); client.print ("Content-Length:"); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); } // retraso (30000); }
Paso 7: Código de nodo del sensor
#incluir
#include // Bibliotecas para LoRa #include "DHT.h" #define DHTPIN 4 // pin donde está conectado el dht11 DHT dht (DHTPIN, DHT11); // define los pines utilizados por el módulo transceptor LoRa #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 // 433E6 para Asia, 866E6 para Europa, 915E6 para Norteamérica // contador de paquetes int readingID = 0; int contador = 0; String LoRaMessage = ""; temperatura de flotación = 0; humedad de flotación = 0; // Inicializar el módulo LoRa void startLoRA () {LoRa.setPins (ss, rst, dio0); // configura el módulo transceptor LoRa while (! LoRa.begin (BAND) && contador <10) {Serial.print ("."); contador ++; retraso (500); } if (contador == 10) {// Incrementar readID en cada nueva lectura readID ++; Serial.println ("¡Error al iniciar LoRa!"); } Serial.println ("¡Inicialización de LoRa OK!"); retraso (2000); } void startDHT () {if (isnan (humedad) || isnan (temperatura)) {Serial.println ("¡No se pudo leer el sensor DHT!"); regreso; }} void getReadings () {humedad = dht.readHumidity (); temperatura = dht.readTemperature (); Serial.print (F ("Humedad:")); Serial.print (humedad); Serial.print (F ("% de temperatura:")); Serial.print (temperatura); Serial.println (F ("° C")); } void sendReadings () {LoRaMessage = String (ID de lectura) + "/" + String (temperatura) + "&" + String (humedad); // Envía el paquete LoRa al receptor LoRa.beginPacket (); LoRa.print (LoRaMessage); LoRa.endPacket (); Serial.print ("Enviando paquete:"); Serial.println (readingID); readingID ++; Serial.println (LoRaMessage); } void setup () {// inicializar Serial Monitor Serial.begin (115200); dht.begin (); startDHT (); startLoRA (); } bucle vacío () {getReadings (); sendReadings (); retraso (500); }
Paso 8: supervisar los datos en el servidor Thingspeak
Una vez que se carga el código, puede abrir el Monitor en serie en el circuito del nodo de la puerta de enlace y del sensor. Enviará y recibirá datos si el código es correcto. Ahora puede visitar la vista privada de Thingspeak. Allí puede ver que los datos para el número de paquete, la temperatura, la humedad y la puerta de enlace se cargan después del intervalo de 15 segundos.
Paso 9: referencias
1.
2.