ESP32開發板控制OLED顯示屏
相關知識點
? I2C總線是用于設備之間通信的雙線協議,在物理層上,它由兩根線組成:SCL和SDA,分別是時鐘線和資料線,
? I2C物件使用特定的總線創建,可以在被創建時就初始化,也可以稍后再初始化,可以通過print I2C物件來查看相關的配置,
| 方法 | 說明 |
|---|---|
| machine.I2C(id=-1, *, scl, sda, freq=400000) | 構造方法,回傳一個I2C物件,默認情況下id為-1,表示這是一個軟體實作的I2C總線,如果要使用硬體I2C可以選擇0,1兩個id,scl和sda就是對應要使用的Pin物件,在使用軟體I2C時,這兩個引數一定要明確傳入, |
| I2C.init(scl, sda, *, freq=400000) | 如果創建時沒有初始化可以使用這個方法初始化 |
| I2C.scan() | 掃描在同一總線上的設備地址,范圍從0x08-0x77,會回傳一個串列, |
| I2C.readinto(buf, nack=True, /) | 從總線上讀取位元組資料寫入到buf中 |
| I2C.write(buf) | 將buf中的位元組資料寫到總線上 |
表1-1 I2C使用
? I2C還有更加細分的操作函式,但是一般沒有特殊要求的話使用這些函式就足夠了,還有這里需要提一下引數scl和sda,這兩個都是Pin型別物件,也就是用于定義引腳的物件,
ESP32-board自帶的兩個硬體I2C,除了硬體I2C,我們還可以在任意引腳上用軟體模擬I2C,這樣就方便許多了,I2C的用處很多,本實驗中使用的OLED顯示屏模塊就需要使用I2C來控制,
OLED顯示屏是利用有機電自發光二極管制成的顯示屏,其中每一個像素點就是一個led,本實驗使用0.96寸,128*64解析度的OLED顯示屏模塊,模塊引腳如圖3-2所示,我們在實驗中使用了23,19兩個引腳作資料線和時鐘線,
我們先將擴展介面板插到ESP32-board的引腳上,然后將OLED螢屏的介面插入其中一個介面上,這里使用23、19介面,這樣就連接完成了,相當的方便,
了解完I2C之后,就可以開始驅動OLED螢屏了,這里我們提供了現成的驅動檔案ssd1306.py,開發者們只要直接呼叫其中的方法即可,記得在運行程式之前把驅動檔案下載到開發板的檔案系統中,OLED的使用方法如下:
| 方法 | 說明 |
|---|---|
| SSD1306_I2C(width, height, i2c, addr=0x3c,…) | 構造方法,回傳SSD1306_I2C 物件,通過這個物件我們就可以實作OLED螢屏的顯示控制,width和height分別表示螢屏的寬高的像素大小,i2c是使用的I2C物件,addr是I2C設備的地址,默認為0x3c |
| SSD1306_I2C.text(str, x, y) | 將字串str寫入到內部緩沖區的指定位置 |
| SSD1306_I2C.show() | 顯示緩沖區的內容 |
| SSD1306_I2C.fill(col) | 螢屏填充為一種顏色,col=0填充黑色,1填充白色 |
? 使用以上幾種方法我們就可以在螢屏上顯示想要顯示的內容了,不過由于編碼的原因,暫時沒有直接顯示中文的方式,但是我們后面的綜合實驗中會講解如何間接顯示中文,
實驗內容
? 將擴展介面插到開發板上,OLED顯示屏模塊連接到對應介面,還要講驅動檔案ssd1306.py下載到ESP32-board中,在main.py中,我們先匯入模塊,然后創建對應引腳的I2C物件,使用創建的I2C物件創建SSD1306_I2C物件,接著我們就可以控制OLED螢屏的顯示了,以下是實作代碼:
# 匯入I2C,Pin和SSD1306_I2C
from machine import I2C, Pin
from ssd1306 import SSD1306_I2C
# 創建對應引腳的I2C物件
i2c = I2C(sda=Pin(23), scl=Pin(19))
# 創建SSD1306_I2C物件
# 地址是0x3c,不同的廠商可能地址不同,修改成自己的地址即可
# 也可以使用scan方法掃描地址
oled = SSD1306_I2C(128, 64, i2c, addr=0x3c)
oled.text(“Hello World!”, 0, 0)
oled.text(“MicroPython”, 0, 16)
oled.text(“It’s a test”, 0, 32)
# 顯示內容
oled.show()
結果顯示
? 程式運行以后,我們可以看到螢屏上顯示出我們想要的文字,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/286681.html
標籤:其他
