树莓派如何连接使用 IIC(I2C) OLED 显示屏
树莓派如何连接使用 IIC(I2C) OLED 屏
I2C 是用于将低速外围设备连接到计算机和嵌入式系统的多 设备总线。 Raspberry Pi 的 GPIO 接头上支持此接口,这是连接传感器和设备的好方法。 配置完成后,您可以连接多个设备,而无需使用接头 连接器上的其他引脚。
启用 IIC(I2C) 接口
Raspbian 系统默认禁用了 I2C 接口,连接 OLED 显示屏之前必须启用 I2C 。有两个方法可以启用 I2C:
-
在命令行输入
sudo raspi-config
- 打开 raspi-config 的配置界面,选择 " Interface Options "
- 选择 " I2C "
- 启动 I2C ,重启树莓派
- 如果使用树莓派桌面系统,则可以在图形界面启用 I2C
修改 I2C 接口速度
修改树莓派默认的 I2C 总线速度,有利于提高显示性能。所以可以将树霉派的 I2C 总线速度提高到硬件支持 的最高值。
可以按以下步骤操作:
-
打开文件
/boot/config.txt
-
找到字符串 "
dtparam=i2c_arm=on
" ,在后面添加 "
,i2c_arm_baudrate=400000
" > 最终结果为: >
dtparam=i2c_arm=on,i2c_arm_baudrate=400000
-
保存
/boot/config.txt
重启树莓派。
关于树莓派的 I2C 波特率
根据技术文档 BCM2835 第28页的说明,树莓派有 fast-mode 驱动,速度可以达到 400Kb/s 。因为可以将 I2C 总线速度设置为100000~400000之间。默认为100000。
将树莓派与 OLED 显示屏连接
这里我使用的是4针的 OLED 显示屏(据TB卖家说型号是 ssd1315,但网络上讨论最多的型号是 ssd1306)。 先将 OLED 屏的4针(SCL, SDA, VCC, GND)与树莓派连接好。如下图所示:
\begin{array}[b] {|c|c|} \hline OLED 显示屏 Pin & 树莓派 Pin & 说明 \\ \hline VCC & 1* & 3.3V \\ \hline Gnd & 14** & Ground \\ \hline SCL & 5 & I2C SCL \\ \hline SDA & 3 & I2C SDA \\ \hline \end{array}\\
* 树莓派的 Pin 1 和 Pin 17 都可以提供 3.3V 供电
** 树莓派的 Pin 6, 9, 14, 20, 25, 30, 34, 39 都可以连接 GND
确认连接成功
安装
i2c-tools
检查 OLED 显示屏是否连接成功。
-
i2cdetect -y 1
上面说明树莓派检测到的 OLED 的地址为
3C
。对于旧版本的树莓派,如果没有看到地址,可以尝试使用命令
i2cdetect -y 0
检测。
安装 OLED Python 库
这里我使用的是 [adafruit-circuitpython-ssd1306] 这个 Python 库。网络上的文章基本都是讨论使用 Adafruit-Python-SSD1306 , 但是官方说明 Adafruit-Python-SSD1306 已经停止维护。
sudo pip3 install adafruit-circuitpython-ssd1306
运行示例
从 GitHub 上克隆示例 Adafruit_CircuitPython_SSD1306
运行示例
python3 examples/ssd1306_stats.py
在显示屏上,会看到:
小结
- luma.oled 也可以用于控制 OLED 显示。但是用我这块 无名显示屏没有成功点亮,所以本文中没有给出例子。
-
在运行 Adafruit_CircuitPython_SSD1306 时
- 发现例子中使用的地址是 3D 而我的 4B 检测到的地址是 3C 。猜想不同 OLED 和树莓派 可能地址有所不同。记得使用时根据实际更改。
- 示例中都定义了一个 RST 键 board.D4 。因为我的装备简陋,没有 RST ,所以实际运行时也 是把 RST 注释了才成功运行的。