2021年8月21日星期六

[MicroPython] STM32 + MicroPython + SSD1306 基本使用

 今天來測試 SSD1306 OLED 顯示模組,SSD1306 是透過 I2C 來控制。所以在我們 DIY Pyboard 連接 VCC,GND,SCL,SDA。為了使用麵包板方便連接,我使用 PB3 (SDA) ,PB10(SCL) 這一組來使用。以這次設計的 板子架構來說是 第 2 組 I2C。


準備

STM32_MiniBoard x 1
SSD1306                 x 1
麵包板                    x 1
若干杜邦線


接線

MicroPython



開始

在 MicroPython 裡已經有 SSD1306 驅動程式,在源碼 Drivers/display 目錄裡。不過,在這我自行編譯的 MicroPython firmware 已經加入 SSD1306 驅動,所以不用另外拷貝出來使用。首先我們將 開啟 Thonny 並且開啟 REPL 提示列。

輸入以下程式段

from machine import Pin,I2C
i2c = I2C(2)
I2C(2) 是指 第二組 I2C 通訊

我們可以測試一下
i2c.scan()

如果沒有問題,會顯示以下結果。




表示 SSD1306 的位置是 60 (為10進制, 16進制為 0x3C) ,且 I2C 接線無誤。
繼續輸入以下程式段

from ssd1306 import SSD1306_I2C
oled = SSD1306_I2C(128, 64, i2c)
oled.text("hello makdev.net",0,0)
oled.show()
實際畫面是
MicroPython













我們接著試著使用 Raspberry Pi Pico  RP2040 的 範例測試一下 source code 連結 (https://github.com/raspberrypi/pico-micropython-examples/tree/master/i2c/1306oled/i2c_1306oled_using_defaults.py)

源碼的 第 9 行 



i2c = I2C(0)
改為

i2c = I2C(2)
在 Thonny 中,使用檔案開啟功能 開啟 MicroPython Device 的方式,開啟 main.py 並將全部 Sorce code 貼上並儲存。



# Display Image & text on I2C driven ssd1306 OLED display
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import framebuf

WIDTH  = 128                                            # oled display width
HEIGHT = 32                                             # oled display height

i2c = I2C(2)                                            # Init I2C using I2C0 defaults, SCL=Pin(GP9), SDA=Pin(GP8), freq=400000
print("I2C Address      : "+hex(i2c.scan()[0]).upper()) # Display device address
print("I2C Configuration: "+str(i2c))                   # Display I2C config


oled = SSD1306_I2C(WIDTH, HEIGHT, i2c)                  # Init oled display

# Raspberry Pi logo as 32x32 bytearray
buffer = bytearray(b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00|?\x00\x01\x86@\x80\x01\x01\x80\x80\x01\x11\x88\x80\x01\x05\xa0\x80\x00\x83\xc1\x00\x00C\xe3\x00\x00~\xfc\x00\x00L'\x00\x00\x9c\x11\x00\x00\xbf\xfd\x00\x00\xe1\x87\x00\x01\xc1\x83\x80\x02A\x82@\x02A\x82@\x02\xc1\xc2@\x02\xf6>\xc0\x01\xfc=\x80\x01\x18\x18\x80\x01\x88\x10\x80\x00\x8c!\x00\x00\x87\xf1\x00\x00\x7f\xf6\x00\x008\x1c\x00\x00\x0c \x00\x00\x03\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")

# Load the raspberry pi logo into the framebuffer (the image is 32x32)
fb = framebuf.FrameBuffer(buffer, 32, 32, framebuf.MONO_HLSB)

# Clear the oled display in case it has junk on it.
oled.fill(0)

# Blit the image from the framebuffer to the oled display
oled.blit(fb, 96, 0)

# Add some text
oled.text("Raspberry Pi",5,5)
oled.text("Pico",5,15)

# Finally update the oled display so the image & text is displayed
oled.show()
點擊 Run 按鈕
MicroPython



畫面變成
MicroPython






相關文章

開始第一個 micropython 程式
STM32F4 使用 MicroPython 應用
如何安裝 PyBoard 的 Com Port


0 comments:

發佈留言