INHOUDSOPGAWE:
Video: ESP32 Lora Thingspeak -gateway met sensorknoop: 9 stappe
2025 Outeur: John Day | [email protected]. Laas verander: 2025-01-13 06:56
in hierdie IoT -projek het ek ESP32 LoRa Gateway en ook ESP32 LoRa Sensor Node ontwerp om die sensorlesing draadloos vanaf 'n paar kilometer afstande te monitor. Die sender sal die humiditeits- en temperatuurdata lees met behulp van die DHT11 -sensor. Dan stuur dit die data via LoRa Radio. Die data word deur die ontvanger -module ontvang. Die ontvanger sal die data dan na 'n sekere interval na die Thingspeak Server stuur.
Stap 1: Vereiste komponente
1. ESP32 -bord - 2
2. Lora Module SX1278/SX1276
3. DHT11 Humiditeit Temperatuur Sensor
4. Broodbord
5. Verbindingsdrade verbind
Stap 2: Die installering van die vereiste biblioteke
Ons moet eers verskillende biblioteke installeer:
1. DHT11 -biblioteek
2. LoRa -biblioteek
Stap 3: ESP32 LoRa Thingspeak Gateway
Laat ons nou die sender- en ontvanger -kring sien vir die bou van ESP32 LoRa Gateway & Sensor Node. Ek het albei die kring op 'n broodbord bymekaargemaak. U kan dit op PCB maak as u wil.
Hier is 'n ESP32 LoRa Module SX1278 Gateway Circuit. Hierdie deel werk as 'n ontvanger. Die humiditeits- en temperatuurdata word met behulp van LoRa Radio ontvang en na Thingspeak Server opgelaai.
Stap 4: ESP32 LoRa Sensor Node
Hier is 'n ESP32 LoRa Sensor Node Circuit met DHT11 Sensor. Hierdie deel werk as 'n sender. Die humiditeits- en temperatuurdata word deur die DHT11 Humidity Temperature Sensor gelees en met behulp van LoRa Radio oorgedra.
Stap 5: Die opstel van Thingspeak
Om die sensordata op Thingspeak Server te monitor, moet u eers die Thingspeak instel. Besoek https://thingspeak.com/ om die Thingspeak Server op te stel. Skep 'n rekening of meld net aan as u die rekening vroeër geskep het. Skep dan 'n nuwe kanaal met die volgende besonderhede.
Stap 6: Gateway -kode
#insluit
// Biblioteke vir LoRa #include #include // definieer die penne wat deur die LoRa -ontvangersmodule gebruik word #definieer ss 5 #definieer eerste 14 #definieer dio0 2 #definieer BAND 433E6 // 433E6 vir Asië, 866E6 vir Europa, 915E6 vir Noord -Amerika // Vervang met u netwerkbewyse String apiKey = "14K8UL2QEK8BTHN6"; // Voer u Write API -sleutel in van ThingSpeak const char *ssid = "Wifi SSID"; // vervang met u wifi ssid en wpa2 sleutel const char *password = "Password"; const char* server = "api.thingspeak.com"; WiFiClient -kliënt; // Initialiseer veranderlikes om LoRa -data int rssi te kry en op te slaan; String loRaMessage; Snaar temperatuur; String humiditeit; Snaarlees -ID; // Vervang plekhouer met DHT -waardes String -verwerker (const String & var) {//Serial.println(var); if (var == "TEMPERATUUR") {returtemperatuur; } anders as (var == "HUMIDITY") {humiditeit terugkeer; } anders if (var == "RRSI") {return String (rssi); } terugkeer string (); } ongeldige opstelling () {Serial.begin (115200); int toonbank; // opstel van LoRa transceiver module LoRa.setPins (ss, rst, dio0); // stel LoRa -ontvangersmodule op terwyl (! LoRa.begin (BAND) && teller <10) {Serial.print ("."); toonbank ++; vertraging (2000); } if (counter == 10) {// Verhoog lees -ID op elke nuwe lesing Serial.println ("Begin met LoRa misluk!"); } Serial.println ("LoRa -inisialisering OK!"); vertraging (2000); // Koppel aan 'n Wi-Fi-netwerk met SSID en wagwoord Serial.print ("Koppel aan"); Serial.println (ssid); WiFi.begin (ssid, wagwoord); terwyl (WiFi.status ()! = WL_CONNECTED) {vertraging (2000); Serial.print ("."); } // Druk die plaaslike IP -adres af en begin die webbediener Serial.println (""); Serial.println ("WiFi gekoppel."); Serial.println ("IP -adres:"); Serial.println (WiFi.localIP ()); } // Lees LoRa -pakkie en kry die sensorlesings se leemte -lus () {int packetSize = LoRa.parsePacket (); if (packetSize) {Serial.print ("Lora pakket ontvang:"); terwyl (LoRa.available ()) // Lees pakkie {String LoRaData = LoRa.readString (); Serial.print (LoRaData); int pos1 = LoRaData.indexOf ('/'); int pos2 = LoRaData.indexOf ('&'); readingID = LoRaData.substring (0, pos1); // Kry lees -ID temperatuur = LoRaData.substring (pos1 +1, pos2); // Kry temperatuurvochtigheid = LoRaData.substring (pos2+1, LoRaData.length ()); // Kry humiditeit} rssi = LoRa.packetRssi (); // Kry RSSI Serial.print ("met RSSI"); Serial.println (rssi); } if (client.connect (bediener, 80)) // "184.106.153.149" of api.thingspeak.com {String postStr = apiKey; postStr += "& field1 ="; postStr += String (readingID); postStr += "& field2 ="; postStr += String (temperatuur); postStr += "& field3 ="; postStr += String (humiditeit); postStr += "& field4 ="; postStr += String (rssi); postStr += "\ r / n / r / n / r / n / r / n"; client.print ("POST /opdater HTTP /1.1 / n"); client.print ("Gasheer: api.thingspeak.com / n"); client.print ("verbinding: sluit / n"); client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); client.print ("Inhoudstipe: toepassing/x-www-vorm-urlencoded / n"); client.print ("Inhoudlengte:"); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); } // vertraging (30000); }
Stap 7: Sensorknooppuntkode
#insluit
#include // Libraries for LoRa #include "DHT.h" #define DHTPIN 4 // pin waar die dht11 gekoppel is DHT dht (DHTPIN, DHT11); // definieer die penne wat deur die LoRa -transceivermodule gebruik word #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 // 433E6 vir Asië, 866E6 vir Europa, 915E6 vir Noord -Amerika // packet counter int readingID = 0; int teller = 0; String LoRaMessage = ""; vlottemperatuur = 0; vlot humiditeit = 0; // Initialiseer LoRa -module ongeldig startLoRA () {LoRa.setPins (ss, rst, dio0); // stel LoRa -ontvangersmodule op terwyl (! LoRa.begin (BAND) && teller <10) {Serial.print ("."); toonbank ++; vertraging (500); } if (teller == 10) {// Verhoog lees -ID op elke nuwe lees -lees -ID ++; Serial.println ("Begin met LoRa misluk!"); } Serial.println ("LoRa -inisialisering OK!"); vertraging (2000); } ongeldig startDHT () {if (isnan (humiditeit) || isnan (temperatuur)) {Serial.println ("Kan nie lees van DHT -sensor nie!"); terugkeer; }} void getReadings () {humiditeit = dht.readHumidity (); temperatuur = dht.readTemperature (); Serial.print (F ("Humidity:")); Reeks.afdruk (humiditeit); Serial.print (F ("% temperatuur:")); Reeks.afdruk (temperatuur); Serial.println (F ("° C")); } void sendReadings () {LoRaMessage = String (readingID) + "/" + String (temperatuur) + "&" + String (humiditeit); // Stuur LoRa -pakkie na ontvanger LoRa.beginPacket (); LoRa.print (LoRaMessage); LoRa.endPacket (); Serial.print ("Pakket stuur:"); Serial.println (lees -ID); readingID ++; Serial.println (LoRaMessage); } ongeldige opstelling () {// initialiseer Serial Monitor Serial.begin (115200); dht.begin (); startDHT (); startLoRA (); } leemte -lus () {getReadings (); sendReadings (); vertraging (500); }
Stap 8: Monitor data op Thingspeak Server
Sodra die kode opgelaai is, kan u die seriële monitor op beide die gateway- en sensorknoopbaan oopmaak. U sal data stuur en ontvang as die kode korrek is. Nou kan u Thingspeak Private View besoek. Daar kan u die data vir pakkienommer, temperatuur, humiditeit en gateway na die interval van 15 sekondes sien.
Stap 9: Verwysings
1.
2.