關鍵詞:
STM32CubeMonitor, Lora,節點, 圖形化
1、目標
通過本 LAT 實現一個從 LoRa 節點、LoRa 服務器、終端應用之間的數據或者命令的相互傳輸的過程。

2. 實驗準備
為了實現上面目標,需要準備一些必要的軟件和硬件。軟件的安裝、硬件的介紹和STM32CUBEMX 工具的使用,在本 LAT 中不做介紹。


3.. 服務器端賬號和網關注冊
這里只是簡單描述,詳情請參考 UM2587,可以到 WWW.ST.COM 網站下載

3.1. 賬號注冊
首先,要在遠程服務器上注冊自己的賬戶,本實驗以 www.loriot.io 提供的免費服務器為例,創建自己的賬戶, 見圖 2。請注意,在注冊時選擇正確的服務器網站。在本實驗中,我們選擇了 Singapore 的服務器,網址是 ap1.loriot.io
3.2.配置網關
在成功正確的注冊完賬戶之后,我們需要在這個賬戶下注冊我們需要的網關。其中需要注意幾個方面:
?配置網關使用不同的頻段,在本實驗中我們使用的是 CN470,如果網關地址不是的CN470 的話,需要使用下面 AT 指令對網關設備進行修改:
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
?調整 LoRaWAN? 服務器, MAC 地址, 網關的 EUI。在做實驗之前需要確認網關鏈接的網絡服務器和你注冊這個網關的服務器一致。本實驗中使用的是 Singapore,而缺省的是 EU1,所以要使用下面 AT 指令進行修改。
AT+PKTFWD=ap1.loriot.io,1780,1780
3.3.注冊網關和設備
? 注冊網關, 登錄注冊的賬戶后,可以看到下圖的 LORIOT 的 Dashboard。選擇“Register a new gateway”進行網關注冊,一般我們選擇基礎平臺為“Packet?Forwarder STM”,然后從我們網關設備的串口 log 拷貝 MAC 地址。
? 注冊設備,請注意這點需要用到后面的一些參數(device EUI, Join EUI, Application?key),所以剛開始實驗可以先跳過這里。請選擇[Loriot Dashboard]>[Application]>[SampleApp]>[Enroll Device]。然后按照步驟注冊。
? 在注冊完成后,[Loriot Dashboard]>[Application]>[SampleApp]>[output]拷貝外部應用訪問服務器的連接,后面的 cubemx 需要用到。


下面兩個范例分別為參考地為相鄰層 L2 和參考地為兩側共面加參考層 L2 的仿真結果,仿真的阻抗為
單端 50ohm。從結果可以看出增加兩側共面為參考層可以減小阻抗線的寬度。
下面的范例圖 8 為采用 L3 參考層為參考地時的仿真結果,與圖 7 相比,結果顯示由于參考地距離射
頻走線更遠,在保持共面地間距不變的情況下需要更寬的走線來達到同樣的 50ohm 阻抗。如果覺得阻
抗線的寬度不理想可以適當調整阻抗線與兩側 GND 之間的間距。
圖 9 為差分 100ohm 阻抗線設置范例,可通過差分線之間的間距,差分線寬度,差分線與兩側 GND
間距以及參考平面來調整阻抗。
4.設備搭建
在創建工程之前,下載最新的 STM32CUBEWL 軟件包、X-CUBE-MEMS1和 STM32CUBEMX 并安裝。
4.1. 創建工程
? 首先,打開 STM32CUBEMX,選擇從“Start my project from Example”生成工程,然后搜索 Keyword “LoRaWAN_End_Node”.
? 然后,雙擊選中的工程。并且選擇一個保存實驗工程的路徑。這個時候,我們就可以看到一個基本的 STM32CUBEMX 工程。
? 也可以直接從 STM32WL 的 Library 路徑下面,在下面路徑下,復制并粘貼工程文件STM32Cube_FW_WL_V x.x.x\Projects\NUCLEO
WL55JC\Applications\LoRaWAN\LoRaWAN_End_Node , 然后重命名為?LoRaWAN_End_Node_Sensor,最后打開工程文件里面的 STM32CUEMX 工程文件。
? 接著對工程做一些簡單的修改:
1. 配置頻段,缺省的頻段是歐洲頻段,本實驗使用的中國頻段 CN470.見圖 4.
2. 增加 sensor 的配置。
a) 選擇正確的 sensor 型號驅動軟件,使用溫度、濕度和壓力。見圖 5。
b) 使能訪問 sensor 板的 I2C2 外設,根據 NUCLEO-WL55JC2 原理圖,
配置對應的 I2C 總線 GPIO 為 PA11 和 PA12,見圖 6。
c) 使能 senor 板,并且選擇正確的 i2c 驅動見圖 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) 在“lora_app.c”的“SendTxData”函數中,修改 Lora 提取的上傳數據,見圖 11.
(iv) 為了更加容易加入網絡,將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)繼續完成 3.3 對設備的注冊。




