查看: 7071|回复: 3

BPI-M2,使用wiringPi的I2C读取mpu6050

[复制链接]
  • TA的每日心情
    开心
    2018-9-18 07:18
  • 签到天数: 18 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2015-10-22 11:09:39 | 显示全部楼层 |阅读模式
    分享到:
    上一篇讲的是使用 I2C TOOLS工具来检测和读取MPU6050的值,这一篇讲如何使用wiringPi的I2C读取mpu6050
    上一篇文章地址:https://www.cirmall.com/bbs/thread-44712-1-1.html

    第一步:使用wiringPi前需要先下载和安装:
    下载wiringPI
    1. git clone https://github.com/BPI-SINOVOIP/BPI-WiringPi.git -b BPI_M2
    复制代码
    安装:
    1. cd BPI-WiringPi
    2. chmod +x ./build
    3. sudo ./build
    复制代码
    成功后就可以使用了。

    第二步:几个重要的I2C函数
    int wiringPiI2CSetup (int devId) ;
    这个函数用于初始化I2C系统和设备标识符。这个devId是你I2C设备号,你能使用i2cdetect 来查找
    这个返回值是标准的linux文件句柄,或者-1,在这种情况下,你能像平时一样查阅errno

    intwiringPiI2CWriteReg8 (int fd, int reg, int data) ;
    intwiringPiI2CWriteReg16 (int fd, int reg, int data) ;
    这俩是写8位或者16位的值进入设备寄存器

    int wiringPiI2CReadReg8(int fd, int reg) ;
    intwiringPiI2CReadReg16 (int fd, int reg) ;
    从设备读取8位或者16位的寄存器

    第三步:由于我没有使用I2C IO 扩展板,所以使用 wiringPi的时候,出现错误,查找后发现,需要修改一下wiringPi库:
    9.jpg 10.jpg
    M2 上只使用了i2c-1i2c-2, 这里判断直接返回3了。
    修改wiringPi.h
    #define BPVER 3
    改成
    #define BPVER 2

    改好后,加上代码就能跑了,直接看输出结果:
    11.jpg



    代码比较简单,如下:
    1. #include <stdio.h>
    2. #include <wiringPi.h>
    3. #include <wiringPiI2C.h>
    4. int MPU6050_ADD= 0x68;
    5. int main(){
    6.         int fd;
    7.         short int ax,ay,az,tmp,gx,gy,gz;
    8.         printf("This is the MPU6050 test!\n");
    9.         wiringPiSetup();  
    10.         pinMode(8,I2C_PIN);
    11.         pinMode(9,I2C_PIN);
    12.         if((fd=wiringPiI2CSetup(MPU6050_ADD))<0){
    13.                 printf("can't find i2c!!\n");       
    14.                 return fd;
    15.         }
    16.         wiringPiI2CWriteReg8(fd,0x6B,00);
    17.         while(1){

    18.                 ax=wiringPiI2CReadReg8(fd,0x3B)<<8|wiringPiI2CReadReg8(fd,0x3C);
    19.                 ay=wiringPiI2CReadReg8(fd,0x3D)<<8|wiringPiI2CReadReg8(fd,0x3E);
    20.                 az=wiringPiI2CReadReg8(fd,0x3F)<<8|wiringPiI2CReadReg8(fd,0x40);
    21.                 gx=wiringPiI2CReadReg8(fd,0x43)<<8|wiringPiI2CReadReg8(fd,0x44);
    22.                 gy=wiringPiI2CReadReg8(fd,0x45)<<8|wiringPiI2CReadReg8(fd,0x46);
    23.                 gz=wiringPiI2CReadReg8(fd,0x47)<<8|wiringPiI2CReadReg8(fd,0x48);
    24.                 printf("ax=%d  ay=%d  az=%d\n",ax,ay,az);
    25.                 printf("gx=%d  gy=%d  gz=%d\n",gx,gy,gz);
    26.                 delay(100);
    27.         }       
    28.         return 0;
    29. }
    复制代码
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-10-8 09:49
  • 签到天数: 430 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-10-22 21:50:59 | 显示全部楼层
    做的不错!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-8-15 09:30
  • 签到天数: 162 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-10-23 08:41:07 | 显示全部楼层
    不错不错
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-10-12 01:14:32 | 显示全部楼层
    新手 来学习   但是编译的时候  说I2C_PIN 未定义是怎么回事?  都include了
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-15 18:33 , Processed in 0.145629 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.