ESP32 „Lora Thingspeak Gateway“su jutiklio mazgu: 9 žingsniai
ESP32 „Lora Thingspeak Gateway“su jutiklio mazgu: 9 žingsniai

Video: ESP32 „Lora Thingspeak Gateway“su jutiklio mazgu: 9 žingsniai

Video: ESP32 „Lora Thingspeak Gateway“su jutiklio mazgu: 9 žingsniai
Video: Multilayers soil moisture temperature EC Salinity NPK sensor with LORAWAN 2025, Sausis
Anonim
ESP32 „Lora Thingspeak Gateway“su jutiklio mazgu
ESP32 „Lora Thingspeak Gateway“su jutiklio mazgu

Šiame „IoT“projekte aš sukūriau „ESP32 LoRa Gateway“ir „ESP32 LoRa Sensor Node“, kad belaidžiu būdu stebėtų jutiklio rodmenis iš kelių kilometrų atstumo. Siuntėjas nuskaitys drėgmės ir temperatūros duomenis naudodamas DHT11 jutiklį. Tada jis perduoda duomenis per „LoRa Radio“. Duomenis priima imtuvo modulis. Imtuvas po tam tikro laiko atsiųs duomenis į „Thingspeak Server“.

1 žingsnis: reikalingi komponentai

1. ESP32 lenta - 2

2. Lora modulis SX1278/SX1276

3. DHT11 drėgmės temperatūros jutiklis

4. Duonos lenta

5. Jungiamųjų laidų prijungimas

2 veiksmas: reikiamų bibliotekų diegimas

Pirmiausia turime įdiegti skirtingas bibliotekas:

1. DHT11 biblioteka

2. LoRa biblioteka

3 žingsnis: ESP32 „LoRa Thingspeak Gateway“

ESP32 „LoRa Thingspeak Gateway“
ESP32 „LoRa Thingspeak Gateway“
ESP32 „LoRa Thingspeak Gateway“
ESP32 „LoRa Thingspeak Gateway“

Dabar pažiūrėkime siuntėjo ir gavėjo grandinę ESP32 „LoRa Gateway & Sensor Node“kūrimui. Aš sumontavau abi grandines ant duonos lentos. Jei norite, galite tai padaryti ant PCB.

Čia yra ESP32 „LoRa“modulio SX1278 šliuzo grandinė. Ši dalis veikia kaip imtuvas. Duomenys apie drėgmę ir temperatūrą gaunami naudojant „LoRa Radio“ir įkeliami į „Thingspeak Server“.

4 žingsnis: ESP32 „LoRa“jutiklio mazgas

ESP32 „LoRa“jutiklio mazgas
ESP32 „LoRa“jutiklio mazgas
ESP32 „LoRa“jutiklio mazgas
ESP32 „LoRa“jutiklio mazgas

Čia yra ESP32 „LoRa“jutiklio mazgo grandinė su DHT11 jutikliu. Ši dalis veikia kaip siųstuvas. Drėgmės ir temperatūros duomenys nuskaitomi DHT11 drėgmės temperatūros jutikliu ir perduodami naudojant „LoRa“radiją.

5 veiksmas: „Thingspeak“nustatymas

„Thingspeak“nustatymas
„Thingspeak“nustatymas

Norėdami stebėti jutiklių duomenis „Thingspeak“serveryje, pirmiausia turite nustatyti „Thingspeak“. Norėdami nustatyti „Thingspeak“serverį, apsilankykite https://thingspeak.com/. Sukurkite paskyrą arba tiesiog prisijunkite, jei paskyrą sukūrėte anksčiau. Tada sukurkite naują kanalą su šiomis detalėmis.

6 žingsnis: Vartų kodas

#įtraukti

