
Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-23 15:02

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.
Zalecana:
Uniwersalny pilot sterowany gestami z węzłem MCU: 12 kroków

Uniwersalny pilot sterowany gestami z Node-MCU: Witam wszystkich i witamy w tym projekcie! Jestem dość leniwą osobą, a koszmarem leniwej osoby jest oglądanie telewizji, gdy zdajesz sobie sprawę, że pilot jest za daleko! Zdałem sobie sprawę, że mój pilot nigdy nie będzie za daleko, jeśli będę miał go zawsze pod ręką
Wilgotność gleby z węzłem: 7 kroków

Nawilżacz gleby z węzłem: W tym podręczniku pokażę, jak wykonać czujnik gleby domowej roboty dla systemu Gardenhealth. Pokażę Ci czego potrzebujesz, podam kilka przykładów kodu i jak zaimplementować kod. Na końcu instrukcji będziesz wiedział jak zmienić pasek led
UCL-IIOT - system alarmowy z bazą danych i czerwonym węzłem: 7 kroków

UCL-IIOT - System alarmowy z bazą danych i Node-red: Celem tej kompilacji jest nauczenie łączenia Arduino z Node-red i bazą danych, dzięki czemu można logować dane, a także zbierać je do późniejszego wykorzystania. prosty system alarmowy arduino, który wyprowadza 5 numerów danych, każdy oddzielony
Bezprzewodowy czujnik temperatury i wilgotności IOT dalekiego zasięgu z czerwonym węzłem: 27 kroków

Bezprzewodowy czujnik temperatury i wilgotności IOT dalekiego zasięgu z Node-Red: Przedstawiamy bezprzewodowy czujnik temperatury i wilgotności dalekiego zasięgu NCD, który może pochwalić się zasięgiem do 28 mil przy użyciu bezprzewodowej architektury sieci kratowej. Wyposażony w czujnik temperatury i wilgotności Honeywell HIH9130 przekazuje bardzo dokładną temperaturę i
Kto jest w Moich Drzwiach? Projekt czujnika ruchu PIR/czujnika zasięgu: 5 kroków

Kto jest w Moich Drzwiach? Projekt czujnika ruchu PIR/czujnika zasięgu: Nasz projekt ma na celu wykrywanie ruchu za pomocą czujników PIR i czujników odległości. Kod Arduino wyśle sygnał wizualny i dźwiękowy, aby poinformować użytkownika, że ktoś jest w pobliżu. Kod MATLAB wyśle sygnał e-mail, aby powiadomić użytkownika, że ktoś jest w pobliżu.To urządzenie