資料介紹
描述
該項目的目標(biāo)是使用 LoRaWAN 上的物聯(lián)網(wǎng) MQTT 集成來監(jiān)控和控制基于 LoRa-E5 的物聯(lián)網(wǎng)設(shè)備。
LoRa-E5 模塊在其 LoRa 調(diào)制解調(diào)器旁邊有一個嵌入式 MCU,但是我對 ESP32 最滿意,所以我將 LoRa-E5 用作帶有 ESP32 開發(fā)模塊的 LoRa 調(diào)制解調(diào)器。在幾款 LoRa-E5 板卡中,當(dāng)您只需要 LoRa-E5 作為調(diào)制解調(diào)器時,推薦使用Grove LoRa E5模塊,因此在本項目中使用了相同的模塊。

最初,我只是想在兩個 LoRa-E5 模塊之間交換消息,而不需要 LoRaWAN,因此我使用了 TEST 模式并使其成功運行。如果您只想在 LoRa 模塊之間交換消息而無需設(shè)置網(wǎng)關(guān)(這稱為 TEST 模式),請查看此項目!
繼續(xù)實現(xiàn)該項目的目標(biāo),我將其分為以下里程碑
- 設(shè)置物聯(lián)網(wǎng)網(wǎng)關(guān) (LoRaWAN)
- 在物聯(lián)網(wǎng)上設(shè)置 LoRa-E5 設(shè)備
- 在 ESP32 上上傳固件以與 TTN 通信
- MQTT 集成
- 通過 Python 程序監(jiān)視和控制您的 LoRa 設(shè)備
?
設(shè)置物聯(lián)網(wǎng)網(wǎng)關(guān)
為了將數(shù)據(jù)包從我的 ESP32 發(fā)送到物聯(lián)網(wǎng),我需要一個支持與我的 LoRa-E5 模塊相同頻率的網(wǎng)關(guān)。這是我使用 Raspberry Pi + RAK2245 Pi HAT 的地方。
如果您有任何其他與您的 LoRa-E5 模塊頻率范圍相同的 LoRaWAN 網(wǎng)關(guān),并且能夠通過它連接到物聯(lián)網(wǎng),那就太好了!
要設(shè)置我的 Pi+RAK2245 LoRaWAN 網(wǎng)關(guān),我只需要按照RAK Wireless的官方指南進(jìn)行操作即可。
設(shè)置完成后,您將看到網(wǎng)關(guān)頁面如下

在物聯(lián)網(wǎng)上設(shè)置 LoRa-E5 設(shè)備
在物聯(lián)網(wǎng)上配置 LoRa-E5 設(shè)備時,需要設(shè)備中的以下信息
- 開發(fā)EUI
- AppEUI
所有的 LoRa-E5 模塊都已經(jīng)有了這些信息。我們可以選擇使用已配置的內(nèi)容或生成新的 EUI 并使用它配置 LoRa-E5 模塊。我選擇使用預(yù)先配置在模塊上的 EUI。
要獲取 DevEUI 和 AppEUI,請在 ESP32 開發(fā)模塊上上傳串行直通固件,其連接如示意圖所示。請注意,LoRa-E5 模塊在 9600 波特上工作,因此請相應(yīng)地配置您的串行直通固件。
刷新 ESP32 開發(fā)模塊后,打開串行監(jiān)視器/CoolTerm 并發(fā)送以下命令
AT+ID
這將返回類似于以下內(nèi)容的內(nèi)容
+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

請注意此信息可能在記事本中的某處。我們將在接下來的步驟中需要它。
現(xiàn)在讓我們配置The Things Network (TTN),以便我們可以通過以下步驟在 ESP32+LoRa-E5 和 TTN 之間發(fā)送和接收數(shù)據(jù):
- 在Things Stack 控制臺上,選擇您選擇的區(qū)域并轉(zhuǎn)到 Applications 并創(chuàng)建一個新應(yīng)用程序

- 現(xiàn)在您已經(jīng)創(chuàng)建了一個 Things Stack 應(yīng)用程序。進(jìn)入應(yīng)用程序控制臺后(如上所示),單擊+ 添加終端設(shè)備
- 我無法在 LoRaWAN 設(shè)備存儲庫中找到 LoRa-E5,因此我在手動部分中手動提供了信息
- 選擇 LoRa-E5 模塊的頻率計劃、LoRaWAN 版本(取決于您的網(wǎng)關(guān))、區(qū)域參數(shù)版本。我在這里找到了這個信息
- 現(xiàn)在,輸入您在前面步驟中記下的 DevEUI 和 AppEUI
- 生成一個新的 AppKey 并在某處記下它。

