这个存储库为您提供了轻松构建所需的一切(这是一个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