Spisu treści:
Wideo: ESP32 Lora Thingspeak Gateway z węzłem czujnika: 9 kroków
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
w tym projekcie IoT zaprojektowałem ESP32 LoRa Gateway, a także ESP32 LoRa Sensor Node do bezprzewodowego monitorowania odczytu czujnika z odległości kilku kilometrów. Nadajnik odczyta dane wilgotności i temperatury za pomocą czujnika DHT11. Następnie przesyła dane za pośrednictwem LoRa Radio. Dane są odbierane przez moduł odbiorczy. Odbiorca po pewnym czasie wyśle dane do serwera Thingspeak.
Krok 1: Wymagane komponenty
1. Płyta ESP32 - 2
2. Moduł Lora SX1278/SX1276
3. Czujnik temperatury wilgotności DHT11
4. Deska do krojenia chleba
5. Podłączanie przewodów połączeniowych
Krok 2: Instalowanie wymaganych bibliotek
Najpierw musimy zainstalować różne biblioteki:
1. Biblioteka DHT11
2. Biblioteka LoRa
Krok 3: Bramka ESP32 LoRa Thingspeak
Zobaczmy teraz obwód nadawczo-odbiorczy do budowy bramy ESP32 LoRa i węzła czujnika. Zmontowałem oba układy na płytce stykowej. Możesz zrobić to na PCB, jeśli chcesz.
Oto obwód bramki modułu ESP32 LoRa SX1278. Ta część działa jako odbiornik. Dane dotyczące wilgotności i temperatury są odbierane za pomocą radia LoRa i przesyłane do serwera Thingspeak.
Krok 4: Węzeł czujnika ESP32 LoRa
Oto obwód węzła czujnika ESP32 LoRa z czujnikiem DHT11. Ta część działa jako nadajnik. Dane dotyczące wilgotności i temperatury są odczytywane przez czujnik temperatury wilgotności DHT11 i przesyłane za pomocą radia LoRa.
Krok 5: Konfiguracja Thingspeak
Aby monitorować dane z czujników na serwerze Thingspeak, musisz najpierw skonfigurować Thingspeak. Aby skonfigurować serwer Thingspeak, odwiedź https://thingspeak.com/. Utwórz konto lub po prostu zaloguj się, jeśli utworzyłeś konto wcześniej. Następnie utwórz nowy kanał z następującymi szczegółami.
Krok 6: Kod bramy
#włączać
//Biblioteki dla LoRa #include #include //zdefiniuj piny używane przez moduł nadawczo-odbiorczy LoRa #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 //433E6 dla Azji, 866E6 dla Europy, 915E6 dla Ameryki Północnej // Zastąp poświadczeniami sieciowymi String apiKey = "14K8UL2QEK8BTNN6"; // Wpisz swój klucz Write API z ThingSpeak const char *ssid = "Wifi SSID"; // zastąp swoim identyfikatorem wifi i kluczem wpa2 const char *password = "Hasło"; const char* server = "api.thingspeak.com"; Klient WiFiClient; // Zainicjuj zmienne, aby pobrać i zapisać dane LoRa int rssi; ciąg loRaMessage; Temperatura struny; Wilgotność sznurka; Identyfikator odczytu ciągu; // Zastępuje symbol zastępczy wartościami DHT String processor(const String& var){ //Serial.println(var); if(var == "TEMPERATURA") { temperatura powrotu; } else if(var == "WILGOTNOŚĆ") { zwróć wilgotność; } else if (var == "RRSI") { return String(rssi); } return String(); } void setup() { Serial.begin(115200); licznik wewnętrzny; //ustaw moduł nadawczo-odbiorczy LoRa LoRa.setPins(ss, rst, dio0); //ustaw moduł nadawczo-odbiorczy LoRa while (!LoRa.begin(BAND) && counter < 10) { Serial.print("."); licznik++; opóźnienie (2000); } if (counter == 10) { // Zwiększaj readID przy każdym nowym odczycie Serial.println("Uruchomienie LoRa nie powiodło się!"); } Serial.println("Inicjalizacja LoRa OK!"); opóźnienie (2000); // Połącz się z siecią Wi-Fi za pomocą SSID i hasła Serial.print("Łączenie z "); Serial.println(ssid); WiFi.begin(SSid, hasło); while (WiFi.status() != WL_CONNECTED) { delay(2000); Serial.print("."); } // Wydrukuj lokalny adres IP i uruchom serwer WWW Serial.println(""); Serial.println("Połączenie WiFi."); Serial.println("adres IP: "); Serial.println(WiFi.localIP()); } // Odczytaj pakiet LoRa i uzyskaj odczyty czujnika void loop() { int packetSize = LoRa.parsePacket(); if (packetSize) { Serial.print("Odebrano pakiet Lora: "); while (LoRa.available()) // Odczytaj pakiet { String LoRaData = LoRa.readString(); Serial.print(LoRaData); int poz1 = LoRaData.indexOf('/'); int poz2 = LoRaData.indexOf('&'); readID = LoRaData.substring(0, poz1); // Pobierz odczyt ID temperatury = LoRaData.substring(poz1 +1, poz2); // Pobranie wilgotności temperatury = LoRaData.substring(pos2+1, LoRaData.length()); // Pobierz wilgotność } rssi = LoRa.packetRssi(); // Pobierz RSSI Serial.print(" z RSSI "); Serial.println(rssi); } if (client.connect(server, 80)) // "184.106.153.149" lub api.thingspeak.com { String postStr = apiKey; postStr += "&field1="; postStr += String(ID odczytu); postStr += "&field2="; postStr += String(temperatura); postStr += "&field3="; postStr += String(wilgotność); postStr += "&field4="; postStr += Ciąg(rssi); postStr += "\r\n\r\n\r\n\r\n"; client.print("POST /aktualizacja HTTP/1.1\n"); client.print("Host: api.thingspeak.com\n"); client.print("Połączenie: zamknij\n"); client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n"); client.print("Typ treści: application/x-www-form-urlencoded\n"); client.print("Długość-treści: "); klient.print(postStr.length()); klient.print("\n\n"); klient.print(postStr); } //opóźnienie(30000); }
Krok 7: Kod węzła czujnika
#włączać
#include //Biblioteki dla LoRa #include "DHT.h" #define DHTPIN 4 //pin gdzie dht11 jest podłączony DHT dht(DHTPIN, DHT11); //zdefiniuj piny używane przez moduł nadawczo-odbiorczy LoRa #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 //433E6 dla Azji, 866E6 dla Europy, 915E6 dla Ameryki Północnej //licznik pakietów int readID = 0; int licznik = 0; String LoRaMessage = ""; temperatura pływaka = 0; wilgotność pływaka = 0; //Zainicjuj moduł LoRa void startLoRA() { LoRa.setPins(ss, rst, dio0); //ustaw moduł nadawczo-odbiorczy LoRa while (!LoRa.begin(BAND) && counter < 10) { Serial.print("."); licznik++; opóźnienie (500); } if (counter == 10) { // Przyrost readID przy każdym nowym odczycie readID++; Serial.println("Uruchomienie LoRa nie powiodło się!"); } Serial.println("Inicjalizacja LoRa OK!"); opóźnienie (2000); } void startDHT() { if (isnan(wilgotność) || isnan(temperatura)) { Serial.println("Nie udało się odczytać z czujnika DHT!"); powrót; } } void getReadings(){ wilgotność = dht.readHumidity(); temperatura = dht.odczytajTemperatura(); Serial.print(F("Wilgotność: ")); Serial.print(wilgotność); Serial.print(F("% Temperatura: ")); druk.seryjny(temperatura); Serial.println(F("°C")); } void sendReadings() { LoRaMessage = String(odczytID) + "/" + String(temperatura) + "&" + String(wilgotność); //Wyślij pakiet LoRa do odbiorcy LoRa.beginPacket(); LoRa.print(LoRaMessage); LoRa.endPacket(); Serial.print("Wysyłanie pakietu: "); Serial.println(identyfikator odczytu); czytanieID++; Serial.println(LoRaMessage); } void setup() { //inicjowanie Serial Monitor Serial.begin(115200); dht.początek(); startDHT(); startLoRA(); } void loop() { getReadings(); sendReadings(); opóźnienie (500); }
Krok 8: Monitoruj dane na serwerze Thingspeak
Po przesłaniu kodu można otworzyć Monitor szeregowy w obwodzie bramki i węzła czujnika. Dane zostaną wysłane i odebrane, jeśli kod jest poprawny. Teraz możesz odwiedzić prywatny widok Thingspeak. Tam możesz zobaczyć dane dotyczące numeru pakietu, temperatury, wilgotności i bramy, które są przesyłane po upływie 15 sekund.
Krok 9: Referencje
1.
2.