1、目標(biāo)
通過(guò)本 LAT 實(shí)現(xiàn)一個(gè)從 LoRa 節(jié)點(diǎn)、LoRa 服務(wù)器、終端應(yīng)用之間的數(shù)據(jù)或者命令的相互傳輸?shù)倪^(guò)程。
2. 實(shí)驗(yàn)準(zhǔn)備
為了實(shí)現(xiàn)上面目標(biāo),需要準(zhǔn)備一些必要的軟件和硬件。軟件的安裝、硬件的介紹和STM32CUBEMX 工具的使用,在本 LAT 中不做介紹。
3.. 服務(wù)器端賬號(hào)和網(wǎng)關(guān)注冊(cè)
這里只是簡(jiǎn)單描述,詳情請(qǐng)參考 UM2587,可以到 WWW.ST.COM 網(wǎng)站下載
3.1. 賬號(hào)注冊(cè)
首先,要在遠(yuǎn)程服務(wù)器上注冊(cè)自己的賬戶,本實(shí)驗(yàn)以 www.loriot.io 提供的免費(fèi)服務(wù)器為例,創(chuàng)建自己的賬戶, 見(jiàn)圖 2。請(qǐng)注意,在注冊(cè)時(shí)選擇正確的服務(wù)器網(wǎng)站。在本實(shí)驗(yàn)中,我們選擇了 Singapore 的服務(wù)器,網(wǎng)址是 ap1.loriot.io
3.2.配置網(wǎng)關(guān)
在成功正確的注冊(cè)完賬戶之后,我們需要在這個(gè)賬戶下注冊(cè)我們需要的網(wǎng)關(guān)。其中需要注意幾個(gè)方面:
?配置網(wǎng)關(guān)使用不同的頻段,在本實(shí)驗(yàn)中我們使用的是 CN470,如果網(wǎng)關(guān)地址不是的CN470 的話,需要使用下面 AT 指令對(duì)網(wǎng)關(guān)設(shè)備進(jìn)行修改:
AT+CH=CN470PREQUEL
AT+CH=0,471.5,A
AT+CH=1,471.7,A
AT+CH=2,472.9,A
AT+CH=3,472.1,A
AT+CH=4,472.3,B
AT+CH=5,472.5,B
AT+CH=6,472.7,B
AT+CH=7,472.9,B
AT+CH=8,OFF
AT+CH=9,OFF
?調(diào)整 LoRaWAN 服務(wù)器, MAC 地址, 網(wǎng)關(guān)的 EUI。在做實(shí)驗(yàn)之前需要確認(rèn)網(wǎng)關(guān)鏈接的網(wǎng)絡(luò)服務(wù)器和你注冊(cè)這個(gè)網(wǎng)關(guān)的服務(wù)器一致。本實(shí)驗(yàn)中使用的是 Singapore,而缺省的是 EU1,所以要使用下面 AT 指令進(jìn)行修改。
AT+PKTFWD=ap1.loriot.io,1780,1780
3.3.注冊(cè)網(wǎng)關(guān)和設(shè)備
? 注冊(cè)網(wǎng)關(guān), 登錄注冊(cè)的賬戶后,可以看到下圖的 LORIOT 的 Dashboard。選擇“Register a new gateway”進(jìn)行網(wǎng)關(guān)注冊(cè),一般我們選擇基礎(chǔ)平臺(tái)為“PacketForwarder STM”,然后從我們網(wǎng)關(guān)設(shè)備的串口 log 拷貝 MAC 地址。
? 注冊(cè)設(shè)備,請(qǐng)注意這點(diǎn)需要用到后面的一些參數(shù)(device EUI, Join EUI, Applicationkey),所以剛開(kāi)始實(shí)驗(yàn)可以先跳過(guò)這里。請(qǐng)選擇[Loriot Dashboard]>[Application]>[SampleApp]>[Enroll Device]。然后按照步驟注冊(cè)。
? 在注冊(cè)完成后,[Loriot Dashboard]>[Application]>[SampleApp]>[output]拷貝外部應(yīng)用訪問(wèn)服務(wù)器的連接,后面的 cubemx 需要用到。
下面兩個(gè)范例分別為參考地為相鄰層 L2 和參考地為兩側(cè)共面加參考層 L2 的仿真結(jié)果,仿真的阻抗為
單端 50ohm。從結(jié)果可以看出增加兩側(cè)共面為參考層可以減小阻抗線的寬度。
下面的范例圖 8 為采用 L3 參考層為參考地時(shí)的仿真結(jié)果,與圖 7 相比,結(jié)果顯示由于參考地距離射
頻走線更遠(yuǎn),在保持共面地間距不變的情況下需要更寬的走線來(lái)達(dá)到同樣的 50ohm 阻抗。如果覺(jué)得阻
抗線的寬度不理想可以適當(dāng)調(diào)整阻抗線與兩側(cè) GND 之間的間距。
圖 9 為差分 100ohm 阻抗線設(shè)置范例,可通過(guò)差分線之間的間距,差分線寬度,差分線與兩側(cè) GND
間距以及參考平面來(lái)調(diào)整阻抗。
4.設(shè)備搭建
在創(chuàng)建工程之前,下載最新的 STM32CUBEWL 軟件包、X-CUBE-MEMS1和 STM32CUBEMX 并安裝。
4.1. 創(chuàng)建工程
? 首先,打開(kāi) STM32CUBEMX,選擇從“Start my project from Example”生成工程,然后搜索 Keyword “LoRaWAN_End_Node”.
? 然后,雙擊選中的工程。并且選擇一個(gè)保存實(shí)驗(yàn)工程的路徑。這個(gè)時(shí)候,我們就可以看到一個(gè)基本的 STM32CUBEMX 工程。
? 也可以直接從 STM32WL 的 Library 路徑下面,在下面路徑下,復(fù)制并粘貼工程文件STM32Cube_FW_WL_V x.x.xProjectsNUCLEO
WL55JCApplicationsLoRaWANLoRaWAN_End_Node , 然后重命名為LoRaWAN_End_Node_Sensor,最后打開(kāi)工程文件里面的 STM32CUEMX 工程文件。
? 接著對(duì)工程做一些簡(jiǎn)單的修改:
1. 配置頻段,缺省的頻段是歐洲頻段,本實(shí)驗(yàn)使用的中國(guó)頻段 CN470.見(jiàn)圖 4.
2. 增加 sensor 的配置。
a) 選擇正確的 sensor 型號(hào)驅(qū)動(dòng)軟件,使用溫度、濕度和壓力。見(jiàn)圖 5。
b) 使能訪問(wèn) sensor 板的 I2C2 外設(shè),根據(jù) NUCLEO-WL55JC2 原理圖,
配置對(duì)應(yīng)的 I2C 總線 GPIO 為 PA11 和 PA12,見(jiàn)圖 6。
c) 使能 senor 板,并且選擇正確的 i2c 驅(qū)動(dòng)見(jiàn)圖 7.
d) 生成代碼。見(jiàn)圖 8
3. 代碼修改
(i) 添加宏定義,在 IAR 的“Option 設(shè)置->C/C++ Compiler->Preprocessor”的 “Define symbols”中添加 X_NUCLEO_IKS01A3”,見(jiàn)圖 9。
(ii) 找到 sys_sensors.h 使能 Sensor, 見(jiàn)圖 10.#define SENSOR_ENABLED 1
(iii) 在“l(fā)ora_app.c”的“SendTxData”函數(shù)中,修改 Lora 提取的上傳數(shù)據(jù),見(jiàn)圖 11.
(iv) 為了更加容易加入網(wǎng)絡(luò),將CN470_FIRST_RX1_CHANNEL 改為“( (uint32_t) 470300000 )”。
(v) 將 BSP_BUTTON_SWx_IT_PRIORITY 改為 15。
(vi)將由于有 sensor 讀取,所以關(guān)掉低功耗模式。
#define LOW_POWER_DISABLE 1
(vii)最后編譯運(yùn)行,可以從串口 log 看到下面的運(yùn)行信息,如圖 12,然后拷貝設(shè)
備信息(device EUI, Join EUI, Application key)繼續(xù)完成 3.3 對(duì)設(shè)備的注冊(cè)。
5.創(chuàng)建 STM32CubeMonitor 工程
通過(guò)創(chuàng)建一個(gè) STM32CubeMonitor 工程,來(lái)顯示 sensor 的數(shù)據(jù),從而達(dá)到終端數(shù)據(jù)的利用展示。
5.1. 創(chuàng)建一個(gè)新的 STM32CubeMonitor 工程。
1. 打開(kāi) STM32CubeMonitor, 單擊圖 12 的“+”圖標(biāo),創(chuàng)建一個(gè) flow。
2. 雙擊默認(rèn) basic flow, 然后單擊“Delete”按鈕,見(jiàn)圖 13。
3. 修改 新 flow 的名字為自己想要的名字,這里改為STM32WL_Sensor_Dashboard,見(jiàn)圖 14。
4. 創(chuàng)建與 flow 關(guān)聯(lián)的 Dashboard, 見(jiàn)圖 15。
5. 創(chuàng)建關(guān)聯(lián)的 group 并且修改,將鼠標(biāo)放置在新建 tab 上,選擇“+tab”添加 group ,并且通過(guò)選擇“edit”編輯需要的名字,這里設(shè)為
“STM32WL_Sensor_Dashboard”,見(jiàn)圖 16。
6. 用與步驟 5 相同的方式,修改 group 為“STM32WL_Sensor”
5.2. 添加需要的控件。
1. 從控件面板中拖拽需要的控件到 flow 中,從而實(shí)現(xiàn)需要顯示的功能。這里需要用到 2個(gè) TEXT 控件來(lái)顯示文本信息;3 個(gè) gauge 來(lái)顯示 sensor 數(shù)據(jù);兩個(gè) function 控件來(lái),轉(zhuǎn)換 json 格式,一個(gè) comment 來(lái)提示輸入;一個(gè) websocket 輸入和一個(gè)websocket 輸出;一個(gè) led 來(lái)顯示板子 LED 燈狀態(tài),一個(gè) switch 來(lái)個(gè)控制板子的LED 燈的顯示。見(jiàn)圖 17。
2. 逐個(gè)雙擊 flow 上的每個(gè)控件打開(kāi)其屬性窗口,接著對(duì)逐個(gè)的參數(shù)進(jìn)行修改,并將它關(guān)聯(lián)到“STM32WL_Sensor”group。
? 修改“comment”控件,修改名字為“Remind”在文本框內(nèi)添加一些提醒內(nèi)容,如“Edit the "Loriot Uplink" node with your LORIOT WebSocketToken;you will find your LORIOT WebSocket Token under Application ->SampleApp -> Output.”
? 修改其中一個(gè)“TEXT”控件,修改 Label 為“STM32WL_Sensor_Dashboard”;修改 Name 為 “Title”;選擇 group 為“STM32WL_Sensor”;size 設(shè)置 6x2,最后我們還再統(tǒng)一調(diào)整。在 layout 根據(jù)需要選擇顯示時(shí)的字體排列。
? 修改另外一個(gè)“TEXT”控件,修改 Label 為“LED”;修改 Name 為 “LED Status”;選擇 group 為“STM32WL_Sensor”;size 設(shè)置 1x1,在 layout 根據(jù)需要選擇顯示時(shí)的字體排列。
? 修改“Websocket in”控件,選擇 Type 為“connect on”;修改 Name 為“Loriot uplink”;添加 path 為前面提到的從服務(wù)器獲取的 link(見(jiàn) 3.3),
這個(gè)例程中用到為“wss://ap1.loriot.io/app?token=vnoGCAAAAA1hcDEubG9yaW90LmlvXyeT
wWbRSI-MCBQC04gzTg==”
? 修改“Websocket out ”控件,選擇 Type 為“Connect to”;修改 name 為“Loriot DownLink”,path 它會(huì)自動(dòng)填充 websocket in 的路徑。
? 修改 “LED”控件,修改 Name 為 “LED”;選擇 group 為“STM32WL_Sensor”;size 設(shè)置 1x1;在“Colors for value of msg.payload”下,單擊“X”刪掉一個(gè)選項(xiàng),并且點(diǎn)擊下拉箭頭將類型選為“number”,同時(shí)將 number 設(shè)為“1”,然后選擇一個(gè)你喜歡的顏色,意思是當(dāng)收到數(shù)字為“1”時(shí),顯示紅色。如圖 18.
? 修改 “json”控件,修改 Name 為 “json”,其它的默認(rèn)就可以了。
? 修改一個(gè) function 控件,修改名字為“Decode Sensor Parameter ”,這里我們需要寫(xiě)一個(gè)函數(shù)來(lái)提取 sensor 數(shù)據(jù),在“ON message”選項(xiàng)添加函數(shù)如圖 19:
if (msg.payload.cmd ==="tx") return ;
var LedState = {payload: parseInt("0x" + msg.payload.data.substring(0, 2))};
var Pressure = {payload: parseInt("0x" + msg.payload.data.substring(2, 6))};
var Temperature = {payload: parseInt("0x" + msg.payload.data.substring(6, 8))};
var Humidity = {payload: parseInt("0x" + msg.payload.data.substring(8, 12))};
return [ LedState,Pressure, Temperature, Humidity];
同時(shí)在“Setup”選項(xiàng)中設(shè)置輸出個(gè)數(shù)為 4;
? 修改“Switch”控件,修改 Label 為“LED ON/OFF”;修改 Name 為 “LED Switch”;選擇 group 為“STM32WL_Sensor”;size 設(shè)置為 3x1; 添加一個(gè)topic 域?yàn)椤?/span>MessageTx_LED”,如圖 20.
? 修改另一個(gè)“function”控件,修改名字為“Encode LED Parameter ”,這里需要一個(gè)函數(shù)來(lái)提取 sensor 數(shù)據(jù),在“ON message”選項(xiàng)添加函數(shù)如圖 21,請(qǐng)注意這里用了 Device EUI, 這里需要從節(jié)點(diǎn)設(shè)備的信息 log 中獲取。
? 修改“Gauge”控件,現(xiàn)在任意一個(gè)“Gauge”控件,雙擊設(shè)置屬性,選擇group為“STM32WL_Sensor”,size設(shè)置為4x3,Label為“Pressure”, range的 min 為“900”,max 為“1100”,如圖 22.
? 同理修改其它“Gauge”控件,選擇一個(gè)“Gauge”控件,雙擊設(shè)置屬性,選擇group 為“STM32WL_Sensor”,size 設(shè)置為 4x3,Label 為“Temperature”,range 的 min 為“0”,max 為“50”。
?修改“Gauge”控件,將最后一個(gè)“Gauge”控件,雙擊設(shè)置屬性,選擇group為“STM32WL_Sensor”,size設(shè)置為 4x3,Label為“Humidity”, range的 min 為“0”,max 為“100 “.
3. 修改完控件之后,我們需要將其所有的控件關(guān)聯(lián)在一起。將一個(gè)控件的節(jié)點(diǎn)拖拽到另外一個(gè)需要關(guān)聯(lián)的控件即可,如圖 23。這里要特別注意的是 decoder 的輸出函數(shù)的輸出值的順序必須跟你需要顯示的值一致,這里是按照“LedState,Pressure,Temperature, Humidity”順序,所以必須是 led 控件連接到最上面一個(gè)輸出口。
4. 按照之前 5.1.5 的方式再次選擇 Dashboard-》layout 對(duì)顯示界面進(jìn)行布局。如圖 24。
圖中右側(cè)寬度是總的顯示寬度,長(zhǎng)度自動(dòng)根據(jù)顯示而設(shè)定的。單擊控件上的鎖定圖標(biāo),從而鎖定顯示,然后拖拽而改變大小,按住鼠標(biāo)左鍵移動(dòng)位置。在在適當(dāng)調(diào)整之后,點(diǎn)擊 STM32CubeMonitor 右上角的“DEPLOY”部署工程,然后點(diǎn)擊“DASHBOARD”,顯示效果,如果不滿意,可以再次用前面的方式對(duì)界面多次布局,直到滿意為止。如圖 25。
5. 將網(wǎng)關(guān)通電確保接入外部網(wǎng)絡(luò)(Internet),然后 sensor 節(jié)點(diǎn)通電,確保節(jié)點(diǎn)加入LoRa 網(wǎng)絡(luò),可以通過(guò)節(jié)點(diǎn)和網(wǎng)關(guān)的串口數(shù)據(jù)確認(rèn)是否正確,在網(wǎng)關(guān)和節(jié)點(diǎn)工作正常后,點(diǎn)擊“DASHBOARD”按鈕,我們就可以看到圖 26 的效果。
文檔中所用到的工具及版本
? STM32CUBEMX 版本 6.3
? STM32CUBEMonitor 版本 1.3
? IAR 編譯器 版本 9.0
? X-CUBE-MEMS1 版本 9.0
-
節(jié)點(diǎn)
+關(guān)注
關(guān)注
0文章
222瀏覽量
24980 -
服務(wù)器
+關(guān)注
關(guān)注
13文章
9795瀏覽量
88000 -
stm32cubemx
+關(guān)注
關(guān)注
5文章
286瀏覽量
16276 -
LoRa
+關(guān)注
關(guān)注
352文章
1780瀏覽量
234891
原文標(biāo)題:工程師筆記|如何用STM32CubeMonitor圖形化顯示Lora節(jié)點(diǎn)信息
文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
LoRa技術(shù)科普
【轉(zhuǎn)帖】什么是LoRa技術(shù)
LoRa技術(shù)科普
Lora技術(shù)和市場(chǎng)應(yīng)用揭秘
lora無(wú)線通信模塊技術(shù)介紹
LoRa終端節(jié)點(diǎn)的網(wǎng)絡(luò)連接方式有哪些?
Lora sx1278是怎樣利用串口協(xié)議去實(shí)現(xiàn)數(shù)據(jù)傳輸的呢
LoRa低功耗的秘訣是什么?怎么挑選合適的無(wú)線傳輸lora模塊?
基于NuMicro ML51芯片中的SPI和GPIO功能實(shí)現(xiàn)LoRa模塊的數(shù)據(jù)傳輸
基于NuMicro ML51芯片中的SPI和GPIO功能實(shí)現(xiàn)LoRa模塊的數(shù)據(jù)傳輸
F8L10T LoRa 數(shù)據(jù)傳輸終端的技術(shù)規(guī)范和數(shù)據(jù)手冊(cè)免費(fèi)下載
如何測(cè)試LoRa節(jié)點(diǎn)內(nèi)置MQTT SERVER的數(shù)據(jù)傳輸是否正常

lora和wifi的區(qū)別 lora怎么傳輸數(shù)據(jù)
LoRa網(wǎng)關(guān)+LoRa節(jié)點(diǎn)的特點(diǎn)和優(yōu)勢(shì)

評(píng)論