首先简要介绍I2C接口及I2C接口OLED显示模块,然后讲述Pico开发板I2C总线引脚及其与I2C总线OLED SSD1306显示模块的接口原理,最后给出Pico开发板控制OLED屏显示文字/图形的MicroPython程序实例。
一、I2C接口简介
I2C/IIC/I2C(Inter-Integrated Circuit,集成电路互连)总线是由PHILIPS针对微控制器需要而研制的一种两线式串行总线,适用于微控制器与外围设备芯片之间的接口连接。
I2C总线的主要特点如下:
•I2C总线最主要的优点是其简单性和有效性。
•由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。
•总线的长度可高达25英尺(约7.6m),并且能够以100Kbps的最大传输速率支持40个组件。
•I2C总线的另一个优点是支持多主机,其中任何能够进行发送和接收的设备都可以成为主机。一个主机能够控制信号传输和时钟频率。当然,在任何时间点上只能有一个主机。
I2C接口是嵌入式系统中常用的网络接口之一,它采用串行通信方式将微控制器连接到系统总线,它能以100Kbps的标准传输速率支持40个组件,全速传输速率400Kbps,高速传输速率达3.2Mbps。
关于I2C接口技术的详细介绍,可参阅本人博文“树莓派I2C接口技术及Python SMBus串行I2C EEPROM应用编程”,这里不再赘述。
二、OLED显示器简介
OLED显示器(Organic Light-Emitting Diode,有机发光二极管显示器)在手机、平板、电脑等智能硬件显示领域有着广泛应用,被誉为“梦幻显示器”。当电流流过有机材料时,OLED就会发光。相比于传统的LCD显示技术,OLED显示技术具有如下主要优点:OLED屏厚度可以控制在1mm以内,而LCD屏厚度通常在3mm左右,OLED屏重量更加轻盈;OLED屏幕显示视角大,功耗更低;OLED屏具有良好的低温性能,即使零下40度也能正常显示;OLED使用自发光二极管,不需要背景光源;OLED使用低压直流驱动,可以用电池点亮;OLED具有高亮度,达300流明(Lumen)以上。
三、树莓派Pico开发板I2C总线引脚
树莓派Pico开发板有2个I2C总线,它们分别是为I2C0和I2C1,图1是Pico开发板I2C总线引脚配置。从图1可以看出,Pico开发板I2C总线引脚都是重复同名的,我们只能同时使用重复同名的I2C总线中的一个。
图1 Pico I2C总线引脚
Pico开发板默认I2C总线接口及引脚如下:
•I2C0:I2C0 SCL(GP9)、I2C0 SDA(GP8);
•I2C1:I2C1 SCL(GP7)、I2C1 SDA(GP6)。
四、Pico开发板I2C OLED显示模块接口与MicroPython编程实践
实践实例:采用Pico开发板与I2C总线OLED SSD1306显示模块接口;分别编制OLED屏显示一串英文文字“Life is short, I need Pico.”并绘制几何图形的MicroPython程序。
1.硬件材料清单
(1)Pico开发板×1
(2)Micro-USB数据线×1
(3)SSD 1306 OLED显示模块×1
(4)面包板×1
(5)公对母杜邦线×4
2.Pico开发板与I2C总线OLED SSD1306显示模块接口电路原理
SSD1306显示模块是一块包含SSD1306控制驱动芯片和OLED显示屏的模块,该模块可采用3.3V或5V电源供电。其中,OLED显示屏为一块单色屏,其分辨率为128×64像素;SSD1306控制芯片为一款OLED驱动芯片,它用于控制驱动OLED屏显示并提供I2C总线接口。Pico开发板与I2C总线OLED SSD1306模块接口电路原理如图2所示。
图2 Pico开发板与SSD1306显示模块接口电路原理
3.使用MicroPython编制OLED屏显示程序示例
采用MicroPython编制OLED屏显示程序要用到第三方SSD1306库。运行Thonny,选择[Tools]→[Manage Packages…]安装OLED屏SSD1306库,安装成功后,SSD1306.py模块文件会保存到Thonny的LIB库文件夹。
(1)OLED屏显示文字串程序示例
Pico开发板控制OLED屏显示文字串程序清单(程序名:I2C_1.py)如下:
# Filename: I2C_1.py
'''
Pico控制I2C OLED屏显示文字串
'''
from machine import I2C, Pin
# 加载ssd1306模块SSD1306_I2C类
from ssd1306 import SSD1306_I2C
# 使用Pico I2C0总线接口创建i2c对象
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=100000)
# 创建oled对象:初始化OLED屏(分辨率为128×64),使用I2C总线接口
oled = SSD1306_I2C(128, 64, i2c)
oled.fill(0) # 清除OLED屏(0:背景黑色,1:背景白色)
oled.text('Life is short,', 0, 0) # 在(0,0)像素坐标显示文字串
oled.text('I need Pico.', 0, 30) # 在(0,30)像素坐标显示文字串
oled.show() # OLED执行显示
将I2C_1.py程序代码复制粘贴到Thonny IDE,点击[播放]按钮或按[F5]键执行程序后,OLED显示情况如图3所示。
图3 Pico控制OLED显示文字串
(2)OLED屏绘制几何图形程序示例
Pico开发板控制OLED屏显示几何图形程序清单(程序名:I2C_2.py)如下:
# Filename: I2C_2.py
'''
Pico控制I2C OLED屏绘制几何图形
'''
from machine import I2C, Pin
# 加载ssd1306模块SSD1306_I2C类
from ssd1306 import SSD1306_I2C
# 使用Pico IC20总线接口创建i2c对象:I2C0 SDA(GP0),I2C0 SCL(GP1),I2C总线传输频率100Kbps
i2c = I2C(0,sda=Pin(0),scl=Pin(1), freq=100000)
# 创建oled对象:初始化OLED屏(分辨率为128x64),使用I2C总线接口
oled = SSD1306_I2C(128, 64, i2c)
oled.fill(0) # 清除OLED屏
oled.pixel(63,31,1) # 在(63,31)像素坐标处画一个点
oled.line(0, 0, 31, 31, 1) # 将(0,0)像素坐标点和(31,31)像素坐标点连成直线
oled.line(0, 63, 31, 31, 1) # 将(0,63)像素坐标点和(31,31)像素坐标点连成直线
# 以OLED屏左上角(0,0)像素坐标和右下角(127,63)像素坐标绘制一个矩形
oled.rect(0,0,127,63,1)
oled.show() # OLED执行显示
将I2C_2.py程序代码复制粘贴到Thonny IDE,点击[播放]按钮或按[F5]键执行程序后,OLED显示情况如图4所示。
图4 Pico控制OLED绘制几何图形
发布日期:2023年3月24日