這個存儲庫為您提供了輕鬆構建所需的一切(這是一個DIY項目!),這是一個優質的lora-to-mqtt網關,基於Ebyte Lora模塊和ESP32,並與Wi-Fi或Ethernet合作,跑出5V。網關有兩個不同的版本,這些版本的詳細信息,您應該在下面選擇:
為了賦予董事會以太網功能,我使用了Quinled ESP32以太網帽子。當然,自然而然的是我還應該使用Quinled ESP32,但是我有一些備用標準的ESP32 Devboards散佈著毫無用處,所以我設計了這些板。但是,就是說,我可能有一天可以完全根據Quinled-Esp32設計一個版本。
要輕鬆在Wi-Fi和以太網之間切換,板上有一個跳線可以做到這一點。這甚至可以與董事會供電;無需削減電源。
同樣,這是一個DIY項目!因此,首先,您需要一些焊接技能,我強烈建議您使用SMD熱板或熱氣槍來焊接Ebyte E32模塊。只用鐵焊接它非常困難!
因此,您想在您選擇的PCB原型工廠(例如JLCPCB或PCBWAY)上打印PCB。我在Sectiv文件夾中包括了Gerber文件。如果您想使用其他服務提供商,則需要檢查他們是否可以接受這些Gerbers或自己生成它們。
我還強烈建議您用模板訂購此PCB,否則您將很難將糊狀物放在Ebyte模塊的墊子上!
每個PCB文件夾都有一個IBOM HTML文件,可為您提供良好的焊接說明 /概述,在每個版本文件夾中的ibom文件夾中找到它。當您焊接板時,只需將其與5V電源線接線,然後就可以了!它消耗少於200mA,因此您可以輕鬆地使用舊的500mA,1A(或更高)手機充電器。
源可在src文件夾中使用。下載Arduino IDE,檢查config.h文件,然後用您的設置替換佔位符,並將其編譯和上傳到ESP32。那應該是它,並且網關應在您的MQTT服務器中彈出,並每5秒發送一次健康檢查消息。
現在,如何將傳感器和板發送到它的傳感器和板上,可以在下面的“源代碼 /軟件”部分中找到它。
您應該選擇哪一個?這很容易,並且由一個因素定義:
您需要在這些之間進行選擇,因為使用串行通信的EBYTE模塊無法與RFM95模塊進行通信,儘管它們使用了相同的Semtech SX1276 Lora芯片。這是因為Ebyte串行操作的模塊還具有Litte MCU,該模塊在通過LORA發送消息時已經執行了自己的“ Quite” /“協議”。因此,您不會直接與Semtech芯片交談,而是那個小MCU。人們需要了解如何使用直接SPI通信到Semtech芯片(例如我使用的特定E32模塊或RFM95)的LORA模塊來讀取這些消息,以使它們相互合作。
此版本基於EBYTE E32-400M20S或E32-900M20S,該版本可直接串製到Semtech SX1276。在上次研究時(2022年開始),這是唯一在此PCB上使用的電子字節模塊,因此您無法使用其他使用串行通信的其他電子字節模塊:它們不會適合董事會 /有不同的引腳!為您的地區選擇合適的一個(TL;為我們/亞洲的DR:400,歐洲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,設備ID和消息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 ,如果未指定因此,在您的代碼中,只需創建要發送的消息ID的實例,然後將其傳遞給sendLoRaMessage :
LoRaMessageMailbox *loRaMessage = new LoRaMessageMailbox;
loRaMessage->duration = duration;
loRaMessage->distance = distance;
loRaMessage->humidity = humidity;
loRaMessage->temperature = temperature;
sendLoRaMessage(LORA_MESSAGE_ID_MAILBOX, loRaMessage);
就是這樣:)
為此,我們看一下如何通過洛拉發送的實際消息。基本思想是從Arduino-Lora庫中被盜的,該庫使用單一字節來識別發件人,接收器等。
查看一條消息:
| 。因此,以mailbox消息示例為例,該消息的值可能看起來像: 12345|3.56|44.55|27.4