后面公众号资料都会放在此github地址中,大家可以自取!! 伙伴们,一步一步DIY自己的重力感应小车,本次调试在RT-Studio平台调试遥控端MPU6050数据采集和通过MQTT协议在Onenet服务器发布订阅数据,本次主要用到正点原子开发板STM32F407ZGT6(探索者),也讲一下如何使用基于芯片开发,话不多说,上干货!
使用软硬件资源 |
---|
此次分享主要用到的软硬件资源:
软件(RT-Studio平台):
1、OneNet软件包;
2、OneNet服务器;
3、pahomqtt软件包
4、webclient软件包
5、MPU6XXX软件包
6、MQTT.FX MQTT发布订阅调试工具
下载链接:http://mqttfx.jensd.de/index.php/download
硬件:
1、STM32F407ZGT6探索板
2、ESP8266模块
3、MPU6050模块
4、串口3
实现目标: 基于RT-Studio平台,读取MPU6050传感器数据,使用MQTT.FX工具模拟两设备发布订阅功能。
一、建立工程
新建RT-Tread项目,选择基于芯片,我用到的是F4系列的,伙伴们可以根据自己手里的板子选择芯片,只要是在RT-Studio支持范围内,都可以的,控制台串口选择的是串口1,PA9,PA10引脚。
建立好工程之后,添加我们本次用到的软件包,onenet软件包、mqtt软件包方法和之前文章方法相同,如果有不懂的,麻烦动动小手翻翻前面文章哈,本次主要是介绍新增的MPU6XXX软件包的使用,此软件包支持多个型号传感器如MPU6000、MPU6050、MPU6500、MPU9250等,搜索软件包,如下图
下面是软件包对传感器的一些支持情况,通讯接口支持IIC和SPI方式,本次使用的是IIC方式。
软件包配置方面,我们使用默认的勾选即可,然后保存,更新配置到我们的工程。
小飞哥使用的是软件模拟IIC,首先,我们需要确定MPU6050的硬件连接,根据正点原子开发资料,我的板子是连接在PB8,PB9引脚上,现在需要对引脚要进行修改,注册iic,在board.h中添加修改如下代码,使用的是iic2,
help-->list_device一下,可以看到,iic2已经注册完成。
接下来,如何读取MPU6050传感器数据呢,这时候就要学会看软件包附带的开发文档以及示例程序了,框框中的文档是对我们最好的帮助,告诉我们该如何去使用软件包接口,我们只需要对照着实施就OK的。
首先对传感器进行初始化配置,查看初始化函数,有两个比较重要的参数,一个是使用的iic总线名称,即是我们上面注册的iic2,另一个是传感器的地址,也就是iic通讯的地址,定义下面两个宏定义,我们只需要把这两个数据传入初始化函数即可。
初始化函数中会先进行设备ID的读取已确定当前接入的传感器型号,这也是我们调试此类传感器时常用的办法,能够快速确定我们的主机代码是否能够与传感器正常通信。
至此,如果顺利的话,我们编译、下载代码之后,控制台会输出设备初始化成功的提示,主板与传感器已经建立正常的通信,接下来就是数据的读取了,读取之前,先对一些参数进行配置,主要是对数据的范围、采样率进行配置
图示几个参数是根据正点原子例程参数配置的,大家可以根据自己的需要进行调整。
接下来,就可以进行数据的读取了,主要用到2个函数,顾名思义,第一个是用来读取加速度数据的,第二个是用来读取陀螺仪数据的,需要输入两个参数,参数说明如下,这里我们定义两个结构体,用来传入和接收数据
rt_err_t mpu6xxx_get_accel(struct mpu6xxx_device *dev, struct mpu6xxx_3axes *accel)
rt_err_t mpu6xxx_get_gyro(struct mpu6xxx_device *dev, struct mpu6xxx_3axes *gyro)
不断地读取打印传感器数值,可以看到,直接得到的数据还是有误差的,具体怎么消除或减小误差,方法就有很多了,伙伴们可以进行优化!
到这里,读取MPU6050传感器数据就实现了。 二、MQTT.FX 模拟两个设备进行发布订阅消息 首先可以到文首小飞哥提到的地址下载工具,然后一路安装就可以了,简单快速,接下来主要进行工具模拟A,B两个设备,通过MQTT协议,Onenet服务器实现互相发布、订阅消息。
我们现在OneNet服务器端添加两个设备A,B,接下来,在mqtt.fx端配置相关信息,连接至OneNet服务器,Profile Name可以自己随便取名字,type选择MQTT Broker,address填写服务器地址,小飞哥不知道这是不是野路子,根据之前的实验,连接服务器时候,控制台会有连接信息输出,也可以获得知道自己的连接的Onenet服务器地址,条条大路通罗马,只要能够获取到就OK啦,至于Client ID就是我们刚才在服务器添加的设备ID,然后下面几项默认就可以啦
接下来,在Use Cedentials选项下输入产品ID和Master-APIKey,确认点击connect,后面指示灯变绿色,表示已经连接OK
同时,我们在Onenet服务器端的设备显示已经在线,设备B配置方法相同,就不再介绍啦
最终,我们添加的设备A,B都已经在线,接下来线测试模拟设备A向模拟设备B发布主题消息,设备B订阅A的topic
模拟设备B成功订阅到模拟设备A发布的主题,测试成功,接下来测试B发布主题,A订阅消息
测试OK,模拟设备A,B互相通讯OK。
三、遥控端发布控制命令到模拟设备
前面两个模拟工具测试模型,就是我们重力感应小车控制的模型,现在我们遥控端发布控制命令到模拟设备。
首先,修改要发布的主题,名字自己随意设置哈,采集到的数据我们在遥控端处理,处理完之后只发布消息内容为前进、后退、左转、右转的命令即可,此时理论上处于同一个产品下的设备都应该能够订阅到遥控端发布的主题,下面我们进行测试:
静止不动时,收到的是stop命令
前进指令:
后退命令:
左转指令:
右转指令:
遥控端发布主题消息,模拟设备已经成功接受到,模拟设备也就是相当于小车端。
本次要分享的内容就要结束啦,希望对大家对于Onenet、MQTT的使用有帮助,多谢大家看我瞎比比!
如果你觉得对自己有帮助的话,给个赞,点个关注,点个在看,感谢前进的道路上有你的陪伴!
伙伴们可以关注ART-PI官方指导网站:
https://github.com/ART-Pi/website/tree/main/docs/tutorial
欢迎大家关注 Embeded小飞哥 ,我是小飞哥,让我快点遇到优秀的你,然后一起变得更加优秀,加油!!!