สารบัญ:

ESP32 Lora Thingspeak Gateway พร้อมโหนดเซ็นเซอร์: 9 ขั้นตอน
ESP32 Lora Thingspeak Gateway พร้อมโหนดเซ็นเซอร์: 9 ขั้นตอน

วีดีโอ: ESP32 Lora Thingspeak Gateway พร้อมโหนดเซ็นเซอร์: 9 ขั้นตอน

วีดีโอ: ESP32 Lora Thingspeak Gateway พร้อมโหนดเซ็นเซอร์: 9 ขั้นตอน
วีดีโอ: EP.2 ใช้ LoRa PtP สื่อสารข้อมูลทางไกลผ่านเครือข่าย NB-IoT 2024, พฤศจิกายน
Anonim
ESP32 Lora Thingspeak Gateway พร้อมโหนดเซ็นเซอร์
ESP32 Lora Thingspeak Gateway พร้อมโหนดเซ็นเซอร์

ในโครงการ IoT นี้ ฉันออกแบบ ESP32 LoRa Gateway และ ESP32 LoRa Sensor Node เพื่อตรวจสอบการอ่านเซ็นเซอร์แบบไร้สายจากระยะทางไม่กี่กิโลเมตร ผู้ส่งจะอ่านข้อมูลความชื้นและอุณหภูมิโดยใช้เซ็นเซอร์ DHT11 จากนั้นจะส่งข้อมูลผ่าน LoRa Radio ข้อมูลจะได้รับโดยโมดูลตัวรับ ผู้รับจะส่งข้อมูลไปยังเซิร์ฟเวอร์ Thingspeak หลังจากช่วงเวลาหนึ่ง

ขั้นตอนที่ 1: ส่วนประกอบที่จำเป็น

1. บอร์ด ESP32 - 2

2. โมดูล Lora SX1278/SX1276

3. DHT11 เซ็นเซอร์อุณหภูมิความชื้น

4. เขียงหั่นขนม

5. การต่อสายจัมเปอร์

ขั้นตอนที่ 2: การติดตั้งไลบรารีที่จำเป็น

เราต้องติดตั้งไลบรารี่ต่าง ๆ ก่อน:

1. ห้องสมุด DHT11

2. ห้องสมุด LoRa

ขั้นตอนที่ 3: ESP32 LoRa Thingspeak Gateway

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

ทีนี้มาดูวงจรผู้ส่งและตัวรับสำหรับการสร้าง ESP32 LoRa Gateway & Sensor Node ฉันประกอบวงจรทั้งสองบนเขียงหั่นขนม คุณสามารถทำบน PCB ได้หากต้องการ

นี่คือวงจรเกตเวย์ ESP32 LoRa Module SX1278 ส่วนนี้ทำงานเป็นผู้รับ รับข้อมูลความชื้นและอุณหภูมิโดยใช้ LoRa Radio และอัปโหลดไปยัง Thingspeak Server

ขั้นตอนที่ 4: ESP32 LoRa Sensor Node

โหนดเซ็นเซอร์ LoRa ESP32
โหนดเซ็นเซอร์ LoRa ESP32
โหนดเซ็นเซอร์ LoRa ESP32
โหนดเซ็นเซอร์ LoRa ESP32

นี่คือวงจรโหนด ESP32 LoRa Sensor พร้อมเซ็นเซอร์ DHT11 ส่วนนี้ทำงานเป็นเครื่องส่ง ข้อมูลความชื้นและอุณหภูมิอ่านโดย DHT11 Humidity Temperature Sensor และส่งโดยใช้วิทยุ LoRa

ขั้นตอนที่ 5: การตั้งค่า Thingspeak

การตั้งค่า Thingspeak
การตั้งค่า Thingspeak

ในการตรวจสอบข้อมูลเซ็นเซอร์บนเซิร์ฟเวอร์ Thingspeak คุณต้องตั้งค่า Thingspeak ก่อน หากต้องการตั้งค่าเซิร์ฟเวอร์ Thingspeak ให้ไปที่ https://thingspeak.com/ สร้างบัญชีหรือลงชื่อเข้าใช้หากคุณสร้างบัญชีก่อนหน้านี้ จากนั้นสร้างช่องใหม่โดยมีรายละเอียดดังต่อไปนี้

