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

查看: 684|回复: 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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版