您的 Things Stack 控制臺配置已基本完成,可以在 ESP32+LoRa-E5 設(shè)備之間交換消息
在 ESP32 上上傳固件并與 TTN 通信
此固件在配置了 AppKey(如上所述)并上傳到 ESP32 后,會連接到附近的 LoRaWAN (TTN) 網(wǎng)關(guān),并每 5 秒發(fā)送一次以下 JSON 對象
{
"state": {
"temp": 27.4,
"humi": 89
}
}
目前,固件會向 TTN 發(fā)送恒定的溫度和濕度值,但是您可以修改固件以滿足您集成任何傳感器的要求,并改為發(fā)送這些值。
確保替換固件代碼第 101 行中先前步驟中記下的 AppKey。成功上傳代碼后,我在串行端口中看到以下內(nèi)容

JSON 被轉(zhuǎn)換為字節(jié)數(shù)組(即7B 22 73 74... )并發(fā)送到 TTN。您可以通過選擇終端設(shè)備的實時數(shù)據(jù)選項卡在 TTN 控制臺上查看此數(shù)據(jù)

如果您想以 JSON 格式查看字節(jié)數(shù)組中的數(shù)據(jù),請轉(zhuǎn)到 Payload formatters 選項卡并選擇 Formatter type as Javascript 并將 formatter 參數(shù)更改為以下
function decodeUplink(input) {
return {
data: JSON.parse(String.fromCharCode(...input.bytes)),
warnings: [],
errors: []
};
}

保存
返回實時數(shù)據(jù)選項卡,選擇“轉(zhuǎn)發(fā)上行鏈路數(shù)據(jù)消息”類型的條目,您現(xiàn)在應(yīng)該能夠以 JSON 格式查看發(fā)送的 LoRa 數(shù)據(jù)

就像固件允許您將數(shù)據(jù)從 ESP32 發(fā)送到 TTN 一樣,它也允許您從 TTN 接收 ESP32 中的數(shù)據(jù)。
要將數(shù)據(jù)從 TTN 發(fā)送到 ESP32,請轉(zhuǎn)到消息選項卡并選擇下行鏈路選項卡。我將以下 JSON 從 TTN 發(fā)送到 ESP32
{
"name": "Sufian",
"id": "sufiankaki"
}
TTN 控制臺具有以 JSON 和字節(jié)數(shù)組形式發(fā)送數(shù)據(jù)的選項。要發(fā)送 JSON 數(shù)據(jù),我們需要像之前所做的那樣修改 Payload 格式化程序(用于下行鏈路)。將現(xiàn)有腳本更改為
function encodeDownlink(input) {
return {
bytes: JSON.stringify(input),
fPort: 1,
warnings: [],
errors: []
};
}
function decodeDownlink(input) {
return {
data: {
bytes: input.bytes
},
warnings: [],
errors: []
}
}

完成后,保存并轉(zhuǎn)到消息選項卡并選擇下行鏈路。選擇 JSON 并在 Payload 文本框中輸入數(shù)據(jù)并點擊 Schedule Downlink

在您的 Coolterm/Serial Monitor 上,您應(yīng)該會看到現(xiàn)在收到一條消息

現(xiàn)在您知道如何從 LoRa 模塊向 TTN 發(fā)送(上行鏈路)和接收(下行鏈路)數(shù)據(jù),修改固件并相應(yīng)地開發(fā)您的項目
MQTT 集成
雖然從 TTN 監(jiān)視和控制 LoRa 設(shè)備很簡單,但我更喜歡從我的定制應(yīng)用程序中控制它。一旦這樣做的方法是使用 TTN 提供的 MQTT 集成。這允許使用 MQTT 客戶端與 LoRa 設(shè)備進(jìn)行交互
獲取 MQTT 客戶端的最簡單方法之一是使用安裝在計算機(jī)中的Mosquitto (CLI)。或者,您可以嘗試任何MQTT Explorer與 GUI 交互。
要為 LoRa 終端設(shè)備啟用 MQTT 集成,請在 TTN 終端設(shè)備控制臺的菜單(左側(cè))上選擇集成選項,然后選擇 MQTT
您將看到主機(jī)名、端口號和用戶名。單擊生成新的 API 密鑰,以便您也擁有密碼

