lxz365

1 查看I2C设备是否启动,使用命令  ls /dev |grep i2c

 

 

2 如果I2C设备没有启动,需要先使能树莓派I2C, sudo raspi-config 选择 interfacing Options->I2C->yes启动i2c内核驱动。

 

 注: 也可以通过编辑/boot/config.txt文件,加入一下一行内容:

dtparam=i2c1=on
dtparam=i2c_arm=on

 

3  使用 lsmod 命令可以看到i2c bcm2835

 

 

4  插上I2C设备,检查是否可以读到设备,可以通过I2C工具

 

5 C语言编程

三种方式可以实现对I2C操作,分别是:

方式一:使用bcm2835驱动模块,通过引入头文件: #include <bcm2835.h>  

方式二:基于wiringPi库的驱动库,相关头文件:

  1. #include <wiringpi.h>
  2. #include <wiringpii2c.h>

方式三:sysfs方式,个人比较推荐,比较linux

i2c设备驱动的头文件, 位于 /usr/include/linux/i2c-dev.h 

#include < linux/i2c-dev.h> 

 例子:

#include <linux i2c-dev.h>
#include <errno.h>
#define I2C_ADDR 0x20
#define LED_ON  0xEF
#define LED_OFF 0xFF
int main (void) {
    int value;
    int fd; 
   
    fd = open("/dev/i2c-1", O_RDWR);
    if (fd < 0) {
        printf("Error opening file: %s\n", strerror(errno));
        return 1;
    }   
    if (ioctl(fd, I2C_SLAVE, I2C_ADDR) < 0) {
        printf("ioctl error: %s\n", strerror(errno));
        return 1;
    }   
    while(1)
    {   
        if(value == LED_ON)value = LED_OFF;
        else value = LED_ON;
        if( write( fd , &value, 1 ) != 1) {
            printf("Error writing file: %s\n", strerror(errno));
        }    
        usleep(1000000); 
    }
    return 0;
}

 

分类:

技术点:

相关文章: