猛禽洛的程式筆記庫

[MicroPython] 在Raspberry PI PICO上使用SH1106 OLED螢幕

I2C介面的SH1106

本例是使用1.3吋的128 x 64解析度I2C介面的單色螢幕。

接線方式:

Raspberry PI PICOSH1106 OLED
負級接地GND
可接3.3~5.5v (本例使用3.3v)VCC
任一組I2C控制器的SCL (21)SCL
任一組I2C控制器的SDA (20)SDA

I2C控制器在Raspberry PI PICO上面有兩組,SCL與SDA只要接在任一組相同的控制器上對應的腳位即可。

再來是到官方Github下載驅動程式sh1106.py,並放到專案底下(與主程式同一資料夾即可)

https://github.com/raspberrypi/pico-micropython-examples/blob/master/i2c/1106oled/sh1106.py

主程式:

from LCD import sh1106
from machine import I2C, Pin, Timer

# 初始化 I2C 通道,這裡使用控制器0號
i2c0 = I2C(0, scl=Pin(21), sda=Pin(20), freq=1000000)
# 初始化顯示器
displayOLED = sh1106.SH1106_I2C(128, 64, i2c0)
# 翻轉螢幕指令
mirrorVertically = 0xa0

# 更新畫面資料timer
show_timer = Timer()
# 更新畫面資料tag
tag_start_show = False
# 螢幕顯示數字跳動
count = 0


# 初始化螢幕設定
def init_display():
    displayOLED.sleep(False)
    # 清空顯示器
    displayOLED.fill(0)
    # 翻轉螢幕
    displayOLED.rotate(mirrorVertically)


# 螢幕畫面顯示,會需要一段時間
def show_data():
    global count

    text1 = str(count)
    # 清空顯示器
    displayOLED.fill(0)
    # 要顯示的文字, 開始x軸, 開始y軸
    displayOLED.text("SH1106 Count", 20, 10)
    displayOLED.text(text1, 58, 30)
    # 最後顯示出來
    displayOLED.show()
    count = count+1


# 開始更新螢幕資訊
def start_show(t):
    global tag_start_show
    tag_start_show = True


def main():
    global tag_start_show

    # 每秒顯示一次畫面
    show_timer.init(mode=Timer.PERIODIC, period=1000, callback=start_show)

    # 不斷檢查Tag是否被觸發,觸發後才去執行耗時處理,避免程式卡死
    while True:
        if tag_start_show:
            show_data()
            tag_start_show = False


# 開始執行
main()

執行效果:

-END-

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *