電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>使用MQTT集成來監(jiān)控控制基于LoRa E5的物聯(lián)網(wǎng)設(shè)備

使用MQTT集成來監(jiān)控控制基于LoRa E5的物聯(lián)網(wǎng)設(shè)備

2022-10-31 | zip | 7.82 MB | 次下載 | 2積分

資料介紹

描述

該項(xiàng)目的目標(biāo)是使用 LoRaWAN 上的物聯(lián)網(wǎng) MQTT 集成來監(jiān)控和控制基于 LoRa-E5 的物聯(lián)網(wǎng)設(shè)備。

LoRa-E5 模塊在其 LoRa 調(diào)制解調(diào)器旁邊有一個(gè)嵌入式 MCU,但是我對(duì) ESP32 最滿意,所以我將 LoRa-E5 用作帶有 ESP32 開發(fā)模塊的 LoRa 調(diào)制解調(diào)器。在幾款 LoRa-E5 板卡中,當(dāng)您只需要 LoRa-E5 作為調(diào)制解調(diào)器時(shí),推薦使用Grove LoRa E5模塊,因此在本項(xiàng)目中使用了相同的模塊。

poYBAGNY3FqAHQZLABUVz-qaDiA295.png
洛拉 E5 <> ESP32
?

最初,我只是想在兩個(gè) LoRa-E5 模塊之間交換消息,而不需要 LoRaWAN,因此我使用了 TEST 模式并使其成功運(yùn)行。如果您只想在 LoRa 模塊之間交換消息而無需設(shè)置網(wǎng)關(guān)(這稱為 TEST 模式),請(qǐng)查看此項(xiàng)目!

繼續(xù)實(shí)現(xiàn)該項(xiàng)目的目標(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),我需要一個(gè)支持與我的 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)頁面如下

poYBAGNY3GGAc2UIAAJ9XZvkqNI239.png
?

在物聯(lián)網(wǎng)上設(shè)置 LoRa-E5 設(shè)備

在物聯(lián)網(wǎng)上配置 LoRa-E5 設(shè)備時(shí),需要設(shè)備中的以下信息

  • 開發(fā)EUI
  • AppEUI

所有的 LoRa-E5 模塊都已經(jīng)有了這些信息。我們可以選擇使用已配置的內(nèi)容或生成新的 EUI 并使用它配置 LoRa-E5 模塊。我選擇使用預(yù)先配置在模塊上的 EUI。

要獲取 DevEUI 和 AppEUI,請(qǐng)?jiān)?ESP32 開發(fā)模塊上上傳串行直通固件,其連接如示意圖所示。請(qǐng)注意,LoRa-E5 模塊在 9600 波特上工作,因此請(qǐng)相應(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
poYBAGNY3GSAXHOkAADJyrR0TrA076.png
?

請(qǐng)注意此信息可能在記事本中的某處。我們將在接下來的步驟中需要它。

現(xiàn)在讓我們配置The Things Network (TTN),以便我們可以通過以下步驟在 ESP32+LoRa-E5 和 TTN 之間發(fā)送和接收數(shù)據(jù):

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

您的 Things Stack 控制臺(tái)配置已基本完成,可以在 ESP32+LoRa-E5 設(shè)備之間交換消息

在 ESP32 上上傳固件并與 TTN 通信

此固件在配置了 AppKey(如上所述)并上傳到 ESP32 后,會(huì)連接到附近的 LoRaWAN (TTN) 網(wǎng)關(guān),并每 5 秒發(fā)送一次以下 JSON 對(duì)象

{
    "state":  {
                "temp": 27.4,
                "humi": 89
              }
}

目前,固件會(huì)向 TTN 發(fā)送恒定的溫度濕度值,但是您可以修改固件以滿足您集成任何傳感器的要求,并改為發(fā)送這些值。

確保替換固件代碼第 101 行中先前步驟中記下的 AppKey。成功上傳代碼后,我在串行端口中看到以下內(nèi)容

poYBAGNY3G6AQ_ftAAGC8V5Zce4726.png
?

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

pYYBAGNY3HOAHUhEAAN_IWBx1RU154.png
?

如果您想以 JSON 格式查看字節(jié)數(shù)組中的數(shù)據(jù),請(qǐng)轉(zhuǎn)到 Payload formatters 選項(xiàng)卡并選擇 Formatter type as Javascript 并將 formatter 參數(shù)更改為以下

function decodeUplink(input) {
  return {
    data: JSON.parse(String.fromCharCode(...input.bytes)),
    warnings: [],
    errors: []
  };
}
pYYBAGNY3HiAN5_PAACNi3cp7TE051.png
?

保存

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

pYYBAGNY3HyAWmCSAASM5rf47l4085.png
?

就像固件允許您將數(shù)據(jù)從 ESP32 發(fā)送到 TTN 一樣,它也允許您從 TTN 接收 ESP32 中的數(shù)據(jù)。

要將數(shù)據(jù)從 TTN 發(fā)送到 ESP32,請(qǐng)轉(zhuǎn)到消息選項(xiàng)卡并選擇下行鏈路選項(xiàng)卡。我將以下 JSON 從 TTN 發(fā)送到 ESP32

{
    "name": "Sufian",
    "id": "sufiankaki"
}

TTN 控制臺(tái)具有以 JSON 和字節(jié)數(shù)組形式發(fā)送數(shù)據(jù)的選項(xiàng)。要發(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: []
  }
}
pYYBAGNY3H-ABareAAIa71IMHa0638.png
?

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

