TA的每日心情 | 开心 2018-9-18 07:18 |
---|
签到天数: 18 天 连续签到: 1 天 [LV.4]偶尔看看III
|
上一篇讲的是使用 I2C TOOLS工具来检测和读取MPU6050的值,这一篇讲如何使用wiringPi的I2C读取mpu6050
上一篇文章地址:https://www.cirmall.com/bbs/thread-44712-1-1.html
第一步:使用wiringPi前需要先下载和安装:
下载wiringPI- git clone https://github.com/BPI-SINOVOIP/BPI-WiringPi.git -b BPI_M2
复制代码 安装:- cd BPI-WiringPi
- chmod +x ./build
- 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库:
•M2 上只使用了i2c-1和i2c-2, 这里判断直接返回3了。
•修改wiringPi.h
#define BPVER 3 改成 #define BPVER 2
改好后,加上代码就能跑了,直接看输出结果:
代码比较简单,如下:- #include <stdio.h>
- #include <wiringPi.h>
- #include <wiringPiI2C.h>
- int MPU6050_ADD= 0x68;
- int main(){
- int fd;
- short int ax,ay,az,tmp,gx,gy,gz;
- printf("This is the MPU6050 test!\n");
- wiringPiSetup();
- pinMode(8,I2C_PIN);
- pinMode(9,I2C_PIN);
- if((fd=wiringPiI2CSetup(MPU6050_ADD))<0){
- printf("can't find i2c!!\n");
- return fd;
- }
- wiringPiI2CWriteReg8(fd,0x6B,00);
- while(1){
- ax=wiringPiI2CReadReg8(fd,0x3B)<<8|wiringPiI2CReadReg8(fd,0x3C);
- ay=wiringPiI2CReadReg8(fd,0x3D)<<8|wiringPiI2CReadReg8(fd,0x3E);
- az=wiringPiI2CReadReg8(fd,0x3F)<<8|wiringPiI2CReadReg8(fd,0x40);
- gx=wiringPiI2CReadReg8(fd,0x43)<<8|wiringPiI2CReadReg8(fd,0x44);
- gy=wiringPiI2CReadReg8(fd,0x45)<<8|wiringPiI2CReadReg8(fd,0x46);
- gz=wiringPiI2CReadReg8(fd,0x47)<<8|wiringPiI2CReadReg8(fd,0x48);
- printf("ax=%d ay=%d az=%d\n",ax,ay,az);
- printf("gx=%d gy=%d gz=%d\n",gx,gy,gz);
- delay(100);
- }
- return 0;
- }
复制代码 |
|