你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 611|回复: 0

[其他] STM32CubeMonitor 介绍(三)例程三:利用公有云平台进行远程...

[复制链接]

1347

主题

1124

回帖

0

蝴蝶豆

管理员

最后登录
2020-12-9
发表于 2020-7-28 17:19:35 | 显示全部楼层 |阅读模式

前面的两个例子,都是在本地电脑上进行监测。
接下来的这个例子,将演示如何利用CubeMonitor的网络节点,将数据转发到远程电脑进行显示。

11.png

在这个例子中,我们会用到X-NUCLEO-IKS01A2传感器扩展板,通过MCU读取传感器扩展板上的加速度值和湿度值,并且MCU可以控制开发板上的LED2的状态。然后通过CubeMonitor实时监控传感器值和LED灯的状态,并且将数据上传到公有云平台,并在另一台远程电脑上进行显示。
通过这个例子,我们将学习:
1.仪表盘(Gauge),文字输出(Text),开关(switch)等Dashboard组件的使用。
2.不使用Write Panel节点,如何修改变量值。
3.如何利用网络节点与云端服务器进行通信。

CubeMX配置

22.png

具体来说,MCU端代码需要完成的工作有:
1.配置I2C,通过I2C读取传感器扩展板上的湿度和加速度传感器的值
2.配置PC13为外部中断模式来控制板上的蓝色按键
3.配置PB7为GPIO输出,控制板上的LED2
CubeMonitor端,需要创建两个运行在不同电脑上的流:
•LocalMonitor:运行在本地,从开发板读取数据,通过Dashboard显示,同时通过MQTT协议上传到公有云平台
•RemoteMonitor:运行在远程电脑上,通过MQTT协议接收公有云平台下发的数据,并通过Dashboard展示

33.png

使用CubeMX进行以下配置:
•PB7配置为GPIO输出来控制板上的LED2状态
•PC13配置为外部中断模式,检测板上的蓝色按键操作
•初始化I2C1(PB8,PB9),作为MCU与传感器扩展板的通信接口
•添加MEMS插件,使得CubeMX能自动添加传感器驱动代码和初始化代码

44.png

在main.c中,手动添加图中的用户代码,完成以下功能:
•初始化传感器模块,并在主循环中读取传感器的值
•检测到按键按下后,在主循环中改变LED2的状态

CubeMonitor配置

55.png

我们再回到CubeMonitor的设置。首先先来创建LocalMonitor流。新建一个basic流,再在basic流的基础上进行修改。
本例程中要监测的变量有加速度传感器的值,湿度值和LED灯的状态,为了后面处理起来更方便,我们将其分成MotionSensor,EnvSensor和LED_Status三个变量组,采样模式使用direct模式,并按照上图进行配置和连接。

66.png

接下来,使用三个processing节点分别对myProbe_in节点接收到的数据进行分类处理。
接收到的加速度传感器值,直接送到chart节点进行显示。湿度值经过“single value”子流程处理成单个的数值后,送到仪表盘节点进行显示。LED灯的状态经过处理后在dashboard用ON/OFF的文字实时显示。
下面我们分别对这三条流进行说明。

节点配置

77.png

Processing节点的输出数据可以直接连接到chart节点显示,所以在MotionSensor这个processing节点中设置它的输出为axes_value.x,axes_value.y,axes_value.z这三个变量,然后将其输出连接点直接连接到chart节点进行显示就可以了。

88.png

Processing节点输出的消息是不能直接连接到仪表盘节点进行显示的,所以需要通过“子流程”对processing节点的输出进行修改,让payload仅输出变量的值。如上图,EnvSensor节点的输出先连接到“Hum_value”子流程,在这个节点里对消息进行修改,仅输出湿度值作为payload,再连接到仪表盘节点进行显示。

99.png

同样,送往文字框显示的消息也要经过子流程的修改。除此以外,因为LED灯状态这个变量在代码中是通过1和0来表示灯是点亮还是熄灭的,所以经过processing节点和子流程后,输出的消息就是1或者0。但是我们希望最终在文字框显示的是ON或者OFF,所以还需要将数字1和0,转换成字符串ON和OFF。这里我们添加function节点,通过一段简单的javascript代码来完成这个转换工作。function节点的配置见上图。

10.png

三组变量的采集和显示部分已经完成,接下来我们要添加流来完成通过Dashboard上的switch开关切换LED状态的功能。
该功能用到了dashboard的switch节点,两个change节点,variables节点,如上图进行连接。
switch节点的作用是在dashboard上添加一个开关,拨动开关可以输出两条不同的消息。在switch节点的编辑界面配置:当开关拨到“on”状态时,输出数字1;当开关拨到“off”状态时,输出数字0,topic字段设置为“write”。
change节点可以设置多条规则,对输入消息的字段进行设定,修改,删除,转移等操作。这里的第一个change节点的作用是将switch节点的topic字段替换成其payload的值。这样替换的目的是为了消息经过下一个variables节点后,还能利用topic字段保留switch节点输出的on/off状态。
接下来的variables节点中,设定要修改的变量名及地址。可以导入可执行文件,从变量列表中选择LED_toggle变量。
经过variables节点后输出的消息payload变成了变量名称,地址,类型和采样参数等内容,但topic字段的内容还没变,保留输入消息中对应的值。这样的消息还不能直接输出到myProbe_Out节点,所以需要用到第二个change节点来对消息做一些调整。
在这个名为”BuildWriteMsg”的change节点中,通过三条规则做了三件事情:
1.将payload.variablelist[0].value的值替换成topic的值,这个值就是switch节点改变状态时输出的数值。
2.再将payload.variablelist[0].value的值转换成字符串。
3.将topic字段改回“write”。
经过这个change节点的处理后,输出的消息就跟write panel节点一样的了,这时就可以直接连接到myProbe_Out节点输出了。