除了您在 MQTT 集成頁面上看到的 4 個字段(主機(jī)名、端口、用戶名和密碼)之外,您還需要訂閱或發(fā)布到 TTN 的主題,具體取決于您是要從 LoRa 設(shè)備接收消息還是發(fā)送分別向 LoRa 設(shè)備發(fā)送消息。
要接收從 LoRa 設(shè)備發(fā)送到 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 設(shè)備到 TTN 的上行鏈路消息有關(guān)的終端設(shè)備、網(wǎng)關(guān)、元數(shù)據(jù)等的所有信息。
要從 MQTT 客戶端向 LoRa 設(shè)備發(fā)送數(shù)據(jù),您需要發(fā)布消息的主題是v3/
{
"downlinks":
[
{ "f_port": 1,
"frm_payload":"ewogICAgIm5hbWUiOiAiU3VmaWFuIiwKICAgICJpZCI6ICJzdWZpYW5rYWtpIgp9",
"priority":"NORMAL"
}
]
}
您需要發(fā)送的消息應(yīng)該是 base64 編碼的。假設(shè)您要發(fā)送以下消息
{
"name": "Sufian",
"id": "sufiankaki"
}
你首先需要對它進(jìn)行base64編碼。我使用這個在線工具來轉(zhuǎn)換我的信息。對于上面的消息,我得到了ewogICAgIm5hbWUiOiAiU3VmaWFuIiwKICAgICJpZCI6ICJzdWZpYW5rYWtpIgp9
我的 base64 編碼字符串
因此我的 MQTT 發(fā)布消息看起來像
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"}]}"
確保您轉(zhuǎn)義了消息中的雙引號。
有關(guān) MQTT 集成的更多信息,請查看官方文檔。我上面的解釋是針對 Eclipse Mosquitto 的。
通過 Python 程序監(jiān)視和控制您的 LoRa 設(shè)備
使用 MQTT 集成,LoRa 設(shè)備也可以通過 python 程序進(jìn)行監(jiān)視和控制。我將使用 Eclipse Paho 庫從我的 Python 程序向 LoRa 設(shè)備發(fā)送和接收消息
從 LoRa 設(shè)備接收和打印消息的程序
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 設(shè)備發(fā)送消息的程序
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!")
- MQTT調(diào)試助手中文版(物聯(lián)網(wǎng)開發(fā)必備) 7次下載
- NET Core LoRaWAN客戶端使用Seeed LoRa E5模塊
- 使用LoRa E5的低功耗雪深傳感器
- 使用ST Cube編程器和IDE對LoRa E5迷你設(shè)備進(jìn)行編程
- 基于Seedstudio的LoRa E5迷你板 0次下載
- 微信小程序使用MQTT遠(yuǎn)程控制單片機(jī)——阿里云物聯(lián)網(wǎng)平臺
- 基于LORA+4G網(wǎng)關(guān)的油田物聯(lián)網(wǎng)系統(tǒng) 11次下載
- 基于以太坊區(qū)塊鏈的物聯(lián)網(wǎng)設(shè)備訪問控制機(jī)制 12次下載
- 鴻蒙開發(fā)板上使用MQTT協(xié)議、OneNET實現(xiàn)第一個物聯(lián)網(wǎng)項目 0次下載
- 如何使用MQTT客戶端連接阿里云MQTT服務(wù)器詳細(xì)教程說明
- Triscend E5單片機(jī)TrISC端E5可配置片上系統(tǒng)平臺 4次下載
- MQTT是什么?物聯(lián)網(wǎng)開發(fā)入門之物聯(lián)網(wǎng)標(biāo)準(zhǔn)通信協(xié)議-MQTT詳細(xì)資料概述 33次下載
- 物聯(lián)網(wǎng)MQTT網(wǎng)關(guān)連接PLC配置全過程 30次下載
- 基于MQTT的工業(yè)物聯(lián)網(wǎng)數(shù)據(jù)云平臺 33次下載
- MQTT物聯(lián)網(wǎng)網(wǎng)關(guān)的常見類型 31次下載
- 【教程】設(shè)備通過MQTT協(xié)議接入OneNET平臺,建立可視化界面 1029次閱讀
- 通過物聯(lián)網(wǎng)管理多臺MQTT設(shè)備-基于米爾T527開發(fā)板 730次閱讀
- MQTT和Modbus協(xié)議的區(qū)別 3111次閱讀
- 基于啟明RA6M5的物聯(lián)網(wǎng)居家環(huán)境健康監(jiān)控設(shè)備設(shè)計 954次閱讀
- paho-mqtt模塊實戰(zhàn) 1369次閱讀
- MQTT協(xié)議的概念和主要特性 MQTT協(xié)議于物聯(lián)網(wǎng)有何好處 2557次閱讀
- 【產(chǎn)品應(yīng)用】GLCOM-NET網(wǎng)關(guān)一分鐘實現(xiàn)LoRa轉(zhuǎn)MQTT(高階版) 2261次閱讀
- 如何使用M5Stamp PICO和Qubitro構(gòu)建物聯(lián)網(wǎng)門鎖監(jiān)控系統(tǒng) 1853次閱讀
- FLIR E4、E5、E6和E8紅外熱像儀的性能特點及應(yīng)用范圍 2884次閱讀
- 亞太天能科技E5/E5c指紋鎖簡介 6792次閱讀
- 物聯(lián)網(wǎng)設(shè)備的安全問題深度分析 4818次閱讀
- 物聯(lián)網(wǎng)中的LoRa究竟是什么 7873次閱讀
- 物聯(lián)網(wǎng)的設(shè)備專業(yè)化和集成化兩個維度的發(fā)展規(guī)律 3326次閱讀
- 淺談lora物聯(lián)網(wǎng)技術(shù)及發(fā)展現(xiàn)狀 1.2w次閱讀
- 物聯(lián)網(wǎng)應(yīng)用的支撐是5G網(wǎng)絡(luò)建設(shè)的主要目標(biāo)之一 3688次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 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十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論