Sommario:

ESP32 Lora Thingspeak Gateway con nodo sensore: 9 passaggi
ESP32 Lora Thingspeak Gateway con nodo sensore: 9 passaggi

Video: ESP32 Lora Thingspeak Gateway con nodo sensore: 9 passaggi

Video: ESP32 Lora Thingspeak Gateway con nodo sensore: 9 passaggi
Video: ESP32 LoRaWAN Gateway tutorial with Sensor Node 2024, Dicembre
Anonim
ESP32 Lora Thingspeak Gateway con nodo sensore
ESP32 Lora Thingspeak Gateway con nodo sensore

in questo progetto IoT, ho progettato ESP32 LoRa Gateway e anche ESP32 LoRa Sensor Node per monitorare la lettura del sensore in modalità wireless da una distanza di pochi chilometri. Il mittente leggerà i dati di umidità e temperatura utilizzando il sensore DHT11. Quindi trasmette i dati tramite LoRa Radio. I dati vengono ricevuti dal modulo ricevitore. Il ricevitore invierà quindi i dati a Thingspeak Server dopo un certo intervallo.

Passaggio 1: componenti necessari

1. Scheda ESP32 - 2

2. Modulo Lora SX1278/SX1276

3. Sensore di temperatura dell'umidità DHT11

4. Tagliere

5. Collegamento dei cavi dei ponticelli

Passaggio 2: installazione delle librerie richieste

Dobbiamo prima installare diverse librerie:

1. Libreria DHT11

2. Libreria LoRa

Passaggio 3: gateway ESP32 LoRa Thingspeak

ESP32 LoRa Thingspeak Gateway
ESP32 LoRa Thingspeak Gateway
ESP32 LoRa Thingspeak Gateway
ESP32 LoRa Thingspeak Gateway

Ora vediamo il circuito del mittente e del ricevitore per la creazione di ESP32 LoRa Gateway & Sensor Node. Ho montato entrambi i circuiti su una breadboard. Puoi farlo su PCB se vuoi.

Ecco un circuito gateway ESP32 LoRa Module SX1278. Questa parte funziona come un ricevitore. I dati di umidità e temperatura vengono ricevuti utilizzando LoRa Radio e caricati su Thingspeak Server.

Passaggio 4: Nodo del sensore LoRa ESP32

Nodo sensore LoRa ESP32
Nodo sensore LoRa ESP32
Nodo sensore LoRa ESP32
Nodo sensore LoRa ESP32

Ecco un circuito del nodo del sensore LoRa ESP32 con sensore DHT11. Questa parte funziona come un trasmettitore. I dati di umidità e temperatura vengono letti dal sensore di temperatura dell'umidità DHT11 e trasmessi tramite LoRa Radio.

Passaggio 5: configurazione di Thingspeak

Configurare Thingspeak
Configurare Thingspeak

Per monitorare i dati del sensore su Thingspeak Server, devi prima configurare Thingspeak. Per configurare il server Thingspeak, visitare https://thingspeak.com/. Crea un account o semplicemente accedi se hai creato l'account in precedenza. Quindi crea un nuovo canale con i seguenti dettagli.

Passaggio 6: codice gateway

#includere

