linux下读取MPU数据,树梅派linux编成,i2c读取mpu9250数据

最近刚买了块树梅派3b,打算重新玩下linux驱动等,正好身边有mpu9250模块,用来研究正好。

操作环境:

1.PC:FEDORA28

2.交叉编译环境

3.树莓派3b,并且系统为linux

4.mpu9250模块

5.MotionSensorExample

以上的第五点就是在github上的一份案例代码,修改一部分就可以用。

main函数在main.c,lib–I2Cdev是i2c读取的一些底层函数,不需要动这里,主要是在inv_mpu_lib目录下的inv_mpu.c,修改的主要是这里。

修改Makefile,尝试编译

先看MontionSensor目录下的Makefile

CXX=arm-linux-gnueabihf-g++

AR=arm-linux-gnueabihf-ar

CXXFLAGS=-Wall -g -O2

CXX_OPTS=-c -DMPU9250 -DMPU_DEBUG -I../libs/

省略无关代码

我用的模块是9250,所以DMPU9250 -DMPU_DEBUG,这里做出修改,如果你的是6050,就改成相应的数字。编译顺利。但是放到派上,出现了MPU init failed!经过追踪,错误是在下面的代码里。

#elif defined MPU6500

#define MPU6500_MEM_REV_ADDR (0x17)

if (mpu_read_mem(MPU6500_MEM_REV_ADDR, 1, &rev))

return 1;

if (rev == 0x1)

st.chip_cfg.accel_half = 0;

else

{

#if defined MPU_DEBUG

printf_P("Unsupported software product rev. %d.\r\n", rev);

#endif

return 1;

}

/* MPU6500 shares 4kB of memory between the DMP and the FIFO. Since the

* first 3kB are needed by the DMP, we'll use the last 1kB for the FIFO.

*/

data[0] = BIT_FIFO_SIZE_1024 | 0x8;

if (i2c_write(st.hw->addr, st.reg->accel_cfg2, 1, data))

return 1;

#endif

这里看不出到底有必要,于是将代码注释之后,顺利运行。

a6ed5646e4629172a6f9860071cbfa78.png

int main() {

char sql[512] ; //插入数据库语句

int ret;

int insert;

ret = sqlite3_open("mpu9250.db", &db);

if(ret)

{

printf("can not open database.\n");

}

else

{

printf("open database succsee.\n");

}

int i = 0;

ms_open();

while(i < 5000){

ms_update();

sprintf(sql,"insert into mpu9250 values (%d,%2.1f,%2.1f, %2.1f, %2.1f, %2.1f, %2.1f);", i, ypr[YAW] ,ypr[PITCH], ypr[ROLL],compass[0],compass[1],compass[2]);

insert = sqlite3_exec(db, sql, 0, 0, &errmsg);//插入

printf("index= %d\tyaw = %2.1f\tpitch = %2.1f\troll = %2.1f\ttemperature = %2.1f\tcompass = %2.1f, %2.1f, %2.1f\n", i,ypr[YAW], ypr[PITCH],ypr[ROLL],temp,compass[0],compass[1],compass[2]);

delay_ms(5);

i++;

}

sqlite3_close(db);

return 0;

}

为了测试获取到的数据是否准确,特地增加了数据库保存了5000条数据,并对数据进行作图看有什么效果。

b267f8df68384eb4bfd6bc98de074157.png这是磁力计AK8963的数据,看起来数据应该都是比较准确的。感谢CSDN广大牛人的博客,接下来计划对该代码改写,用spi驱动读取mpu9250的数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值