Innehållsförteckning:
Video: ESP32 Lora Thingspeak Gateway med sensornod: 9 steg
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
i detta IoT -projekt designade jag ESP32 LoRa Gateway och även ESP32 LoRa Sensor Node för att övervaka sensoravläsningen trådlöst från några kilometers avstånd. Avsändaren läser av fukt- och temperaturdata med DHT11 -sensor. Sedan överför den data via LoRa Radio. Data tas emot av mottagarmodulen. Mottagaren skickar sedan data till Thingspeak Server efter ett visst intervall.
Steg 1: Komponenter krävs
1. ESP32 -kort - 2
2. Lora -modul SX1278/SX1276
3. DHT11 fuktighets temperatursensor
4. Brödbräda
5. Anslutning av bygelkablar
Steg 2: Installera de obligatoriska biblioteken
Vi måste installera olika bibliotek först:
1. DHT11 -bibliotek
2. LoRa -bibliotek
Steg 3: ESP32 LoRa Thingspeak Gateway
Låt oss nu se avsändar- och mottagarkretsen för att bygga ESP32 LoRa Gateway & Sensor Node. Jag monterade båda kretsarna på en brödbräda. Du kan göra det på PCB om du vill.
Här är en ESP32 LoRa Module SX1278 Gateway Circuit. Denna del fungerar som mottagare. Luftfuktighets- och temperaturdata tas emot med LoRa Radio och laddas upp till Thingspeak Server.
Steg 4: ESP32 LoRa Sensornod
Här är en ESP32 LoRa Sensor Node Circuit med DHT11 Sensor. Denna del fungerar som en sändare. Luftfuktighets- och temperaturdata läses av DHT11 Luftfuktighetssensor och överförs med LoRa Radio.
Steg 5: Konfigurera Thingspeak
För att övervaka sensordata på Thingspeak -servern måste du först konfigurera Thingspeak. Besök https://thingspeak.com/ om du vill konfigurera Thingspeak -servern. Skapa ett konto eller logga in om du skapade kontot tidigare. Skapa sedan en ny kanal med följande detaljer.
Steg 6: Gateway -kod
#omfatta
// Bibliotek för LoRa #include #include // definiera stiften som används av LoRa -sändtagarmodulen #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 // 433E6 för Asien, 866E6 för Europa, 915E6 för Nordamerika // Ersätt med dina nätverksuppgifter String apiKey = "14K8UL2QEK8BTHN6"; // Ange din Write API -nyckel från ThingSpeak const char *ssid = "Wifi SSID"; // ersätt med din wifi ssid och wpa2 -nyckel const char *password = "Password"; const char* server = "api.thingspeak.com"; WiFiClient -klient; // Initiera variabler för att hämta och spara LoRa -data int rssi; String loRaMessage; Strängtemperatur; Strängfuktighet; SträngläsningID; // Ersätter platshållare med DHT -värden String -processor (const String & var) {//Serial.println(var); if (var == "TEMPERATURE") {returtemperatur; } annars if (var == "HUMIDITY") {returfuktighet; } annars if (var == "RRSI") {return String (rssi); } retursträng (); } void setup () {Serial.begin (115200); int räknare; // setup LoRa -sändtagarmodul LoRa.setPins (ss, rst, dio0); // konfigurera LoRa -sändtagarmodul medan (! LoRa.begin (BAND) && räknare <10) {Serial.print ("."); räknare ++; fördröjning (2000); } if (counter == 10) {// Öka läs -ID för varje ny läsning Serial.println ("Starta LoRa misslyckades!"); } Serial.println ("LoRa -initialisering OK!"); fördröjning (2000); // Anslut till Wi-Fi-nätverk med SSID och lösenord Serial.print ("Ansluter till"); Serial.println (ssid); WiFi.begin (ssid, lösenord); medan (WiFi.status ()! = WL_CONNECTED) {fördröjning (2000); Serial.print ("."); } // Skriv ut lokal IP -adress och starta webbservern Serial.println (""); Serial.println ("WiFi -ansluten."); Serial.println ("IP -adress:"); Serial.println (WiFi.localIP ()); } // Läs LoRa -paketet och få sensoravläsningarna void loop () {int packetSize = LoRa.parsePacket (); if (packetSize) {Serial.print ("Lora -paket mottaget:"); while (LoRa.available ()) // Läs paket {String LoRaData = LoRa.readString (); Serial.print (LoRaData); int pos1 = LoRaData.indexOf ('/'); int pos2 = LoRaData.indexOf ('&'); readingID = LoRaData.substring (0, pos1); // Få läsningID -temperatur = LoRaData.substring (pos1 +1, pos2); // Få temperaturfuktighet = LoRaData.substring (pos2+1, LoRaData.length ()); // Få fukt} rssi = LoRa.packetRssi (); // Skaffa RSSI Serial.print ("med RSSI"); Serial.println (rssi); } if (client.connect (server, 80)) // "184.106.153.149" eller api.thingspeak.com {String postStr = apiKey; postStr += "& field1 ="; postStr += String (läs -ID); postStr += "& field2 ="; postStr += Sträng (temperatur); postStr += "& field3 ="; postStr += Sträng (fuktighet); postStr += "& field4 ="; postStr += String (rssi); postStr += "\ r / n / r / n / r / n / r / n"; client.print ("POST /uppdatera HTTP /1.1 / n"); client.print ("Värd: api.thingspeak.com / n"); client.print ("Anslutning: stäng / n"); client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); client.print ("Content-Type: application/x-www-form-urlencoded / n"); client.print ("Content-Length:"); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); } // fördröjning (30000); }
Steg 7: Sensornodskod
#omfatta
#include // Libraries for LoRa #include "DHT.h" #define DHTPIN 4 // pin där dht11 är ansluten DHT dht (DHTPIN, DHT11); // definiera stiften som används av LoRa -sändtagarmodulen #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 // 433E6 för Asien, 866E6 för Europa, 915E6 för Nordamerika // packet counter int readingID = 0; int räknare = 0; String LoRaMessage = ""; flottörtemperatur = 0; flottörfuktighet = 0; // Initiera LoRa -modulen void startLoRA () {LoRa.setPins (ss, rst, dio0); // konfigurera LoRa -sändtagarmodul medan (! LoRa.begin (BAND) && räknare <10) {Serial.print ("."); räknare ++; fördröjning (500); } if (counter == 10) {// Öka läs -ID för varje ny läsning läsning -ID ++; Serial.println ("Starta LoRa misslyckades!"); } Serial.println ("LoRa -initialisering OK!"); fördröjning (2000); } void startDHT () {if (isnan (fuktighet) || isnan (temperatur)) {Serial.println ("Det gick inte att läsa från DHT -sensorn!"); lämna tillbaka; }} void getReadings () {fuktighet = dht.readHumidity (); temperatur = dht.readTemperature (); Serial.print (F ("Luftfuktighet:")); Seriellt tryck (luftfuktighet); Serial.print (F ("% Temperatur:")); Seriellt tryck (temperatur); Serial.println (F ("° C")); } void sendReadings () {LoRaMessage = String (readingID) + "/" + String (temperatur) + "&" + String (fuktighet); // Skicka LoRa -paket till mottagaren LoRa.beginPacket (); LoRa.print (LoRaMessage); LoRa.endPacket (); Serial.print ("Skickar paket:"); Serial.println (läs -ID); readingID ++; Serial.println (LoRaMessage); } void setup () {// initialize Serial Monitor Serial.begin (115200); dht.begin (); startDHT (); startLoRA (); } void loop () {getReadings (); sendReadings (); fördröjning (500); }
Steg 8: Övervaka data på Thingspeak Server
När koden har laddats upp kan du öppna seriell bildskärm på både Gateway & Sensor Node Circuit. Du kommer att skicka och ta emot data om koden är korrekt. Nu kan du besöka Thingspeak Private View. Där kan du se data för paketnummer, temperatur, luftfuktighet och gateway laddas upp efter intervallet 15 sekunder.
Steg 9: Referenser
1.
2.