RT_Thread sensor框架下的MPU6050,IIC读取

2023年7 月 10日 RT-Thread Studio 版本: 2.2.6 可用

这是一个小白测试用记录,大佬互喷,欢迎指出问题
整体来说,只有一个find找名字是个坑

建立工程

略,后续补充

屏蔽cubemax生成的代码

略,后续补充

打开需要的片上外设

略,后续补充

使用rt_thread settings添加mpu6050软件包

略,后续补充

如何启动程序

添加6050后会在packges包出现mpu6xxx-v1.1.1
添加6050后会在packges包出现mpu6xxx-v1.1.1
打开README_ZH.md
在文章中会有这么一段程序

初始化示例


#include "sensor_inven_mpu6xxx.h"
int rt_hw_mpu6xxx_port(void)
{
    struct rt_sensor_config cfg;
    cfg.intf.dev_name = "i2c1";
    cfg.intf.user_data = (void *)MPU6XXX_ADDR_DEFAULT;
    cfg.irq_pin.pin = RT_PIN_NONE;
    rt_hw_mpu6xxx_init("mpu", &cfg);
    return 0;
}
INIT_APP_EXPORT(rt_hw_mpu6xxx_port);

将这一段代码添加到main函数之前
main函数中不需要启动,因为INIT_APP_EXPORT这个函数是自启动,需要了解可用bing一下,有文章讲解很详细,这里只做应用
下一步应当要读取MPU6050的值,但在此之前,先下载程序,在终端中查看是否有6050这个设备

终端中查看find要的name

这里取用了一个投机取巧的办法,自己不太会这个rt_thread sensor ,在初始化中,并不清楚自己初始化的函数为哪一个,导致使用官方的
rt_device_t rt_device_find(const char name);*
查找代码时,一直找不到 const char name我一直以为我的设备名称为
rt_hw_mpu6xxx_init(“mpu”, &cfg); 中的 “mpu”,但实际上并不是,这个 const char
name 名字需要在终端中查看
在这里插入图片描述
终端这里输入list_device 在终端中会弹出已经注册好的三个mpu函数 分别为 mag_mpu,
gyro_mpu和acce_mpu三个函数,可以看到type中显示为sensor Device 复制下来这三个函数。

在main函数中 代码中添加一个做测试

#define SENSOR_DEVICE_NAME    "gyro_mpu"    /* 传感器设备名称 */

rt_device_t dev;         /* 传感器设备句柄 */
/* 根据设备名称查找传感器设备,获取设备句柄 */
dev= rt_device_find(SENSOR_DEVICE_NAME);
if (dev==RT_NULL) {
            printf("MPU6050_find file.....\n");
            return -RT_ERROR;
        }

此时find函数已经完成

OPEN 6050

此时照着RT的文档中心看就可以,这里直接抄过来,添加到main函数中

rt_device_open(dev, RT_DEVICE_FLAG_RDONLY);//这里是以轮询的方式进行读取

读取6050

rt_device_read(dev, 0, &data, 1)

打印出数据

rt_kprintf("acce: x:%5d, y:%5d, z:%5d, timestamp:%5d\n", data.data.acce.x, data.data.acce.y, data.data.acce.z, data.timestamp);

最终main中是怎么样的

这里直接把文档中心的代码抄过来,现在就可以直接读取到数据了

#define SAMPLE_SENSOR_NAME       "gyro_mpu"  /* 传感器设备名称 */
#include "sensor_inven_mpu6xxx.h"
int rt_hw_mpu6xxx_port(void)
{
    struct rt_sensor_config cfg;
    cfg.intf.dev_name = "i2c1";
    cfg.intf.user_data = (void *)MPU6XXX_ADDR_DEFAULT;
    cfg.irq_pin.pin = RT_PIN_NONE;
    rt_hw_mpu6xxx_init("mpu", &cfg);
    return 0;
}
INIT_APP_EXPORT(rt_hw_mpu6xxx_port)
int main(void)
{
    rt_device_t dev;
    struct rt_sensor_data data;

    /* 查找传感器设备 */
    dev = rt_device_find(SAMPLE_SENSOR_NAME);
    /* 以只读及轮询模式打开传感器设备 */
    rt_device_open(dev, RT_DEVICE_FLAG_RDONLY);

    if (rt_device_read(dev, 0, &data, 1) == 1)
    {
        rt_kprintf("acce: x:%5d, y:%5d, z:%5d, timestamp:%5d\n", data.data.acce.x, data.data.acce.y, data.data.acce.z, data.timestamp);
    }
    rt_device_close(dev);//如果是要一直读取,将if加入while中 屏蔽掉close这个代码

    return RT_EOK;
}

!这里插入

在这里只添加了一个函数,想要读取其他值应该要添加其他两个?

不通过sensor框架直接读取mpu6050数据

https://github.com/RT-Thread-packages/mpu-6xxx
在这个文档里面,但感觉不添加到sensor框架,那不是移植的时候变得更麻烦了?复制使用过了,没有问题可以直接使用。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值