// „LoRa“bibliotekos #include #include // apibrėžkite „LoRa“siųstuvo -imtuvo modulio naudojamus kaiščius #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 // 433E6 Azijai, 866E6 Europai, 915E6 Šiaurės Amerikai // Pakeisti tinklo kredencialais String apiKey = "14K8UL2QEK8BTHN6"; // Įveskite savo „Write API“raktą iš „ThingSpeak“const char *ssid = "Wifi SSID"; // pakeisti savo wifi ssid ir wpa2 raktu const char *password = "Slaptažodis"; const char* serveris = "api.thingspeak.com"; „WiFiClient“klientas; // Inicijuokite kintamuosius, kad gautumėte ir išsaugotumėte LoRa duomenis int rssi; Styga loRaMessage; Styginių temperatūra; Styginių drėgmė; Eilutės skaitymo ID; // Pakeičia vietos rezervavimo ženklą DHT reikšmėmis Styginių procesorius (const String & var) {//Serial.println(var); if (var == "TEMPERATURE") {grįžimo temperatūra; } else if (var == "HUMIDITY") {grąžinama drėgmė; } else if (var == "RRSI") {return String (rssi); } return String (); } void setup () {Serial.begin (115200); int skaitiklis; // sąranka LoRa siųstuvo -imtuvo modulis LoRa.setPins (ss, rst, dio0); // nustatyti LoRa siųstuvo -imtuvo modulį while (! LoRa.begin (BAND) && counter <10) {Serial.print ("."); skaitiklis ++; vėlavimas (2000 m.); } if (skaitiklis == 10) {// Skaitymo ID didinimas kiekvienam naujam skaitymui Serial.println ("LoRa paleidimas nepavyko!"); } Serial.println ("LoRa inicijavimas gerai!"); vėlavimas (2000 m.); // Prisijunkite prie „Wi-Fi“tinklo naudodami SSID ir slaptažodį Serial.print („Prisijungimas prie“); Serial.println (ssid); WiFi.begin (ssid, slaptažodis); while (WiFi.status ()! = WL_CONNECTED) {delay (2000); Serijinis atspaudas ("."); } // Atspausdinkite vietinį IP adresą ir paleiskite žiniatinklio serverį Serial.println (""); Serial.println („Wi -Fi prijungtas“); Serial.println ("IP adresas:"); Serial.println (WiFi.localIP ()); } // Perskaitykite „LoRa“paketą ir gaukite jutiklio rodmenų void loop () {int packetSize = LoRa.parsePacket (); if (packetSize) {Serial.print ("Lora paketas gautas:"); while (LoRa.available ()) // Skaityti paketą {String LoRaData = LoRa.readString (); Serial.print („LoRaData“); int pos1 = LoRaData.indexOf ('/'); int pos2 = LoRaData.indexOf ('&'); readingID = LoRaData.substring (0, poz1); // Gauti skaitymo ID temperatūra = LoRaData.substring (poz1 +1, pos2); // Gauti temperatūros drėgmę = LoRaData.substring (pos2+1, LoRaData.length ()); // Gauti drėgmę} rssi = LoRa.packetRssi (); // Gauti RSSI Serial.print ("su RSSI"); Serial.println (rssi); } if (client.connect (serveris, 80)) // "184.106.153.149" arba api.thingspeak.com {String postStr = apiKey; postStr += "& field1 ="; postStr += Styga (skaitymo ID); postStr += "& field2 ="; postStr += Styga (temperatūra); postStr += "& field3 ="; postStr += Styga (drėgmė); postStr += "& field4 ="; postStr += Styga (rssi); postStr += "\ r / n / r / n / r / n / r / n"; client.print ("POST /atnaujinti HTTP /1.1 / n"); client.print ("Priegloba: api.thingspeak.com / n"); client.print ("Ryšys: uždaryti / n"); client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); client.print ("Turinio tipas: application/x-www-form-urlencoded / n"); client.print ("Turinio ilgis:"); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); } // uždelsimas (30000); }

7 žingsnis: jutiklio mazgo kodas

#įtraukti

#include // „LoRa“bibliotekos #include "DHT.h" #define DHTPIN 4 // pin, kur dht11 prijungtas DHT dht (DHTPIN, DHT11); // apibrėžti „LoRa“siųstuvo -imtuvo modulio naudojamus kaiščius #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 // 433E6 Azijai, 866E6 Europai, 915E6 Šiaurės Amerikai // paketų skaitiklis int readingID = 0; int skaitiklis = 0; Styga LoRaMessage = ""; plūdės temperatūra = 0; plūdės drėgmė = 0; // Inicijuoti LoRa modulį void startLoRA () {LoRa.setPins (ss, rst, dio0); // nustatyti LoRa siųstuvo -imtuvo modulį while (! LoRa.begin (BAND) && counter <10) {Serial.print ("."); skaitiklis ++; vėlavimas (500); } if (skaitiklis == 10) {// Padidinkite skaitymo ID kiekvieną naują skaitymo ID ++; Serial.println ("Nepavyko paleisti LoRa!"); } Serial.println ("LoRa inicijavimas gerai!"); vėlavimas (2000 m.); } void startDHT () {if (isnan (drėgmė) || isnan (temperatūra)) {Serial.println ("Nepavyko nuskaityti iš DHT jutiklio!"); grįžti; }} void getReadings () {drėgmė = dht.readHumidity (); temperatūra = dht.readTemperature (); Serijinis atspaudas (F („Drėgmė:“)); Serijinis atspaudas (drėgmė); Serijinis atspaudas (F ("% temperatūra:")); Serijinis atspaudas (temperatūra); Serial.println (F ("° C")); } void sendReadings () {LoRaMessage = Styga (skaitymo ID) + "/" + Eilutė (temperatūra) + "&" + Eilutė (drėgmė); // Siųsti LoRa paketą imtuvui LoRa.beginPacket (); „LoRa.print“(„LoRaMessage“); LoRa.endPacket (); Serial.print ("Siuntimo paketas:"); Serial.println (readingID); skaitymo ID ++; Serial.println („LoRaMessage“); } void setup () {// inicijuoti Serial Monitor Serial.begin (115200); dht.begin (); startDHT (); startLoRA (); } void loop () {getReadings (); sendReadings (); vėlavimas (500); }

8 veiksmas: stebėkite „Thingspeak“serverio duomenis

Stebėkite „Thingspeak“serverio duomenis
Stebėkite „Thingspeak“serverio duomenis
Stebėkite „Thingspeak“serverio duomenis
Stebėkite „Thingspeak“serverio duomenis

Įkėlę kodą, serijinį monitorių galite atidaryti tiek šliuzo, tiek jutiklio mazgo grandinėje. Siųsite ir gausite duomenis, jei kodas teisingas. Dabar galite apsilankyti „Thingspeak Private View“. Ten po 15 sekundžių įkeliami paketų skaičiaus, temperatūros, drėgmės ir vartų duomenys.

9 žingsnis: nuorodos

1.

2.