Cuprins:

ESP32 Lora Thingspeak Gateway cu nod senzor: 9 pași
ESP32 Lora Thingspeak Gateway cu nod senzor: 9 pași

Video: ESP32 Lora Thingspeak Gateway cu nod senzor: 9 pași

Video: ESP32 Lora Thingspeak Gateway cu nod senzor: 9 pași
Video: Introduction to Heltec LoRa CubeCell Development Board HTCC-AB01 2024, Iulie
Anonim
ESP32 Lora Thingspeak Gateway cu nod senzor
ESP32 Lora Thingspeak Gateway cu nod senzor

în acest proiect IoT, am proiectat ESP32 LoRa Gateway și, de asemenea, ESP32 LoRa Sensor Node pentru a monitoriza citirea senzorului fără fir de la distanțe de câțiva kilometri. Expeditorul va citi datele privind umiditatea și temperatura folosind senzorul DHT11. Apoi transmite datele prin LoRa Radio. Datele sunt primite de modulul receptor. Receptorul va trimite apoi datele către Thingspeak Server după un anumit interval.

Pasul 1: Componente necesare

1. Placa ESP32 - 2

2. Modulul Lora SX1278 / SX1276

3. Senzor de temperatură a umidității DHT11

4. Pană de pâine

5. Conectarea firelor jumper

Pasul 2: Instalarea bibliotecilor necesare

Mai întâi trebuie să instalăm diferite biblioteci:

1. Biblioteca DHT11

2. Biblioteca LoRa

Pasul 3: ESP32 LoRa Thingspeak Gateway

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

Acum, să vedem circuitul expeditorului și receptorului pentru construirea ESP32 LoRa Gateway & Nod senzor. Am asamblat ambele circuite pe o placă de calcul. O puteți face pe PCB dacă doriți.

Iată un circuit de gateway ESP32 LoRa Module SX1278. Această parte funcționează ca un receptor. Datele privind umiditatea și temperatura sunt primite folosind LoRa Radio și încărcate pe Thingspeak Server.

Pasul 4: nod senzor ESP32 LoRa

Nod senzor ESP32 LoRa
Nod senzor ESP32 LoRa
Nod senzor ESP32 LoRa
Nod senzor ESP32 LoRa

Iată un circuit nod nod ESP32 LoRa cu senzor DHT11. Această parte funcționează ca un emițător. Datele privind umiditatea și temperatura sunt citite de senzorul de temperatură al umidității DHT11 și transmise cu ajutorul LoRa Radio.

Pasul 5: Configurarea Thingspeak

Configurarea Thingspeak
Configurarea Thingspeak

Pentru a monitoriza datele senzorului pe serverul Thingspeak, trebuie mai întâi să configurați Thingspeak. Pentru a configura Serverul Thingspeak, vizitați https://thingspeak.com/. Creați un cont sau pur și simplu conectați-vă dacă ați creat contul mai devreme. Apoi creați un nou canal cu următoarele detalii.

Pasul 6: Cod gateway

#include

