树莓派实验日志(五)— 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]退出配置界面,如下图所示。
配置完成后,重启树莓派,使配置生效。
# sudo reboot
第二种方式,直接使用Raspberry Pi OS桌面环境的图形配置工具“Rasberry Pi Configuration”,导航至“Menu > Preferences > Raspberry Pi Configuration”开启。
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驱动OLED显示屏
1、树莓派连接OLED显示屏
OLED使用的是单色0.96英寸显示屏,它的驱动器是SSD1306,显示尺寸为128x64像素,使用I2C通信,如下图所示。
OLED屏引脚 | 树莓派引脚 |
---|---|
VCC | 1 - 3V3 power |
GND | 14 - GND |
SCL | 5 - GPIO 3(SCL) |
SDA | 3 - GPIO 2 (SDA) |
把OLED屏与树莓派连接好后,使用i2cdetect检测,可看到该OLED从设备的寄存器地址为0x3c。
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报错,根据提示,下载安装Adafruit_Python_GPIO库。
# sudo git clone http://github.com/adafruit/Adafruit_Python_GPIO.git