目錄
說明
后附進階玩法:顯示中文,外加簡單庫實現
官方模塊使用
使用樣例
方法說明
下面是繪圖支持的方法
進階玩法,顯示中文
方法,對漢字取字模,然后按像素對字模進行顯示
說明
circuitpython8.x使用iic接口驅動四線1306屏幕,屏幕參數128x64,由于屏幕是單色,所以衍射只用兩種,程序涉及的顏色參數統一為:1白色,0黑色
后附進階玩法:顯示中文,外加簡單庫實現
需要的庫博主已經上傳
官方模塊使用
使用樣例
framebuf、ssd1306、font5x8三個文件需要上傳到指定位置,font16x16ch為進階玩法需要額外引入的文件,正常使用時不需要該文件
樣例代碼
import board
import busio
import adafruit_ssd1306# Create the I2C bus interface.
#i2c = board.I2C() # uses board.SCL and board.SDA,return busio.I2C singal obj
i2c = busio.I2C(board.GP1, board.GP0) # Pi Pico RP2040# Create the SSD1306 OLED class.
display_width = 128
display_height = 64
display = adafruit_ssd1306.SSD1306_I2C(display_width, display_height, i2c)
# You can change the I2C address with an addr parameter:
# display = adafruit_ssd1306.SSD1306_I2C(display_width, display_height, i2c, addr=0x31)# fills display with black pixels clearing it
display.fill(0)
display.show()# Set a pixel in the origin 0,0 position.
display.pixel(0, 0, 1)
# Set a pixel in the middle 64, 16 position.
display.pixel(64, 16, 1)
# Set a pixel in the opposite 127, 31 position.
display.pixel(127, 31, 1)
display.text('hello,wrld',50,0,1)
display.show()
效果
方法說明
i2c = busio.I2C(board.GP1, board.GP0) 指定使用的SCL和SDA引腳,參數格式(SCL,SDA)
display_width = 128
display_height = 64
display = adafruit_ssd1306.SSD1306_I2C(display_width, display_height, i2c)初始化屏幕對象,如果報錯找不到設備,可以在后面的addr參數設置iic邏輯地址
# You can change the I2C address with an addr parameter:
# display = adafruit_ssd1306.SSD1306_I2C(display_width, display_height, i2c, addr=0x31)
display.fill(0)設置全屏黑色,參數列表:(顏色)
display.show()顯示效果生效,注意如果在繪制屏幕后不使用show,顯示效果不生效,fill方法除外
下面是繪圖支持的方法
rotation顯示器屬性的旋轉設置,可以是(0、1、2、3)之一,缺省設置值為0
display.rotation=0默認參數為0
circle(center_x, center_y, radius, color)在給定的中點位置、半徑和顏色處畫一個圓。 該方法僅繪制 1 像素的輪廓
fill(color)用指定的顏色填充
hline(x, y, width, color)從起始坐標(x,y)繪制一條水平線,直至給定長度width
vline(x, y, height, color)繪制一條起點為(x,y)的垂直線,直至給定長度width
line(x_0, y_0, x_1, y_1, color)繪制一條起點到終點的線段
pixel(x, y, color)將指定的像素設置為給定的顏色
rect(x, y, width, height, color, *, fill=False)在給定的位置、大小和顏色處繪制一個矩形。該方法僅繪制一個1像素的輪廓,fill值確定是否填充內部,缺省不填充
scroll(delta_x, delta_y)在 x 和 y 方向上移動 framebuf,注意只是將源buf參數進行偏移,源位置的像素參數并沒有被刷新
text(string, x, y, color, *, font_name='font5x8.bin', size=1)將文本以可變大小放置在起點為(x,y)的屏幕上,文本大小size缺省值為1,字體庫font_name缺省為font5x8,文本內部支持轉義字符’\n'換行
進階玩法,顯示中文
方法,對漢字取字模,然后按像素對字模進行顯示
取模方法,在線取模網站,本文的字模配置:尺寸為16x16,字節大小8bit,字高16,每字占2列,字體宋體abc。
后面編寫的庫基于該字體尺寸,針對128x64尺寸1306屏幕定制,讀者可自行修改以使用其他尺寸,本庫支持最大8x4共32個漢字顯示,下面是對庫文件的函數說明
Ssd130yan28x64_Init(SDA: Pin,SCL: Pin)
功能:初始化并返回一個1306iic對象,參數(board.SDA,board.SCL)
Decode16x16_Bytes_To_Pixel(data: tuple,x: int,y: int)
功能:顯示字模到屏幕上,data字模數組為一維數組,支持單行顯示數組包含的多個字模數據,單行最大8字
Draw_Sent(word: str,x: int,y: int)
功能:顯示指定字符串中文到屏幕,支持自動換行,最大支持顯示32字符,多出部分不顯示
模塊導入同上圖配置
樣例代碼
import board
import busio
import adafruit_ssd1306
from font16x16ch import Ssd1306_128x64_Init,Decode16x16_Bytes_To_Pixel,Draw_Sentdisplay=Ssd1306_128x64_Init(board.GP0,board.GP1)
# Decode16x16_Bytes_To_Pixel(data,x=0,y=0)
Draw_Sent('鍥而不舍金石可鏤',0,0)
# for i in range(8):
# display.pixel(i,0,0x21 & 1<<(7-i))
display.show()
可以調用Decode16x16_Bytes_To_Pixel繪制,但是注意不能超過7字,不然會因為變量太大導致棧溢出
data=( 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x10, 0x84, 0x7f, 0xfc, 0x00, 0x00, 0x10, 0x10, 0x10, 0x84, 0x02, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x84, 0x04, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x84, 0x1f, 0xf0, 0x00, 0x00, 0x10, 0x10, 0x10, 0x84, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x10, 0x84, 0x11, 0x10, 0xff, 0xfe, 0x10, 0x10, 0x10, 0x84, 0x11, 0x10, 0x00, 0x00, 0x1f, 0xf0, 0x10, 0x84, 0x11, 0x10, 0x00, 0x00, 0x10, 0x10, 0x10, 0x84, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x84, 0x11, 0x10, 0x00, 0x00, 0x08, 0x20, 0x10, 0x84, 0x12, 0x90, 0x00, 0x00, 0x08, 0x10, 0x20, 0x84, 0x02, 0x40, 0x00, 0x00, 0x10, 0x08, 0x20, 0x84, 0x04, 0x20, 0x00, 0x00, 0x20, 0x04, 0x40, 0x04, 0x18, 0x10, 0x00, 0x00, 0x40, 0x04, 0x80, 0x04, 0x60, 0x08)
import board
import busio
import adafruit_ssd1306
from font16x16ch import Ssd1306_128x64_Init,Decode16x16_Bytes_To_Pixel,Draw_Sentdisplay=Ssd1306_128x64_Init(board.GP0,board.GP1)
Decode16x16_Bytes_To_Pixel(data,x=0,y=0)
# Draw_Sent('鍥而不舍金石可鏤',0,0)display.show()