// Biblioteci pentru LoRa #include #include // definește pinii folosiți de modulul de emisie-recepție LoRa #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 // 433E6 pentru Asia, 866E6 pentru Europa, 915E6 pentru America de Nord // Înlocuiți cu acreditările de rețea String apiKey = "14K8UL2QEK8BTHN6"; // Introduceți cheia API de scriere din ThingSpeak const char * ssid = "SSID Wifi"; // înlocuiți cu ssid-ul wifi și cheia wpa2 const char * parolă = "Parolă"; const char * server = "api.thingspeak.com"; Client WiFiClient; // Inițializați variabile pentru a obține și salva date LoRa în rssi; String loRaMessage; Temperatura corzii; Umiditatea șirului; ID de citire a șirurilor; // Înlocuiește substituentul cu valorile DHT Procesor șir (const String & var) {//Serial.println(var); if (var == "TEMPERATURA") {temperatura de retur; } else if (var == "UMIDITATE") {returnează umiditatea; } else if (var == "RRSI") {return String (rssi); } return String (); } void setup () {Serial.begin (115200); contor int; // configurați modulul LoRa transceiver LoRa.setPins (ss, rst, dio0); // configurați modulul transmițător LoRa while (! LoRa.begin (BAND) && counter <10) {Serial.print ("."); contor ++; întârziere (2000); } if (contor == 10) {// Creșteți ID-ul de citire la fiecare nouă lectură Serial.println ("Pornirea LoRa a eșuat!"); } Serial.println ("LoRa Initialization OK!"); întârziere (2000); // Conectați-vă la rețeaua Wi-Fi cu SSID și parolă Serial.print („Conectarea la”); Serial.println (ssid); WiFi.begin (ssid, parolă); while (WiFi.status ()! = WL_CONNECTED) {întârziere (2000); Serial.print ("."); } // Imprimați adresa IP locală și porniți serverul web Serial.println (""); Serial.println ("WiFi conectat."); Serial.println ("adresa IP:"); Serial.println (WiFi.localIP ()); } // Citiți pachetul LoRa și obțineți citirile senzorului bucla nulă () {int pachet Dimensiune = LoRa.parsePacket (); if (packetSize) {Serial.print ("Lora a primit pachetul:"); while (LoRa.available ()) // Citeste pachetul {String LoRaData = LoRa.readString (); Serial.print (LoRaData); int pos1 = LoRaData.indexOf ('/'); int pos2 = LoRaData.indexOf ('&'); readingID = LoRaData.substring (0, pos1); // Obțineți temperatura ID-ului de citire = LoRaData.substring (pos1 +1, pos2); // Obțineți umiditatea temperaturii = LoRaData.substring (pos2 + 1, LoRaData.length ()); // Ia umiditate} rssi = LoRa.packetRssi (); // Obțineți RSSI Serial.print („cu RSSI”); Serial.println (rssi); } if (client.connect (server, 80)) // "184.106.153.149" sau api.thingspeak.com {String postStr = apiKey; postStr + = "& field1 ="; postStr + = String (readingID); postStr + = "& field2 ="; postStr + = String (temperature); postStr + = "& field3 ="; postStr + = String (umiditate); postStr + = "& field4 ="; postStr + = String (rssi); postStr + = "\ r / n / r / n / r / n / r / n"; client.print ("POST / actualizare HTTP / 1.1 / n"); client.print ("Gazdă: api.thingspeak.com / n"); client.print ("Conexiune: închidere / n"); client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); client.print ("Content-Type: application / x-www-form-urlencoded / n"); client.print („Lungime conținut:”); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); } // întârziere (30000); }

Pasul 7: Codul nodului senzorului

#include

#include // Biblioteci pentru LoRa #include "DHT.h" #define DHTPIN 4 // pin unde este conectat dht11 DHT dht (DHTPIN, DHT11); // definiți pinii utilizați de modulul de emisie-recepție LoRa #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 // 433E6 pentru Asia, 866E6 pentru Europa, 915E6 pentru America de Nord // contor de pachete int readingID = 0; contor int = 0; String LoRaMessage = ""; temperatura plutitorului = 0; umiditatea plutitoare = 0; // Inițializați modulul LoRa void startLoRA () {LoRa.setPins (ss, rst, dio0); // configurați modulul transmițător LoRa while (! LoRa.begin (BAND) && counter <10) {Serial.print ("."); contor ++; întârziere (500); } if (contor == 10) {// Creșteți ID-ul de citire la fiecare nouă lectură ID-ul de citire ++; Serial.println ("Pornirea LoRa a eșuat!"); } Serial.println ("LoRa Initialization OK!"); întârziere (2000); } void startDHT () {if (isnan (umiditate) || isnan (temperatura)) {Serial.println ("Nu s-a citit de la senzorul DHT!"); întoarcere; }} void getReadings () {umiditate = dht.readHumidity (); temperature = dht.readTemperature (); Serial.print (F ("Umiditate:")); Serial.print (umiditate); Serial.print (F ("% Temperatura:")); Serial.print (temperatura); Serial.println (F ("° C")); } void sendReadings () {LoRaMessage = String (readingID) + "/" + String (temperature) + "&" + String (umiditate); // Trimiteți pachetul LoRa către receptor LoRa.beginPacket (); LoRa.print (LoRaMessage); LoRa.endPacket (); Serial.print ("Trimiterea pachetului:"); Serial.println (readingID); readingID ++; Serial.println (LoRaMessage); } void setup () {// inițializează Serial Monitor Serial.begin (115200); dht.begin (); startDHT (); startLoRA (); } void loop () {getReadings (); sendReadings (); întârziere (500); }

Pasul 8: monitorizați datele pe serverul Thingspeak

Monitorizați datele pe serverul Thingspeak
Monitorizați datele pe serverul Thingspeak
Monitorizați datele pe serverul Thingspeak
Monitorizați datele pe serverul Thingspeak

Odată ce codul este încărcat, puteți deschide Serial Monitor atât pe Gateway cât și pe Circuitul nodului senzorului. Veți trimite și primi date dacă codul este corect. Acum puteți vizita Thingspeak Private View. Acolo puteți vedea datele pentru numărul pachetului, temperatura, umiditatea și gateway-ul sunt încărcate după un interval de 15 secunde.

Pasul 9: Referințe

1.

2.

Recomandat: