Inhoudsopgave:
Video: ESP32 Lora Thingspeak Gateway met sensorknooppunt - Ajarnpa
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
in dit IoT-project ontwierp ik ESP32 LoRa Gateway en ook ESP32 LoRa Sensor Node om de sensormeting draadloos te volgen vanaf een afstand van een paar kilometer. De afzender leest de vochtigheids- en temperatuurgegevens met behulp van de DHT11-sensor. Vervolgens verzendt het de gegevens via LoRa Radio. De gegevens worden ontvangen door de ontvangermodule. De ontvanger stuurt de gegevens dan na een bepaalde tijd naar Thingspeak Server.
Stap 1: Vereiste componenten
1. ESP32-kaart - 2"
2. Lora-module SX1278/SX1276
3. DHT11 Vochtigheidstemperatuursensor
4. Broodplank
5. Jumper-draden aansluiten
Stap 2: De vereiste bibliotheken installeren
We moeten eerst verschillende bibliotheken installeren:
1. DHT11-bibliotheek
2. LoRa-bibliotheek
Stap 3: ESP32 LoRa Thingspeak Gateway
Laten we nu het zender- en ontvangercircuit bekijken voor het bouwen van ESP32 LoRa Gateway & Sensor Node. Ik heb beide circuits op een breadboard gemonteerd. Je kunt het op PCB maken als je wilt.
Hier is een ESP32 LoRa-module SX1278 Gateway Circuit. Dit onderdeel werkt als een ontvanger. De vochtigheids- en temperatuurgegevens worden ontvangen met LoRa Radio en geüpload naar Thingspeak Server.
Stap 4: ESP32 LoRa-sensorknooppunt
Hier is een ESP32 LoRa-sensorknooppuntcircuit met DHT11-sensor. Dit onderdeel werkt als een zender. De vochtigheids- en temperatuurgegevens worden gelezen door de DHT11-vochtigheidstemperatuursensor en verzonden met behulp van LoRa-radio.
Stap 5: Thingspeak instellen
Om de sensorgegevens op de Thingspeak-server te controleren, moet u eerst de Thingspeak instellen. Ga naar https://thingspeak.com/ om de Thingspeak-server in te stellen. Maak een account aan of log gewoon in als je het account eerder hebt aangemaakt. Maak dan een nieuw kanaal aan met de volgende details.
Stap 6: Gatewaycode
#erbij betrekken
//Bibliotheken voor LoRa #include #include //definieer de pinnen die worden gebruikt door de LoRa-zendontvangermodule #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 //433E6 voor Azië, 866E6 voor Europa, 915E6 voor Noord-Amerika // Vervang door uw netwerkreferenties String apiKey = "14K8UL2QEK8BTHN6"; // Voer uw Write API-sleutel van ThingSpeak in const char *ssid = "Wifi SSID"; // vervang door je wifi ssid en wpa2 key const char *password = "Wachtwoord"; const char* server = "api.thingspeak.com"; WiFiClient-client; // Initialiseer variabelen om LoRa-gegevens int rssi te krijgen en op te slaan; String loRaMessage; String temperatuur; String vochtigheid; String lees-ID; // Vervangt tijdelijke aanduiding door DHT-waarden String processor (const String& var) {//Serial.println(var); if(var == "TEMPERATUUR") { retourtemperatuur; } else if(var == "VOCHTHEID") { retour vochtigheid; } else if (var == "RRSI") { return String (rssi); } retourneer String (); } void setup() { Serial.begin(115200); int teller; // LoRa-zendontvangermodule instellen LoRa.setPins (ss, rst, dio0); //setup LoRa transceiver module while (!LoRa.begin(BAND) && counter <10) {Serial.print("."); teller++; vertraging (2000); } if (counter == 10) { // Verhogen readingID bij elke nieuwe lezing Serial.println ("Starten van LoRa is mislukt!"); } Serial.println ("LoRa-initialisatie OK!"); vertraging (2000); // Maak verbinding met het wifi-netwerk met SSID en wachtwoord Serial.print ("Verbinding maken met "); Seriële.println(ssid); WiFi.begin(ssid, wachtwoord); while (WiFi.status() != WL_CONNECTED) {delay (2000); Serieel.print("."); } // Druk het lokale IP-adres af en start de webserver Serial.println(""); Serial.println("WiFi verbonden."); Serial.println("IP-adres: "); Serial.println(WiFi.localIP()); } // Lees LoRa-pakket en ontvang de sensormetingen void loop () {int packetSize = LoRa.parsePacket (); if (packetSize) { Serial.print("Lora pakket ontvangen: "); while (LoRa.available()) // Lees pakket { String LoRaData = LoRa.readString (); Serial.print (LoRaData); int pos1 = LoRaData.indexOf('/'); int pos2 = LoRaData.indexOf('&'); readingID = LoRaData.substring (0, pos1); // Get readingID temperatuur = LoRaData.substring (pos1 +1, pos2); // Get temperatuur vochtigheid = LoRaData.substring(pos2+1, LoRaData.length()); // Krijg vochtigheid} rssi = LoRa.packetRssi (); // Download RSSI Serial.print(" met RSSI "); Serieel.println(rssi); } if (client.connect(server, 80)) // "184.106.153.149" of api.thingspeak.com { String postStr = apiKey; postStr += "&field1="; postStr += String (lees-ID); postStr += "&field2="; postStr += String (temperatuur); postStr += "&field3="; postStr += String (vochtigheid); 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("Verbinding: sluiten\n"); client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n"); client.print("Inhoudstype: applicatie/x-www-form-urlencoded\n"); client.print ("Inhoudslengte: "); client.print(postStr.length()); cliënt.print("\n\n"); cliënt.print(postStr); } //vertraging (30000); }
Stap 7: Sensorknooppuntcode
#erbij betrekken
#include //Bibliotheken voor LoRa #include "DHT.h" #define DHTPIN 4 //pin waar de dht11 is aangesloten DHT dht(DHTPIN, DHT11); //definieer de pinnen die worden gebruikt door de LoRa-transceivermodule #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 //433E6 voor Azië, 866E6 voor Europa, 915E6 voor Noord-Amerika // pakketteller int readingID = 0; int-teller = 0; Tekenreeks LoRaMessage = ""; vlottertemperatuur = 0; vlottervochtigheid = 0; // Initialiseer LoRa-module void startLoRA () { LoRa.setPins (ss, rst, dio0); //setup LoRa transceiver module while (!LoRa.begin(BAND) && counter <10) {Serial.print("."); teller++; vertraging (500); } if (counter == 10) { // Verhogen readingID bij elke nieuwe reading readingID++; Serial.println ("Starten van LoRa is mislukt!"); } Serial.println ("LoRa-initialisatie OK!"); vertraging (2000); } void startDHT() {if (isnan(vochtigheid) || isnan(temperatuur)) {Serial.println("Kan niet lezen van DHT-sensor!"); opbrengst; } } void getReadings(){ vochtigheid = dht.readHumidity(); temperatuur = dht.readTemperature(); Serial.print(F("Vochtigheid: ")); Seriële.afdruk (vochtigheid); Serial.print(F("% temperatuur: ")); Seriële.afdruk (temperatuur); Serial.println(F("°C")); } void sendReadings () { LoRaMessage = String (readingID) + "/" + String (temperatuur) + "&" + String (vochtigheid); // Stuur LoRa-pakket naar ontvanger LoRa.beginPacket (); LoRa.print (LoRaMessage); LoRa.endPacket(); Serial.print("Verzendpakket: "); Serial.println(readingID); leesID++; Serial.println (LoRaMessage); } void setup () { // initialiseer Serial Monitor Serial.begin (115200); dht.begin(); startDHT(); startLoRA(); } void loop() { getReadings(); sendLezingen(); vertraging (500); }
Stap 8: Bewaak gegevens op Thingspeak Server
Nadat de code is geüpload, kunt u de seriële monitor openen op zowel het gateway- als het sensorknooppuntcircuit. U zult gegevens verzenden en ontvangen als de code correct is. Nu kunt u Thingspeak Private View bezoeken. Daar kunt u zien dat de gegevens voor pakketnummer, temperatuur, vochtigheid en gateway worden geüpload na een interval van 15 seconden.
Stap 9: Referenties
1.
2.