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