//Librerie per LoRa #include #include //definisce i pin utilizzati dal modulo ricetrasmettitore LoRa #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 //433E6 per l'Asia, 866E6 per l'Europa, 915E6 per il Nord America // Sostituisci con le tue credenziali di rete String apiKey = "14K8UL2QEK8BTHN6"; // Inserisci la tua chiave API di scrittura da ThingSpeak const char *ssid = "Wifi SSID"; // sostituisci con il tuo ssid wifi e la chiave wpa2 const char *password = "Password"; const char* server = "api.thingspeak.com"; client WiFi Client; // Inizializza le variabili per ottenere e salvare i dati LoRa int rssi; String loRaMessage; Temperatura della stringa; Umidità della stringa; ID lettura stringa; // Sostituisce il segnaposto con i valori DHT String processor(const String& var){ //Serial.println(var); if(var == "TEMPERATURA") { temperatura di ritorno; } else if(var == "UMIDITÀ") { restituisce l'umidità; } else if (var == "RRSI") { return String(rssi); } return String(); } void setup() { Serial.begin(115200); contatore int; //configura il modulo ricetrasmettitore LoRa LoRa.setPins(ss, rst, dio0); //imposta il modulo ricetrasmettitore LoRa while (!LoRa.begin(BAND) && counter < 10) { Serial.print("."); contatore++; ritardo (2000); } if (counter == 10) { // Incrementa readingID ad ogni nuova lettura Serial.println("Avvio LoRa fallito!"); } Serial.println("Inizializzazione LoRa OK!"); ritardo (2000); // Connettiti alla rete Wi-Fi con SSID e password Serial.print("Connessione a"); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { ritardo(2000); Serial.print("."); } // Stampa l'indirizzo IP locale e avvia il server web Serial.println(""); Serial.println("WiFi connesso."); Serial.println("Indirizzo IP: "); Serial.println(WiFi.localIP()); } // Legge il pacchetto LoRa e ottiene le letture del sensore void loop() { int packetSize = LoRa.parsePacket(); if (packetSize) { Serial.print("Lora pacchetto ricevuto: "); while (LoRa.available()) // Leggi pacchetto { String LoRaData = LoRa.readString(); Serial.print(LoRaData); int pos1 = LoRaData.indexOf('/'); int pos2 = LoRaData.indexOf('&'); readingID = LoRaData.substring(0, pos1); // Ottieni readingID temperature = LoRaData.substring(pos1 +1, pos2); // Ottieni l'umidità della temperatura = LoRaData.substring(pos2+1, LoRaData.length()); // Ottieni l'umidità } rssi = LoRa.packetRssi(); // Ottieni RSSI Serial.print(" with RSSI "); Serial.println(rssi); } if (client.connect(server, 80)) // "184.106.153.149" o api.thingspeak.com { String postStr = apiKey; postStr += "&field1="; postStr += String (ID lettura); postStr += "&field2="; postStr += String(temperatura); postStr += "&field3="; postStr += String(umidità); postStr += "&field4="; postStr += String(rssi); postStr += "\r\n\r\n\r\n\r\n"; client.print("POST /update HTTP/1.1\n"); client.print("Host: api.thingspeak.com\n"); client.print("Connessione: chiudi\n"); client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n"); client.print("Content-Type: application/x-www-form-urlencoded\n"); client.print("Lunghezza contenuto: "); client.print(postStr.length()); client.print("\n\n"); client.print(postStr); } //ritardo(30000); }

Passaggio 7: codice del nodo del sensore

#includere

#include //Librerie per LoRa #include "DHT.h" #define DHTPIN 4 //pin dove è connesso il dht11 DHT dht(DHTPIN, DHT11); //definire i pin utilizzati dal modulo ricetrasmettitore LoRa #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 //433E6 per l'Asia, 866E6 per l'Europa, 915E6 per il Nord America //packet counter int readingID = 0; contatore int = 0; String LoRaMessage = ""; temperatura galleggiante = 0; umidità galleggiante = 0; //Inizializza il modulo LoRa void startLoRA() { LoRa.setPins(ss, rst, dio0); //imposta il modulo ricetrasmettitore LoRa while (!LoRa.begin(BAND) && counter < 10) { Serial.print("."); contatore++; ritardo (500); } if (counter == 10) { // Incrementa readingID su ogni nuova lettura readingID++; Serial.println("Avvio di LoRa fallito!"); } Serial.println("Inizializzazione LoRa OK!"); ritardo (2000); } void startDHT() { if (isnan(umidità) || isnan(temperatura)) { Serial.println("Impossibile leggere dal sensore DHT!"); Restituzione; } } void getReadings(){ umidità = dht.readHumidity(); temperatura = dht.readTemperature(); Serial.print(F("Umidità: ")); Serial.print(umidità); Serial.print(F("% Temperatura: ")); Serial.print(temperatura); Serial.println(F("°C ")); } void sendReadings() { LoRaMessage = String(readingID) + "/" + String(temperatura) + "&" + String(umidità); //Invia il pacchetto LoRa al destinatario LoRa.beginPacket(); LoRa.print(LoRaMessage); LoRa.endPacket(); Serial.print("Invio pacchetto: "); Serial.println(readingID); ID lettura++; Serial.println(LoRaMessage); } void setup() { //inizializza Serial Monitor Serial.begin(115200); dht.begin(); inizioDHT(); startLoRA(); } void loop() { getReadings(); sendReading(); ritardo (500); }

Passaggio 8: monitorare i dati su Thingspeak Server

Monitora i dati su Thingspeak Server
Monitora i dati su Thingspeak Server
Monitora i dati su Thingspeak Server
Monitora i dati su Thingspeak Server

Una volta caricato il codice, è possibile aprire il monitor seriale sia sul gateway che sul circuito del nodo del sensore. I dati verranno inviati e ricevuti se il codice è corretto. Ora puoi visitare la vista privata di Thingspeak. Lì puoi vedere i dati per il numero di pacchetto, la temperatura, l'umidità e il gateway vengono caricati dopo l'intervallo di 15 secondi.

Passaggio 9: riferimenti

1.

2.

Consigliato: