ESP32 Lora Thingspeak Gateway z węzłem czujnika: 9 kroków
ESP32 Lora Thingspeak Gateway z węzłem czujnika: 9 kroków

Wideo: ESP32 Lora Thingspeak Gateway z węzłem czujnika: 9 kroków

Wideo: ESP32 Lora Thingspeak Gateway z węzłem czujnika: 9 kroków
Wideo: ESP32 LoRaWAN Gateway tutorial with Sensor Node 2025, Styczeń
Anonim
ESP32 Lora Thingspeak Gateway z węzłem czujnika
ESP32 Lora Thingspeak Gateway z węzłem czujnika

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

Bramka ESP32 LoRa Thingspeak
Bramka ESP32 LoRa Thingspeak
Bramka ESP32 LoRa Thingspeak
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

Węzeł czujnika ESP32 LoRa
Węzeł czujnika ESP32 LoRa
Węzeł czujnika ESP32 LoRa
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

Konfiguracja Thingspeak
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

Monitoruj dane na serwerze Thingspeak
Monitoruj dane na serwerze Thingspeak
Monitoruj dane na serwerze Thingspeak
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.