111.png

现在已经可以在本地监控程序的运行了,接下来我们还要添加一些网络节点,将数据发送到云端。
在本例程中,我们使用百度云物联网平台进行消息转发,电脑与百度云物联网平台之间通过MQTT协议通信,所以接下来用到的是MQTT节点。
使用了三个MQTT输出节点分别向加速度传感器,湿度和LED灯的状态等三个MQTT主题发布消息。连接方式见上图。在加速度传感器值这一路,添加了一个子流程来过滤数据,仅将其中的x轴加速度通过MQTT节点发送到云端。
使用了一个MQTT输入节点,向云端订阅控制LED灯的主题,来接收云端的LED控制命令,连接方式见上图。MQTT输入节点做为另一个输入源连接到了修改LED_toggle变量值的流,之前的一个输入源是dashboard的switch节点。

222.png

在MQTT输出节点配置消息发布的主题,服务器的地址,Client ID和MQTT连接的用户名,密码。用到了多个MQTT节点时,Client ID尽量设置不同。MQTT服务器的地址,用户名和密码以及主题这些信息,在百度云物联网平台创建产品设备后就会获得。百度云物联网平台的操作过程,这里就不做说明了,可以查看百度云物联网平台的说明。

333.png

在MQTT输入节点配置消息订阅的主题,服务器的地址,Client ID和MQTT连接的用户名,密码。

444.png

LocalMonitor端的流全部编辑完成,整个流的内容见上图。调整Dashboard布局,再部署运行后,就可以在本地监测加速度传感器的值和湿度值,并通过dashboard控制板子上的灯了。

555.png

接下来,我们将创建RemoteMonitor。RemoteMonitor中主要实现的是联网功能,即:通过MQTT节点接收云端下发的开发板信息(加速度传感器,湿度和LED灯状态)并在dashboard上显示;将dashboard的switch开关状态发送到云端对应的主题,以控制开发板上的LED灯。整个流的构成也相对简单,使用三个MQTT输入节点,分别订阅加速度传感器,湿度和LED灯的状态等三个主题的消息并连接到对应的dashboard显示节点;一个MQTT输出节点,接收switch节点的输入并向控制LED灯的主题发布控制命令。
上图所示就是整个RemoteMonitor流的内容。湿度值和LED灯的状态这两个数据的显示比较简单,将MQTT输入节点的数据直接连接到仪表图节点和文字显示框节点就可以了。

666.png

从MQTT输入节点接收到的加速度值没有时间信息,所以在其后增加了一个change节点,根据chart节点对输入消息的格式要求添加timestamp字段,并删除了无用的qos和retian字段。注意这里使用的是node-red的dashboard组件中的chart节点。

777.png

这里的switch节点,我们设置它在切换到on和off的状态时,分别输出数字1和0。switch的输出直接连接到MQTT输出节点,将控制信息发送到云端的对应主题。
MQTT节点的配置方法和前面的一样,这里就不再说明了。

888.png

RemoteMonitor端的流全部编辑完成,整个流的内容见上图。在远程电脑上部署运行后,就可以监测开发板上加速度传感器和湿度值,并通过dashboard控制板子上的灯了。

常见问题

关于CubeMonitor使用的三个例程已经全部介绍完毕,下面是一些在使用STM32CubeMonitor时可能会遇到的问题。

999.png

1. 部署运行后,点击START按钮启动采样,但图上的变量都为0,有时甚至会看到一些明显不对的显示值。
出现这种情况,可能有两个原因:ST-LINK连接出问题,这时候在调试窗口会有系统发的出错信息。重新插拔ST-LINK可以解决问题;第二个原因是因为MCU程序发生了变化,但CubeMonitor里的变量列表没有更新。在variables节点中更新变量地址就可以了。

2. 一进入调试模式,CubeMonitor就断开。
如果想要在CubeMonitor监测同时进行调试,那么就需要将CubeMonitor和IDE都配置成sharedmode。
•      在CubeMonitor的settings.js文件中将STLinkdriver与debuger的连接方式改为TCP(默认是P2P)
•      在IDE(CubeIDE/IAR/KEIL)中将st-link配置为shared mode(具体操作见上图)

444.png

3. 如何添加外部节点
•      通过菜单下的“manage palette”可以安装导入外部节点
•      如果菜单下没有“manage palette”选择,则需要安装node.js( http://nodejs.org/zh-cn/  )

5555.png

4. Direct和snapshot模式的区别
•      Direct模式下,每次采样由CubeMonitor触发,采样速度在variables节点中设定,一般选择“sequential loop”,可以达到最高速度
•      Snapshot模式下,实际的采样频率由用户代码中调用DumpTrace函数的频率决定。Variables节点中的采样频率,设定的是CubeMonitor去读MCU中保存采样数据buffer的频率。

5. 如何通过平板和手机访问运行在另一电脑上的CubeMonitor
如果这些设备在一个局域网内的话,可以通过浏览器输入运行CubeMonitor的电脑的IP地址加1880端口号进行访问。
•      输入ipaddress:1880 可访问编辑界面
•      输入ipaddress:1880/ui,可访问dashboard


回复

使用道具 举报

关于 意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版