poYBAGNY3IKASYT3AADObF7q5Uw417.png
?

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

pYYBAGNY3I2AQ25KAABVN5SUb2U239.png
?

現(xiàn)在您知道如何從 LoRa 模塊向 TTN 發(fā)送(上行鏈路)和接收(下行鏈路)數(shù)據(jù),修改固件并相應(yīng)地開發(fā)您的項(xiàng)目

MQTT 集成

雖然從 TTN 監(jiān)視和控制 LoRa 設(shè)備很簡(jiǎn)單,但我更喜歡從我的定制應(yīng)用程序中控制它。一旦這樣做的方法是使用 TTN 提供的 MQTT 集成。這允許使用 MQTT 客戶端與 LoRa 設(shè)備進(jìn)行交互

獲取 MQTT 客戶端的最簡(jiǎn)單方法之一是使用安裝在計(jì)算機(jī)中的Mosquitto (CLI)。或者,您可以嘗試任何MQTT Explorer與 GUI 交互。

要為 LoRa 終端設(shè)備啟用 MQTT 集成,請(qǐng)?jiān)?TTN 終端設(shè)備控制臺(tái)的菜單(左側(cè))上選擇集成選項(xiàng),然后選擇 MQTT

您將看到主機(jī)名、端口號(hào)和用戶名。單擊生成新的 API 密鑰,以便您也擁有密碼

poYBAGNY3JSAQoqbAADUde1ZDzo337.png
?

除了您在 MQTT 集成頁面上看到的 4 個(gè)字段(主機(jī)名、端口、用戶名和密碼)之外,您還需要訂閱或發(fā)布到 TTN 的主題,具體取決于您是要從 LoRa 設(shè)備接收消息還是發(fā)送分別向 LoRa 設(shè)備發(fā)送消息。

要接收從 LoRa 設(shè)備發(fā)送到 TTN 的消息,您需要訂閱的主題是v3//devices//up。 替換為各自的值。因此,您從 LoRa 設(shè)備接收消息的 CLI 命令將是

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)

pYYBAGNY3JiAGunxAARjnGEtKL8006.png
?

這包含與從 LoRa 設(shè)備到 TTN 的上行鏈路消息有關(guān)的終端設(shè)備、網(wǎng)關(guān)、元數(shù)據(jù)等的所有信息。

要從 MQTT 客戶端向 LoRa 設(shè)備發(fā)送數(shù)據(jù),您需要發(fā)布消息的主題是v3//devices//down/push。此外,消息需要采用以下格式

{
    "downlinks":
        [
        {  "f_port": 1, 
            "frm_payload":"ewogICAgIm5hbWUiOiAiU3VmaWFuIiwKICAgICJpZCI6ICJzdWZpYW5rYWtpIgp9", 
            "priority":"NORMAL"
        }
        ]
}

您需要發(fā)送的消息應(yīng)該是 base64 編碼的。假設(shè)您要發(fā)送以下消息

{
    "name": "Sufian",
    "id": "sufiankaki"
}

你首先需要對(duì)它進(jìn)行base64編碼。我使用這個(gè)在線工具來轉(zhuǎn)換我的信息。對(duì)于上面的消息,我得到了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)義了消息中的雙引號(hào)。

有關(guān) MQTT 集成的更多信息,請(qǐng)查看官方文檔。我上面的解釋是針對(duì) 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!")

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)