ssd1306 --- OLED 驱动

本模块提供基于 SSD1306 的 OLED 显示屏驱动。支持两种传输方式:I2C(SSD1306_I2C)和 SPI(SSD1306_SPI)。两者都从 SSD1306 继承绘图 API,后者封装了一个 framebuf.FrameBuffer1

示例:

from machine import I2C
import ssd1306

i2c = I2C(2)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
oled.fill(0)
oled.text("Hello", 0, 0)
oled.show()

class ssd1306.SSD1306(width: int, height: int, external_vcc: bool)

SSD1306 OLED 显示屏的基类。子类必须初始化 self.framebuf 并提供 write_cmdwrite_datawrite_framebufpoweron 方法。

参数:

  • width —— 显示宽度(以像素为单位)。

  • height —— 显示高度(以像素为单位,必须是 8 的倍数)。

  • external_vcc —— 若使用外部 VCC 电源则为 True,若启用内部电荷泵则为 False

实例属性:

  • width —— 显示宽度(以像素为单位)。

  • height —— 显示高度(以像素为单位)。

  • external_vcc —— 外部 VCC 标志。

  • pages —— 8 像素高的页数(height // 8)。

init_display() None

向显示屏发送初始化命令序列、清空帧缓冲区并刷新。由 __init__ 自动调用。

poweroff() None

关闭显示屏(睡眠模式)。

contrast(contrast: int) None

设置显示对比度。

  • contrast —— 对比度值,范围为 0--255

invert(invert: int) None

反转显示颜色。

  • invert —— 0 表示正常输出,1 表示反转输出。仅使用最低有效位。

show() None

将内部帧缓冲区刷新到显示屏。

fill(col: int) None

用单一颜色填充整个帧缓冲区。

  • col —— 颜色值(0 表示熄灭,1 表示点亮)。

pixel(x: int, y: int, col: int) None

设置单个像素的颜色。

  • x —— 列坐标。

  • y —— 行坐标。

  • col —— 颜色值(01)。

scroll(dx: int, dy: int) None

按给定偏移量平移帧缓冲区内容。移出边界的像素将丢失;空出的像素保持不变。

  • dx —— 水平平移量(以像素为单位)。

  • dy —— 垂直平移量(以像素为单位)。

text(string: str, x: int, y: int, col: int = 1) None

使用内置的 8x8 字体绘制字符串。

  • string —— 要绘制的文本。

  • x —— 起始列坐标。

  • y —— 起始行坐标。

  • col —— 前景颜色(默认为 1)。

class ssd1306.SSD1306_I2C(width: int, height: int, i2c: machine.I2C, addr: int = 0x3C, external_vcc: bool = False)

I2C 连接的 SSD1306 驱动。继承自 SSD1306

参数:

  • width —— 显示宽度(以像素为单位)。

  • height —— 显示高度(以像素为单位)。

  • i2c —— 一个已初始化的 machine.I2C(或兼容)对象。

  • addr —— 7 位 I2C 设备地址(默认为 0x3C)。

  • external_vcc —— 使用外部 VCC 时为 True,使用内部电荷泵时为 False

write_cmd(cmd: int) None

通过 I2C 向显示屏发送单个命令字节。

write_data(buf: bytes) None

通过 I2C 向显示屏发送一缓冲区的像素数据。

class ssd1306.SSD1306_SPI(width: int, height: int, spi: machine.SPI, dc: machine.Pin, res: machine.Pin, cs: machine.Pin, external_vcc: bool = False)

SPI 连接的 SSD1306 驱动。继承自 SSD1306。使用固定的 10 MHz SPI 时钟速率。

参数:

  • width —— 显示宽度(以像素为单位)。

  • height —— 显示高度(以像素为单位)。

  • spi —— 一个 pyb.SPI(或兼容)对象。

  • dc —— 数据/命令选择引脚。

  • res —— 复位引脚。

  • cs —— 片选引脚。

  • external_vcc —— 使用外部 VCC 时为 True,使用内部电荷泵时为 False

write_cmd(cmd: int) None

通过 SPI 向显示屏发送单个命令字节。

write_framebuf() None

通过 SPI 将整个帧缓冲区传输到显示屏。

poweron() None

切换复位线以给显示屏上电。

常量

ssd1306.SET_CONTRAST: int

命令 0x81 —— 设置显示对比度。

ssd1306.SET_ENTIRE_ON: int

命令 0xA4 —— 从 RAM 内容恢复显示。

ssd1306.SET_NORM_INV: int

命令 0xA6 —— 正常/反相显示选择。

ssd1306.SET_DISP: int

命令 0xAE —— 显示开/关。

ssd1306.SET_MEM_ADDR: int

命令 0x20 —— 内存寻址模式。

ssd1306.SET_COL_ADDR: int

命令 0x21 —— 列地址范围。

ssd1306.SET_PAGE_ADDR: int

命令 0x22 —— 页地址范围。

ssd1306.SET_DISP_START_LINE: int

命令 0x40 —— 显示起始行。

ssd1306.SET_SEG_REMAP: int

命令 0xA0 —— 段重映射。

ssd1306.SET_MUX_RATIO: int

命令 0xA8 —— 复用比率。

ssd1306.SET_COM_OUT_DIR: int

命令 0xC0 —— COM 输出扫描方向。

ssd1306.SET_DISP_OFFSET: int

命令 0xD3 —— 显示偏移。

ssd1306.SET_COM_PIN_CFG: int

命令 0xDA —— COM 引脚硬件配置。

ssd1306.SET_DISP_CLK_DIV: int

命令 0xD5 —— 显示时钟分频比 / 振荡器频率。

ssd1306.SET_PRECHARGE: int

命令 0xD9 —— 预充电周期。

ssd1306.SET_VCOM_DESEL: int

命令 0xDB —— VCOMH 取消选择电平。

ssd1306.SET_CHARGE_PUMP: int

命令 0x8D —— 电荷泵配置。