添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

树莓派实验日志(五)— I2C的使用

一、I2C的概念

I2C,Inter-Integrated Circuit 。它是一种同步、串行、半双工的通信总线。同步,即发送端和接收端要求严格同步,通信双方使用的是同一个时钟源。串行,即使用一根数据线传输,数据一位一位地传输。而半双工,指的是接收数据和发送数据不可同时进行。

嵌入式系统一般使用I2C总线来与周边的低速设备进行通信。在此,树莓派充当的是主机(Master)的角色,从机(Slave)则是周边设备,比如显示屏、传感器、继电器等。

标准的I2C需要两个信号线:

SCL(Serial Clock) :时钟线,时钟都是由master提供。 SDA(Serial Data) :双向数据线,发送数据或接收数据,收发不能同时。

二、设置树莓派的I2C

1、按步骤设置开启树莓派的I2C接口

第一种方式,使用raspi-config配置程序开启。

# sudo raspi-config

在raspi-config的图形配置界面中,通过上下键选择接口选项[5 Interface Options],在下一个界面中选择I2C选项[P5 I2C],启用后,选择[Finish]退出配置界面,如下图所示。

选择[5 Interface Options]选项
选择[P5 I2C]选项

配置完成后,重启树莓派,使配置生效。

# sudo reboot

第二种方式,直接使用Raspberry Pi OS桌面环境的图形配置工具“Rasberry Pi Configuration”,导航至“Menu > Preferences > Raspberry Pi Configuration”开启。

Enable I2C

2、 设置I2C总线速率

使用如下命令,查看当前的传输速率

# sudo cat /sys/module/i2c_bcm2835/parameters/baudrate

编辑config.txt文件,查找到包含“dtparam=i2c_arm=on”的那一行,在后面添加“,i2c_arm_baudrate=400000”,其中400000是新设置的速率,400kbit/s。

# sudo nano /boot/config.txt
dtparam=i2c_arm=on,i2c_arm_baudrate=400000

编辑完成后,保存文件并退出。

3、检测Slave设备状态

如何查看树莓派是否识别已接入的Slave设备,可通过i2c-tools工具进行检测。

# sudo apt-get install i2c-tools
# sudo i2cdetect 1

确认已成功安装后,可使用以下命令遍历这个总线,检测当前已挂在该总线上的I2C设备,并显示出被检测设备的I2C寄存器地址。如下图所示,如未挂有设备,显示为[--]。

当前I2C总线上并未挂有从设备

三、使用I2C驱动OLED显示屏

1、树莓派连接OLED显示屏

OLED使用的是单色0.96英寸显示屏,它的驱动器是SSD1306,显示尺寸为128x64像素,使用I2C通信,如下图所示。

单色0.96英寸OLED显示屏
OLED屏引脚 树莓派引脚
VCC 1 - 3V3 power
GND 14 - GND
SCL 5 - GPIO 3(SCL)
SDA 3 - GPIO 2 (SDA)


把OLED屏与树莓派连接好后,使用i2cdetect检测,可看到该OLED从设备的寄存器地址为0x3c。

OLED从设备寄存器地址

2、安装OLED的Python库

(1)为了在OLED屏上显示文字或图像,需要使用到Adafruit的Python库。

# sudo git clone http://github.com/adafruit/Adafruit_Python_SSD1306.git

进入下载的文件夹,执行命令,安装相关依赖包。

# cd Adafruit_Python_SSD1306
# sudo python3 setup.py install

(2)在Adafruit_Python_SSD1306文件夹中的examples目录下,有若干个可直接运行的示例Python文件,其中,stats.py的功能是通过调用系统的参数,以获取当前磁盘信息、CPU信息等内容。

运行stats.py报错

运行stats.py报错,根据提示,下载安装Adafruit_Python_GPIO库。

# sudo git clone http://github.com/adafruit/Adafruit_Python_GPIO.git