| ESP32 教學 | MicroPython | I2C OLED 顯示文字| 208 |

OLED 顯示模組也是在嵌入式系統中很多人會使用的顯示模組,通常傳輸介面會有 I2C 與 SPI 兩種,本文就來瞭解一下如何在 MicroPython 的平台上,實際透過 I2C  OLED 模組顯示文字或數字。

1. I2C OLED顯示模組

在 DIY 或 Maker 的市場中,大家最常用的 OLED 可以分為兩個尺寸– 0.96 吋跟 0.91 吋,兩者差別就在於解析度,0.96 吋的為 128×64 像素,0.91 吋為 128×32 像素,主要的驅動 IC 都是 SSD1306 ,相較之前提到的 LCD1602 文字型顯示模組, OILED 的顯示效果更為漂亮,功能除了文字外也可以顯示單色圖片,操作上就更為多元,也就吸引一些預算較高的專案會傾向採用這樣的方案。

通常在 SSD1306 OLED 模組都會有內建的通訊協定,像 I2C 或 SPI 等,當然也會有兩者都有的,電壓則是 3.3V~5V 通用,端看使用者的控制器是 5V UNO或 3.3V ESP32 都可,OLED 選購上還有單色或雙色的差別,單色就是整個螢幕是單色顯示,但雙色並不是指螢幕每個像素都可以有雙色,其實就是整個螢幕分成兩個部分,上層顯示某一單色(常見是黃色),下層顯示另一色(如藍色),這樣的配色在實務上就是將常駐的功能放在上層顯示,操作的功能方在下層主要區塊,可以提供更直觀的使用者體驗,各位可以看一下手邊的手機介面就可以瞭解這樣的感覺。

2. 下載 SSD1306 OLED Module

在有 OLED 模組的基本知識後,我們現在來看看在 ESP32 平台中如何操作。在Micropython 的官網的 Github 專案中,已有內建關於 SSD1306的 upython driver,只要下載到 ESP32 內就可以操作使用,完整步驟如下:

Step1: 到 MicroPython Github網站,下載  ssd1306.py 檔案。https://github.com/micropython/micropython/tree/master/drivers/display

Step2: 將下載的檔案上傳到 ESP32 平台(這邊使用 mpfshell lite,也可用 ampy 或 Thonny IDE)

3. 使用OLED 顯示文字

$ 電路連接

我們再來把對應的電路接上,這邊一樣使用預設的硬體 id=1的腳位,SCL=GPIO25、SDA=GPIO26(可參考 207 micropython lcd1602),並接上 3.3V 與 GND,完整接線圖如下:

I2C OLED

$ 程式範例

現來看一個顯示指定文字在 OLED 模組的範例:

import ssd1306
from machine import Pin, I2C
hw_i2c1 = I2C(1, freq=200000)        
oled096=ssd1306.SSD1306_I2C(128, 64, hw_i2c1)
oled096.text("HELLO JIMI !!",0,0)
oled096.show()

程式解說如下:

import ssd1306
from machine import Pin, I2C
hw_i2c1 = I2C(1, freq=200000)

一開始匯入 ssd1306 模組與基本的 I2C、Pin 模組,並建立起 I2C 的物件 。

oled096 =ssd1306.SSD1306_I2C(128, 64, hw_i2c1)`

這個程式為建立為 oled096 物件,第 1 個參數與第 2 個參數設定為 OLED 模組的像素,第 3 個參數為 I2C 的物件名稱。

oled096.text("HELLO JIMI !!",0,8)
oled096.show()

ssd1306.py 這個模組的顯示邏輯各位可以想像成兩個步驟,第一步將想要顯示的資料『寫入』顯示記憶體中,第二步透過 .show() 這個方法顯示到螢幕上。

所以 .text 這個方法就是將字串寫入模組內,帶入的參數分別是 字串、X的起始位置、Y的起始位置,實際的像素位置可以參考下圖:

我們現在已經知道 0.96 吋 OLED 的像素位置後,各位好奇在這個 micropython ssd1306.py 模組內,每個字元是由幾個像素組成的嗎?答案就是 8×8 個像素,也就是說如果我們如果使用  .text 這個方法去顯示文字或數字,每行最多可以顯示16(128/8)個字元,最多可以顯示 8 行(64/8)! 以一般的顯示資訊來說,應該很足夠。

$ OLED其他操作方法

因為這個 ssd1306.py 模組是沿用 MicroPython 內建的 framebuf 改寫來的,除了可以顯示文字或數字外,下面也列出一些常用的方法給各位朋友參考:(oled096 為 ssd1306 的物件名)

oled096.invert(1)		#反轉螢幕畫面

這個方法為將欲顯示的文字與畫面進行反白。

oled096.fill(0)			#清除螢幕資訊

這個方法可以清除螢幕的顯示資訊,如果刮號內填 1可以將螢幕像素填滿。

oled096.pixel(x,y,1)

這個方法就是根據之前所提到 pixel 位置圖,將 XY 位置的像素點亮(填 1)或熄滅(填 0),而想要顯示一個簡單的圖形,可以利用點陣圖的像素相對位置與程式迴圈結合,將圖案顯示在 OLED 屏幕上。

4. 結語

Micropython 這個 ssd1306.py 模組,其實除了上述的 i2c 類別外,也同時內建 spi 的類別,也就是如果手邊的 OLED 模組是 SPI 介面的話,只要將 SPI 的 4 條訊號線與 ESP32 連接好,在程式建立起 SPI 的物件後,後續螢幕操作方法就雷同了。今天的內容就先到這邊,如果使用上遇到什麼問題,歡迎在下面留言給我~ 順便跟各位預告下篇主題 — 將是如何使用 OLED 模組顯示圖案或 LOGO ,敬請期待!

↓↓↓↓↓↓賣場連結↓↓↓↓↓↓

歡迎大家有需要的話,可以多多支持一下我們的蝦皮賣場喔! 😀 

吉米家官方店-創客機器人材料專賣 https://shopee.tw/jimirobot.tw

Follow JIMI哥 Twitter : https://twitter.com/jimirobot  <–得到最新文章通知

發佈留言

Close Menu