5.創建 STM32CubeMonitor 工程
通過創建一個 STM32CubeMonitor 工程,來顯示 sensor 的數據,從而達到終端數據的利用展示。
5.1. 創建一個新的 STM32CubeMonitor 工程。
1. 打開 STM32CubeMonitor, 單擊圖 12 的“+”圖標,創建一個 flow。
2. 雙擊默認 basic flow, 然后單擊“Delete”按鈕,見圖 13。
3. 修改 新 flow 的名字為自己想要的名字,這里改為STM32WL_Sensor_Dashboard,見圖 14。
4. 創建與 flow 關聯的 Dashboard, 見圖 15。
5. 創建關聯的 group 并且修改,將鼠標放置在新建 tab 上,選擇“+tab”添加 group ,并且通過選擇“edit”編輯需要的名字,這里設為
“STM32WL_Sensor_Dashboard”,見圖 16。
6. 用與步驟 5 相同的方式,修改 group 為“STM32WL_Sensor”





5.2. 添加需要的控件。
1. 從控件面板中拖拽需要的控件到 flow 中,從而實現需要顯示的功能。這里需要用到 2個 TEXT 控件來顯示文本信息;3 個 gauge 來顯示 sensor 數據;兩個 function 控件來,轉換 json 格式,一個 comment 來提示輸入;一個 websocket 輸入和一個?websocket 輸出;一個 led 來顯示板子 LED 燈狀態,一個 switch 來個控制板子的LED 燈的顯示。見圖 17。

2. 逐個雙擊 flow 上的每個控件打開其屬性窗口,接著對逐個的參數進行修改,并將它關聯到“STM32WL_Sensor”group。
? 修改“comment”控件,修改名字為“Remind”在文本框內添加一些提醒內容,如“Edit the "Loriot Uplink" node with your LORIOT WebSocket?Token;you will find your LORIOT WebSocket Token under Application ->?SampleApp -> Output.”
? 修改其中一個“TEXT”控件,修改 Label 為?“STM32WL_Sensor_Dashboard”;修改 Name 為 “Title”;選擇 group 為?“STM32WL_Sensor”;size 設置 6x2,最后我們還再統一調整。在 layout 根據需要選擇顯示時的字體排列。
? 修改另外一個“TEXT”控件,修改 Label 為“LED”;修改 Name 為 “LED Status”;選擇 group 為“STM32WL_Sensor”;size 設置 1x1,在 layout 根據需要選擇顯示時的字體排列。
? 修改“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”,然后選擇一個你喜歡的顏色,意思?是當收到數字為“1”時,顯示紅色。如圖 18.

? 修改 “json”控件,修改 Name 為 “json”,其它的默認就可以了。
? 修改一個 function 控件,修改名字為“Decode Sensor Parameter ”,這里我們需要寫一個函數來提取 sensor 數據,在“ON message”選項添加函數如圖 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”選項中設置輸出個數為 4;

? 修改“Switch”控件,修改 Label 為“LED ON/OFF”;修改 Name 為 “LED Switch”;選擇 group 為“STM32WL_Sensor”;size 設置為 3x1; 添加一個?topic 域為“?MessageTx_LED”,如圖 20.

? 修改另一個“function”控件,修改名字為“Encode LED Parameter ”,這里需要一個函數來提取 sensor 數據,在“ON message”選項添加函數如圖 21,請注意這里用了 Device EUI, 這里需要從節點設備的信息 log 中獲取。

? 修改“Gauge”控件,現在任意一個“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. 修改完控件之后,我們需要將其所有的控件關聯在一起。將一個控件的節點拖拽到另外一個需要關聯的控件即可,如圖 23。這里要特別注意的是 decoder 的輸出函數的輸出值的順序必須跟你需要顯示的值一致,這里是按照“LedState,Pressure,?Temperature, Humidity”順序,所以必須是 led 控件連接到最上面一個輸出口。

4. 按照之前 5.1.5 的方式再次選擇 Dashboard-》layout 對顯示界面進行布局。如圖 24。
圖中右側寬度是總的顯示寬度,長度自動根據顯示而設定的。單擊控件上的鎖定圖標,從而鎖定顯示,然后拖拽而改變大小,按住鼠標左鍵移動位置。在在適當調整之后,點擊 STM32CubeMonitor 右上角的“DEPLOY”部署工程,然后點擊?“DASHBOARD”,顯示效果,如果不滿意,可以再次用前面的方式對界面多次布局,直到滿意為止。如圖 25。


5. 將網關通電確保接入外部網絡(Internet),然后 sensor 節點通電,確保節點加入LoRa 網絡,可以通過節點和網關的串口數據確認是否正確,在網關和節點工作正常后,點擊“DASHBOARD”按鈕,我們就可以看到圖 26 的效果。

文檔中所用到的工具及版本
? STM32CUBEMX 版本 6.3
? STM32CUBEMonitor 版本 1.3
? IAR 編譯器 版本 9.0
? X-CUBE-MEMS1 版本 9.0
? ? ? ? ? ? ? ??
? THE END
▽點擊“閱讀原文”,可下載原文檔