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
来源:STM32单片机
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。