ที่เก็บนี้ให้ทุกสิ่งที่คุณต้องการในการสร้างได้อย่างง่ายดาย (เป็นโครงการ DIY!) เกตเวย์ Lora-to-MQTT คุณภาพดีตามโมดูล Ebyte Lora และ ESP32 และทำงานกับ Wi-Fi หรือ Ethernet มีสองเวอร์ชันที่แตกต่างกันของเกตเวย์รายละเอียดเกี่ยวกับเวอร์ชันเหล่านั้นและที่คุณควรเลือกด้านล่าง:
สำหรับการให้ความสามารถในการใช้อีเธอร์เน็ตของคณะกรรมการฉันใช้หมวก ESP32 Ethernet Quinled แน่นอนว่ามันเป็นเรื่องธรรมดาที่ฉัน ควร ใช้ ESP32 Quinled แต่ฉันมี devboards esp32 มาตรฐานบางอย่างที่วางอยู่โดยไม่มีประโยชน์ดังนั้นฉันจึงออกแบบบอร์ดรอบ ๆ แต่ที่กล่าวว่าวันหนึ่งฉันอาจออกแบบเวอร์ชันหนึ่งในวันที่ขึ้นอยู่กับ quinled-esp32
ในการสลับระหว่าง Wi-Fi และ Ethernet ได้อย่างง่ายดายมีจัมเปอร์บนกระดานเพื่อทำเช่นนั้น สิ่งนี้ใช้งานได้กับบอร์ด ไม่จำเป็นต้องตัดกำลัง
อีกครั้งนี่คือโครงการ DIY! ก่อนอื่นคุณต้องมีทักษะการบัดกรีสองสามอย่างและฉันขอแนะนำให้ใช้แผ่นร้อน SMD หรือปืนลมร้อนเพื่อประสานโมดูล Ebyte E32 มัน ยากมาก ที่จะประสานกับเหล็ก!
ดังนั้นคุณต้องการให้ PCBs พิมพ์ที่โรงงานต้นแบบ PCB ที่คุณเลือกเช่น JLCPCB หรือ PCBway ฉันได้รวมไฟล์ gerber สำหรับทั้งสองในโฟลเดอร์ Respement หากคุณต้องการใช้ผู้ให้บริการที่แตกต่างกันคุณต้องตรวจสอบว่าพวกเขาอาจยอมรับ gerbers เหล่านี้หรือสร้างพวกเขาด้วยตัวเอง
ฉัน ขอแนะนำอย่างยิ่ง ให้คุณสั่ง PCB นี้ด้วยลายฉลุมิฉะนั้นคุณจะมีช่วงเวลาที่ยากลำบากในการวางบนแผ่นรองของโมดูล eByte!
แต่ละโฟลเดอร์ PCB มีไฟล์ IBOM HTML ซึ่งให้คำแนะนำ / ภาพรวมการบัดกรีที่ดีให้คุณค้นหาในโฟลเดอร์ ibom ในโฟลเดอร์แต่ละรุ่น เมื่อคุณบัดกรีบอร์ดเพียงแค่เชื่อมต่อกับแหล่งพลังงาน 5V และไปที่นั่น! ใช้งานน้อยกว่า 200mA ดังนั้นคุณสามารถใช้เครื่องชาร์จโทรศัพท์ขนาด 500ma, 1a (หรือสูงกว่า) ได้อย่างง่ายดาย
แหล่งที่มามีอยู่ในโฟลเดอร์ src ดาวน์โหลด Arduino IDE ตรวจสอบไฟล์ config.h และแทนที่ตัวยึดตำแหน่งด้วยการตั้งค่าของคุณรวบรวมและอัปโหลดไปยัง ESP32 ควรเป็นอย่างนั้นและเกตเวย์ควรปรากฏขึ้นในเซิร์ฟเวอร์ MQTT ของคุณและส่งข้อความตรวจสุขภาพทุก 5 วินาที
ตอนนี้คุณสามารถให้เซ็นเซอร์และบอร์ดของคุณมีข้อความ LORA ที่ส่งไปยังมันสามารถพบได้ในส่วน "ซอร์สโค้ด / ซอฟต์แวร์" ด้านล่าง
คุณควรเลือกอันไหน? มันค่อนข้างง่ายและกำหนดโดยปัจจัยหนึ่ง:
คุณต้องเลือกระหว่างสิ่งเหล่านั้นเนื่องจากโมดูล EBYTE ที่ใช้การสื่อสารแบบอนุกรมไม่สามารถสื่อสารกับโมดูล RFM95 ได้แม้ว่าพวกเขาจะใช้ชิป Semtech SX1276 LORA เดียวกัน นั่นเป็นเพราะโมดูลที่ดำเนินการต่อเนื่อง Ebyte ยังมี Onboard Litte MCU ที่ทำ "สิ่ง" / โปรโตคอลของตัวเองเมื่อส่งข้อความผ่าน LORA ดังนั้นคุณไม่ได้พูดคุยโดยตรงกับชิป Semtech แต่ MCU ตัวน้อยแทน เราต้องเข้าใจว่าการทำงานเพื่ออ่านข้อความเหล่านี้ด้วยโมดูล LORA ที่ใช้การสื่อสาร SPI โดยตรงไปยังชิป Semtech (เช่นโมดูล E32 ที่ฉันใช้หรือ RFM95) เพื่อให้พวกเขาทำงานร่วมกัน
รุ่นนี้ใช้ E32-400M20S หรือ E32-900M20S ซึ่งมีการสื่อสารแบบอนุกรมโดยตรงไปยัง Semtech SX1276 ในช่วงเวลาของการวิจัยครั้งล่าสุด (เริ่มต้นของปี 2022) นี่เป็นโมดูล e-byte เดียวที่ใช้งานได้กับ PCB นี้ดังนั้นคุณไม่สามารถใช้อื่น ๆ ที่ใช้การสื่อสารแบบอนุกรม: พวกเขาจะไม่พอดีกับบอร์ด / มี pinout ที่แตกต่างกัน! เลือกอันที่เหมาะสมสำหรับภูมิภาคของคุณ (TL; DR: 400 สำหรับ US/Asia, 900 สำหรับยุโรป)
โมดูล ไม่ได้ อยู่ในไฟล์ BOM CSV คุณต้องถอดมันออกจาก Aliexpress:
หากคุณมักจะทำงานในระบบนิเวศ Ebyte ด้วยโมดูลที่เชื่อมต่อแบบอนุกรมบอร์ดนี้เหมาะสำหรับคุณ อย่างไรก็ตาม ฉันไม่ได้ทำพอร์ตซอฟต์แวร์ที่ใช้ E32 สำหรับบอร์ดนี้ และฉันไม่ได้วางแผนที่จะทำเช่นนั้นเพราะฉันใช้เวอร์ชัน E32 เป็นการส่วนตัว แต่คุณยินดีต้อนรับสู่พอร์ตโดยใช้ห้องสมุด Renzo Mischiantis Arduino
โมดูล ไม่ได้ อยู่ในไฟล์ BOM CSV คุณต้องถอดมันออกจาก Aliexpress:
ซอฟต์แวร์ที่ฉันพัฒนาขึ้นสำหรับสิ่งนี้มีความหมายที่จะขยายได้อย่างง่ายดายโดยไม่ต้องสัมผัสตรรกะจริงของเกตเวย์เอง แต่แทนที่จะเพิ่มรหัสชิ้นเล็ก ๆ ลงในไฟล์แยกต่างหาก
ลองดูที่ lora-ids.h ไฟล์นี้มีไว้เพื่อแบ่งปันระหว่างเกตเวย์นี้และเซ็นเซอร์ทั้งหมดที่คุณพัฒนา มีรายการประเภทข้อความที่แตกต่างกันและคุณสามารถเพิ่มของคุณเองได้อย่างง่ายดาย เช่นมีประเภท "กล่องจดหมาย" ซึ่งกำหนดคุณสมบัติสองสามกล่องจดหมายที่จะส่ง สิ่งนี้ทำให้ง่ายต่อการอ่านและประมวลผลข้อความนี้ และ สร้างหัวข้อในเซิร์ฟเวอร์ MQTT ของคุณซึ่งคุณสามารถฟังได้ นอกจากนี้ยังมีประเภท "กำหนดเอง" ซึ่งโดยทั่วไปมีข้อความฟรีและอาจจะดีสำหรับการดีบัก
อย่าลังเลที่จะเพิ่มประเภทของคุณเองในไฟล์นี้ คุณจะต้องเพิ่มสองสิ่ง:
#define LORA_MESSAGE_ID_CUSTOM 0x0struct LoRaMessageCustom : LoRaBaseหัวเรื่องที่ข้อความตกอยู่ใน ID เกตเวย์รหัสอุปกรณ์และรหัสข้อความ ดังนั้นสำหรับตัวอย่างต่อไปนี้เราถือว่า:
0xA และชื่อ mailbox-sensor ได้ส่งไปแล้วLORA_MESSAGE_ID_MAILBOX และ0x1 และชื่อ lora-gateway-e32 ได้รับ ก่อนอื่นมาใช้ประเภทข้อความ mailbox เป็นตัวอย่าง มันกำหนดคุณสมบัติเหล่านี้:
นอกจากนี้ยังกำหนดชื่อของตัวเอง (และด้วยสิ่งนั้น: ผู้ปกครองสำหรับคุณสมบัติเหล่านี้):
String getMqttTopicName() { return "mailbox"; }ดังนั้นเมื่อใดก็ตามที่เกตเวย์จะได้รับข้อความประเภทนี้มันจะอ่านคุณสมบัติจากมันและวางลงในหัวข้อเหล่านี้:
???/messages/mailbox/duration???/messages/mailbox/distance???/messages/mailbox/humidity???/messages/mailbox/temperature แต่รูปแบบ /messages/ ส่วนมาจากไหนและอะไรคืออะไร ???/ / นั่นเป็นเรื่องง่าย: อุปกรณ์ / เซ็นเซอร์ง่าย ๆ ที่คุณพัฒนาควรลงทะเบียนใน lora-ids.h ที่ด้านบนสุดมีรายการอุปกรณ์แต่ละรายการมี:
เกตเวย์จะเรียงลำดับข้อความทั้งหมดที่ได้รับจากอุปกรณ์และนำหน้าด้วยชื่ออุปกรณ์นั้น รวมถึง เรียงลำดับข้อความทั้งหมดภายใต้หัวข้อ messages เพื่อให้อุปกรณ์มีหัวข้ออื่น ๆ ถัดจากข้อความจริง สิ่งนี้ช่วยให้คุณสามารถฟังฟิลด์/ค่าเฉพาะของประเภทข้อความเฉพาะจากอุปกรณ์เฉพาะ!
ตอนนี้เรารู้เรื่องนี้:
???/mailbox-sensor/messages/mailbox/duration???/mailbox-sensor/messages/mailbox/distance???/mailbox-sensor/messages/mailbox/humidity???/mailbox-sensor/messages/mailbox/temperatureชิ้นส่วนสุดท้ายที่หายไปคือเกตเวย์ที่ได้รับข้อความ นอกจากนี้ยังกำหนดเป็นอุปกรณ์ดังนั้นจึงมีชื่อดังนั้นเราจึงสามารถสร้างชื่อหัวข้อทั้งหมดสำหรับตัวอย่างของเราได้อย่างง่ายดาย:
lora-gateway-e32/devices/mailbox-sensor/messages/mailbox/durationlora-gateway-e32/devices/mailbox-sensor/messages/mailbox/distancelora-gateway-e32/devices/mailbox-sensor/messages/mailbox/humiditylora-gateway-e32/devices/mailbox-sensor/messages/mailbox/temperatureตอนนี้คุณสามารถ:
LORA_DEVICE_IDS ด้วยรหัสและชื่อ ดูฟังก์ชั่น sendLoRaMessage : bool sendLoRaMessage(byte messageID, LoRaBase *loRaMessage, byte recipientId = 0, byte senderId = 0) คาดว่าเราจะให้:
นอกจากนี้เรายังสามารถระบุตัวเลือก:
LORA_GATEWAY_IDLORA_DEVICE_ID หากไม่ได้ระบุ ดังนั้นในรหัสของคุณเพียงสร้างอินสแตนซ์ของรหัสข้อความที่คุณต้องการส่งและส่งผ่านไปยัง sendLoRaMessage :
LoRaMessageMailbox *loRaMessage = new LoRaMessageMailbox;
loRaMessage->duration = duration;
loRaMessage->distance = distance;
loRaMessage->humidity = humidity;
loRaMessage->temperature = temperature;
sendLoRaMessage(LORA_MESSAGE_ID_MAILBOX, loRaMessage);
และนั่นคืออะไร :)
สำหรับสิ่งนี้เราจะดูว่าข้อความจริงถูกสร้างขึ้นผ่าน LORA ได้อย่างไร แนวคิดพื้นฐาน คือถูกขโมยจากห้องสมุด Arduino-Lora ซึ่งใช้ไบต์แบบเดี่ยวเพื่อระบุผู้ส่งผู้รับ ฯลฯ
ดูข้อความเดียว:
| - ดังนั้นการใช้ตัวอย่างข้อความ mailbox จากด้านบนค่าสำหรับข้อความอาจมีลักษณะเช่นนี้: 12345|3.56|44.55|27.4