ขั้นตอนที่ 6: รหัสเกตเวย์

#รวม

//ไลบรารีสำหรับ LoRa #include #include //กำหนดพินที่ใช้โดยโมดูลตัวรับส่งสัญญาณ LoRa #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 //433E6 สำหรับเอเชีย 866E6 สำหรับยุโรป 915E6 สำหรับอเมริกาเหนือ // แทนที่ด้วยข้อมูลรับรองเครือข่ายของคุณ String apiKey = "14K8UL2QEK8BTHN6"; // ป้อนคีย์ API เขียนจาก ThingSpeak const char *ssid = "Wifi SSID"; // แทนที่ด้วย wifi ssid และ wpa2 key const char *password = "Password"; เซิร์ฟเวอร์ const char* = "api.thingspeak.com"; ไคลเอนต์ WiFiClient; // เริ่มต้นตัวแปรเพื่อรับและบันทึกข้อมูล LoRa int rssi; สตริง loRaMessage; อุณหภูมิสตริง; ความชื้นสัมพัทธ์; รหัสการอ่านสตริง; // แทนที่ตัวยึดตำแหน่งด้วยค่า DHT ตัวประมวลผลสตริง (const String & var) { //Serial.println (var); if(var == "TEMPERATURE") { อุณหภูมิกลับ; } else if(var == "HUMIDITY") { คืนความชื้น; } else if (var == "RRSI") { return String (rssi); } return String(); } การตั้งค่าเป็นโมฆะ () { Serial.begin (115200); เคาน์เตอร์ int; //ตั้งค่าโมดูลตัวรับส่งสัญญาณ LoRa LoRa.setPins (ss, rst, dio0); // ตั้งค่าโมดูลตัวรับส่งสัญญาณ LoRa ในขณะที่ (!LoRa.begin (BAND) && ตัวนับ < 10) { Serial.print ("."); เคาน์เตอร์++; ล่าช้า (2000); } if (ตัวนับ == 10) {// เพิ่มการอ่านID ทุกครั้งที่อ่าน Serial.println ("การเริ่มต้น LoRa ล้มเหลว!"); } Serial.println ("การเริ่มต้น LoRa ตกลง!"); ล่าช้า (2000); // เชื่อมต่อกับเครือข่าย Wi-Fi ด้วย SSID และรหัสผ่าน Serial.print("กำลังเชื่อมต่อกับ "); Serial.println(ssid); WiFi.begin(ssid, รหัสผ่าน); ในขณะที่ (WiFi.status () != WL_CONNECTED) { ล่าช้า (2000); Serial.print("."); } // พิมพ์ที่อยู่ IP ในเครื่องและเริ่มต้นเว็บเซิร์ฟเวอร์ Serial.println(""); Serial.println("เชื่อมต่อ WiFi"); Serial.println("ที่อยู่ IP:"); Serial.println(WiFi.localIP()); } // อ่านแพ็กเก็ต LoRa และรับการอ่านค่าเซ็นเซอร์ void loop () { int packetSize = LoRa.parsePacket (); if (packetSize) { Serial.print ("ได้รับแพ็กเก็ต Lora: "); ในขณะที่ (LoRa.available ()) // อ่านแพ็กเก็ต { สตริง LoRaData = LoRa.readString (); Serial.print (LoRaData); int pos1 = LoRaData.indexOf('/'); int pos2 = LoRaData.indexOf('&'); ReadingID = LoRaData.substring(0, pos1); // รับอุณหภูมิ readID = LoRaData.substring (pos1 +1, pos2); // รับความชื้นอุณหภูมิ = LoRaData.substring(pos2+1, LoRaData.length()); // รับความชื้น } rssi = LoRa.packetRssi(); // รับ RSSI Serial.print(" กับ RSSI "); Serial.println(rssi); } if (client.connect (server, 80)) // "184.106.153.149" หรือ api.thingspeak.com { String postStr = apiKey; postStr += "&field1="; postStr += สตริง (รหัสการอ่าน); postStr += "&field2="; postStr += สตริง (อุณหภูมิ); postStr += "&field3="; postStr += สตริง (ความชื้น); postStr += "&field4="; postStr += สตริง (rssi); postStr += "\r\n\r\n\r\n\r\n"; client.print("POST /update HTTP/1.1\n"); client.print("โฮสต์: api.thingspeak.com\n"); client.print("การเชื่อมต่อ: ปิด\n"); client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n"); client.print("Content-Type: application/x-www-form-urlencoded\n"); client.print("เนื้อหา-ความยาว: "); client.print(postStr.length()); client.print("\n\n"); client.print(postStr); } // ล่าช้า (30000); }

