资料介绍
描述
该项目的目标是使用 LoRaWAN 上的物联网 MQTT 集成来监控和控制基于 LoRa-E5 的物联网设备。
LoRa-E5 模块在其 LoRa 调制解调器旁边有一个嵌入式 MCU,但是我对 ESP32 最满意,所以我将 LoRa-E5 用作带有 ESP32 开发模块的 LoRa 调制解调器。在几款 LoRa-E5 板卡中,当您只需要 LoRa-E5 作为调制解调器时,推荐使用Grove LoRa E5模块,因此在本项目中使用了相同的模块。
最初,我只是想在两个 LoRa-E5 模块之间交换消息,而不需要 LoRaWAN,因此我使用了 TEST 模式并使其成功运行。如果您只想在 LoRa 模块之间交换消息而无需设置网关(这称为 TEST 模式),请查看此项目!
继续实现该项目的目标,我将其分为以下里程碑
设置物联网网关
为了将数据包从我的 ESP32 发送到物联网,我需要一个支持与我的 LoRa-E5 模块相同频率的网关。这是我使用 Raspberry Pi + RAK2245 Pi HAT 的地方。
如果您有任何其他与您的 LoRa-E5 模块频率范围相同的 LoRaWAN 网关,并且能够通过它连接到物联网,那就太好了!
要设置我的 Pi+RAK2245 LoRaWAN 网关,我只需要按照RAK Wireless的官方指南进行操作即可。
设置完成后,您将看到网关页面如下
在物联网上设置 LoRa-E5 设备
在物联网上配置 LoRa-E5 设备时,需要设备中的以下信息
- 开发EUI
- AppEUI
所有的 LoRa-E5 模块都已经有了这些信息。我们可以选择使用已配置的内容或生成新的 EUI 并使用它配置 LoRa-E5 模块。我选择使用预先配置在模块上的 EUI。
要获取 DevEUI 和 AppEUI,请在 ESP32 开发模块上上传串行直通固件,其连接如示意图所示。请注意,LoRa-E5 模块在 9600 波特上工作,因此请相应地配置您的串行直通固件。
刷新 ESP32 开发模块后,打开串行监视器/CoolTerm 并发送以下命令
AT+ID
这将返回类似于以下内容的内容
+ID: DevAddr, 25:1B:2E:11
+ID: DevEui, 2C:F7:F1:21:42:60:90:CE
+ID: AppEui, 80:00:00:00:00:00:00:06
请注意此信息可能在记事本中的某处。我们将在接下来的步骤中需要它。
现在让我们配置The Things Network (TTN),以便我们可以通过以下步骤在 ESP32+LoRa-E5 和 TTN 之间发送和接收数据:
- 在Things Stack 控制台上,选择您选择的区域并转到 Applications 并创建一个新应用程序
- 现在您已经创建了一个 Things Stack 应用程序。进入应用程序控制台后(如上所示),单击+ 添加终端设备
- 我无法在 LoRaWAN 设备存储库中找到 LoRa-E5,因此我在手动部分中手动提供了信息
- 选择 LoRa-E5 模块的频率计划、LoRaWAN 版本(取决于您的网关)、区域参数版本。我在这里找到了这个信息
- 现在,输入您在前面步骤中记下的 DevEUI 和 AppEUI
- 生成一个新的 AppKey 并在某处记下它。
您的 Things Stack 控制台配置已基本完成,可以在 ESP32+LoRa-E5 设备之间交换消息
在 ESP32 上上传固件并与 TTN 通信
此固件在配置了 AppKey(如上所述)并上传到 ESP32 后,会连接到附近的 LoRaWAN (TTN) 网关,并每 5 秒发送一次以下 JSON 对象
{
"state": {
"temp": 27.4,
"humi": 89
}
}
目前,固件会向 TTN 发送恒定的温度和湿度值,但是您可以修改固件以满足您集成任何传感器的要求,并改为发送这些值。
确保替换固件代码第 101 行中先前步骤中记下的 AppKey。成功上传代码后,我在串行端口中看到以下内容
JSON 被转换为字节数组(即7B 22 73 74... )并发送到 TTN。您可以通过选择终端设备的实时数据选项卡在 TTN 控制台上查看此数据
如果您想以 JSON 格式查看字节数组中的数据,请转到 Payload formatters 选项卡并选择 Formatter type as Javascript 并将 formatter 参数更改为以下
function decodeUplink(input) {
return {
data: JSON.parse(String.fromCharCode(...input.bytes)),
warnings: [],
errors: []
};
}
保存
返回实时数据选项卡,选择“转发上行链路数据消息”类型的条目,您现在应该能够以 JSON 格式查看发送的 LoRa 数据
就像固件允许您将数据从 ESP32 发送到 TTN 一样,它也允许您从 TTN 接收 ESP32 中的数据。
要将数据从 TTN 发送到 ESP32,请转到消息选项卡并选择下行链路选项卡。我将以下 JSON 从 TTN 发送到 ESP32
{
"name": "Sufian",
"id": "sufiankaki"
}
TTN 控制台具有以 JSON 和字节数组形式发送数据的选项。要发送 JSON 数据,我们需要像之前所做的那样修改 Payload 格式化程序(用于下行链路)。将现有脚本更改为
function encodeDownlink(input) {
return {
bytes: JSON.stringify(input),
fPort: 1,
warnings: [],
errors: []
};
}
function decodeDownlink(input) {
return {
data: {
bytes: input.bytes
},
warnings: [],
errors: []
}
}
完成后,保存并转到消息选项卡并选择下行链路。选择 JSON 并在 Payload 文本框中输入数据并点击 Schedule Downlink
在您的 Coolterm/Serial Monitor 上,您应该会看到现在收到一条消息
现在您知道如何从 LoRa 模块向 TTN 发送(上行链路)和接收(下行链路)数据,修改固件并相应地开发您的项目
MQTT 集成
虽然从 TTN 监视和控制 LoRa 设备很简单,但我更喜欢从我的定制应用程序中控制它。一旦这样做的方法是使用 TTN 提供的 MQTT 集成。这允许使用 MQTT 客户端与 LoRa 设备进行交互
获取 MQTT 客户端的最简单方法之一是使用安装在计算机中的Mosquitto (CLI)。或者,您可以尝试任何MQTT Explorer与 GUI 交互。
要为 LoRa 终端设备启用 MQTT 集成,请在 TTN 终端设备控制台的菜单(左侧)上选择集成选项,然后选择 MQTT
您将看到主机名、端口号和用户名。单击生成新的 API 密钥,以便您也拥有密码
除了您在 MQTT 集成页面上看到的 4 个字段(主机名、端口、用户名和密码)之外,您还需要订阅或发布到 TTN 的主题,具体取决于您是要从 LoRa 设备接收消息还是发送分别向 LoRa 设备发送消息。
要接收从 LoRa 设备发送到 TTN 的消息,您需要订阅的主题是v3/
mosquitto_sub -h eu1.cloud.thethings.network -p 1883 -u test-app-868@ttn -P NNSXS.IG5UN5CKVNA7IWCQBLS5XXCEGRKNKBEDIJTFUUY.BZSNJY6HJ2KRF36XOPLXZF45AGFZSR2AYTT4L3HF45BBSGH4RG6Q -t 'v3/test-app-868@ttn/devices/eui-70b3d57ed004d84c/up'
订阅后,您将收到如下消息(JSON)
这包含与从 LoRa 设备到 TTN 的上行链路消息有关的终端设备、网关、元数据等的所有信息。
要从 MQTT 客户端向 LoRa 设备发送数据,您需要发布消息的主题是v3/
{
"downlinks":
[
{ "f_port": 1,
"frm_payload":"ewogICAgIm5hbWUiOiAiU3VmaWFuIiwKICAgICJpZCI6ICJzdWZpYW5rYWtpIgp9",
"priority":"NORMAL"
}
]
}
您需要发送的消息应该是 base64 编码的。假设您要发送以下消息
{
"name": "Sufian",
"id": "sufiankaki"
}
你首先需要对它进行base64编码。我使用这个在线工具来转换我的信息。对于上面的消息,我得到了ewogICAgIm5hbWUiOiAiU3VmaWFuIiwKICAgICJpZCI6ICJzdWZpYW5rYWtpIgp9
我的 base64 编码字符串
因此我的 MQTT 发布消息看起来像
mosquitto_pub -h eu1.cloud.thethings.network -p 1883 -u test-app-868@ttn -P NNSXS.IG5UN5CKVNA7IWCQBLS5XXCEGRKNKBEDIJTFUUY.BZSNJY6HJ2KRF36XOPLXZF45AGFZSR2AYTT4L3HF45BBSGH4RG6Q -t 'v3/test-app-868@ttn/devices/eui-70b3d57ed004d84c/down/push' -m "{"downlinks":[{"f_port": 1, "frm_payload":"ewogICAgIm5hbWUiOiAiU3VmaWFuIiwKICAgICJpZCI6ICJzdWZpYW5rYWtpIgp9", "priority":"NORMAL"}]}"
确保您转义了消息中的双引号。
有关 MQTT 集成的更多信息,请查看官方文档。我上面的解释是针对 Eclipse Mosquitto 的。
通过 Python 程序监视和控制您的 LoRa 设备
使用 MQTT 集成,LoRa 设备也可以通过 python 程序进行监视和控制。我将使用 Eclipse Paho 库从我的 Python 程序向 LoRa 设备发送和接收消息
从 LoRa 设备接收和打印消息的程序
import paho.mqtt.client as mqtt
import json
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("v3/test-app-868@ttn/devices/eui-70b3d57ed004d84c/up")
def on_message(client, userdata, msg):
messg = json.loads(msg.payload)
print(messg['uplink_message']['decoded_payload'])
client = mqtt.Client()
client.username_pw_set("test-app-868@ttn", "NNSXS.IG5UN5CKVNA7IWCQBLS5XXCEGRKNKBEDIJT..")
client.on_connect = on_connect
client.on_message = on_message
client.connect("eu1.cloud.thethings.network", 1883, 60)
client.loop_forever()
向 LoRa 设备发送消息的程序
import paho.mqtt.client as mqtt
import json
import base64
from time import sleep
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("v3/test-app-868@ttn/devices/eui-70b3d57ed004d84c/up")
def on_message(client, userdata, msg):
messg = json.loads(msg.payload)
print('Received: ' + str(messg['uplink_message']['decoded_payload']))
client = mqtt.Client()
client.username_pw_set("test-app-868@ttn", "NNSXS.IG5UN5CKVNA7IWCQBLS5XXCEGRKNKBEDIJT...")
client.on_connect = on_connect
client.on_message = on_message
client.connect("eu1.cloud.thethings.network", 1883, 60)
client.loop_start()
try:
while True:
topic = "v3/test-app-868@ttn/devices/eui-70b3d57ed004d84c/down/push"
js = {'name': 'Sufian', 'id': 'sufiankaki'}
str_js = json.dumps(js)
x = {}
x["f_port"] = 1
x["frm_payload"] = base64.b64encode(str.encode(str_js)).decode()
x["priority"] = "NORMAL"
message = {}
message["downlinks"] = []
message["downlinks"].append(x)
client.publish(topic, json.dumps(message))
print('Published: ' + json.dumps(message))
sleep(5)
except KeyboardInterrupt:
client.loop_stop()
print("Stopped the client!")
- NET Core LoRaWAN客户端使用Seeed LoRa E5模块
- 使用LoRa E5的低功耗雪深传感器
- 使用ST Cube编程器和IDE对LoRa E5迷你设备进行编程
- 基于Seedstudio的LoRa E5迷你板 0次下载
- 微信小程序使用MQTT远程控制单片机——阿里云物联网平台
- 基于LORA+4G网关的油田物联网系统 11次下载
- 基于以太坊区块链的物联网设备访问控制机制 12次下载
- 鸿蒙开发板上使用MQTT协议、OneNET实现第一个物联网项目 0次下载
- 如何使用MQTT客户端连接阿里云MQTT服务器详细教程说明
- Triscend E5单片机TrISC端E5可配置片上系统平台 4次下载
- MQTT是什么?物联网开发入门之物联网标准通信协议-MQTT详细资料概述 33次下载
- 物联网全栈教程从云端到设备(十二)设备端的开发详细资料免费下载 14次下载
- 物联网MQTT网关连接PLC配置全过程 30次下载
- 基于MQTT的工业物联网数据云平台 33次下载
- MQTT物联网网关的常见类型 31次下载
- 通过物联网管理多台MQTT设备-基于米尔T527开发板 505次阅读
- MQTT和Modbus协议的区别 1899次阅读
- 基于启明RA6M5的物联网居家环境健康监控设备设计 703次阅读
- paho-mqtt模块实战 1113次阅读
- MQTT协议的概念和主要特性 MQTT协议于物联网有何好处 2231次阅读
- 【产品应用】GLCOM-NET网关一分钟实现LoRa转MQTT(高阶版) 2098次阅读
- 如何使用M5Stamp PICO和Qubitro构建物联网门锁监控系统 1680次阅读
- FLIR E4、E5、E6和E8红外热像仪的性能特点及应用范围 2665次阅读
- 亚太天能科技E5/E5c指纹锁简介 6552次阅读
- 物联网设备的安全问题深度分析 4649次阅读
- 物联网中的LoRa究竟是什么 7659次阅读
- 物联网的设备专业化和集成化两个维度的发展规律 3229次阅读
- 浅谈lora物联网技术及发展现状 1.2w次阅读
- NB-IoT与LoRa在消防物联网中孰强孰弱? 5895次阅读
- 物联网应用的支撑是5G网络建设的主要目标之一 3594次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多