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 -- True 表示外部 VCC,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 -- True 表示外部 VCC,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 -- 充電泵組態。