ขั้นตอนที่ 7: รหัสโหนดเซ็นเซอร์

#รวม

#include //ไลบรารีสำหรับ LoRa #include "DHT.h" #define DHTPIN 4 // ปักหมุดที่ dht11 เชื่อมต่อ DHT dht(DHTPIN, DHT11); //กำหนดพินที่ใช้โดยโมดูลตัวรับส่งสัญญาณ LoRa #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 //433E6 สำหรับเอเชีย 866E6 สำหรับยุโรป 915E6 สำหรับอเมริกาเหนือ //packet counter int readingID = 0; ตัวนับ int = 0; สตริง LoRaMessage = ""; อุณหภูมิลอยตัว = 0; ความชื้นลอย = 0; // เริ่มต้นโมดูล LoRa เป็นโมฆะ startLoRA () { LoRa.setPins (ss, rst, dio0); // ตั้งค่าโมดูลตัวรับส่งสัญญาณ LoRa ในขณะที่ (!LoRa.begin (BAND) && ตัวนับ < 10) { Serial.print ("."); เคาน์เตอร์++; ล่าช้า (500); } if (ตัวนับ == 10) {// เพิ่ม readID ทุกครั้งที่อ่าน readID ++; Serial.println("การเริ่มต้น LoRa ล้มเหลว!"); } Serial.println ("การเริ่มต้น LoRa ตกลง!"); ล่าช้า (2000); } เป็นโมฆะ startDHT () { if (isnan (ความชื้น) || isnan (อุณหภูมิ)) { Serial.println ("ไม่สามารถอ่านจากเซ็นเซอร์ DHT!"); กลับ; } } เป็นโมฆะ getReadings(){ ความชื้น = dht.readHumidity(); อุณหภูมิ = dht.readTemperature(); Serial.print(F("ความชื้น: ")); Serial.print(ความชื้น); Serial.print(F("% อุณหภูมิ: ")); Serial.print(อุณหภูมิ); Serial.println(F("°C ")); } เป็นโมฆะ sendReadings () { LoRaMessage = String (readingID) + "/" + String (อุณหภูมิ) + "&" + String (ความชื้น); //ส่งแพ็กเก็ต LoRa ไปยังเครื่องรับ LoRa.beginPacket(); LoRa.print (LoRaMessage); LoRa.endPacket(); Serial.print("กำลังส่งแพ็กเก็ต: "); Serial.println (รหัสการอ่าน); อ่านID++; Serial.println (LoRaMessage); } การตั้งค่าเป็นโมฆะ () { // เริ่มต้น Serial Monitor Serial.begin (115200); dht.begin(); startDHT(); startLoRA(); } วงเป็นโมฆะ () { getReadings (); sendReadings(); ล่าช้า (500); }

ขั้นตอนที่ 8: ตรวจสอบข้อมูลบนเซิร์ฟเวอร์ Thingspeak

ตรวจสอบข้อมูลบนเซิร์ฟเวอร์ Thingspeak
ตรวจสอบข้อมูลบนเซิร์ฟเวอร์ Thingspeak
ตรวจสอบข้อมูลบนเซิร์ฟเวอร์ Thingspeak
ตรวจสอบข้อมูลบนเซิร์ฟเวอร์ Thingspeak

เมื่ออัปโหลดโค้ดแล้ว คุณสามารถเปิด Serial Monitor ได้ทั้งบน Gateway & Sensor Node Circuit คุณจะส่งข้อมูลและรับหากรหัสถูกต้อง ตอนนี้คุณสามารถเยี่ยมชม Thingspeak Private View ได้แล้ว คุณจะเห็นข้อมูลสำหรับ Packet Number, Temperature, Humidity & Gateway อัพโหลดหลังจากช่วงเวลา 15 วินาที

ขั้นตอนที่ 9: การอ้างอิง

1.

2.

แนะนำ: