from machine import Pin, I2C
import ssd1306
import framebuf
# 初始化 I2C 和 OLED
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
# 16x16 點陣字模 (以 Unicode 轉換)
font_data = {
"資": [
0x41,0x00,0x21,0xFC,0x2A,0x44,0x14,0x48,0x20,0xA0,0xE1,0x10,0x26,0x0E,0x3F,0xF4,
0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x0C,0x20,0x30,0x10
],
"管": [
0x10,0x40,0x1F,0x7C,0x28,0x90,0x45,0x08,0x01,0x00,0x7F,0xFE,0x40,0x02,0x9F,0xE4,
0x10,0x20,0x1F,0xE0,0x10,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x00
],
"四": [
0x00,0x00,0x00,0x04,0x7F,0xFE,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
0x44,0x44,0x44,0x44,0x48,0x3C,0x50,0x04,0x40,0x04,0x7F,0xFC,0x40,0x04,0x00,0x00
],
"陳": [
0x00,0x40,0x78,0x40,0x4B,0xFC,0x50,0x40,0x53,0xFC,0x62,0x44,0x53,0xFC,0x4A,0x44,
0x4B,0xFC,0x48,0x40,0x69,0x50,0x52,0x48,0x44,0x46,0x48,0x44,0x40,0x40,0x40,0x40
],
"韋": [
0x01,0x00,0x01,0x00,0x3F,0xF8,0x01,0x08,0xFF,0xFE,0x00,0x00,0x1F,0xF8,0x10,0x08,
0x1F,0xF8,0x01,0x00,0x3F,0xFC,0x21,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00
],
"任": [
0x08,0x00,0x08,0x18,0x0B,0xE0,0x10,0x40,0x10,0x40,0x30,0x40,0x50,0x44,0x9F,0xFE,
0x10,0x40,0x10,0x40,0x10,0x40,0x10,0x40,0x10,0x48,0x17,0xFC,0x10,0x00,0x10,0x00
]
}
# 轉換中文字元為 FrameBuffer
def draw_chinese(oled, ch, x, y):
data = font_data.get(ch, [0x00] * 32) # 預設為空白
fb = framebuf.FrameBuffer(bytearray(data), 16, 16, framebuf.MONO_HLSB)
oled.blit(fb, x, y)
# 清除 OLED 並顯示資料
oled.fill(0)
oled.text("My Information", 10, 5)
# oled.text("--------------", 10, 15)
oled.text("411032059", 10, 15)
draw_chinese(oled, "資", 10, 25)
draw_chinese(oled, "管", 26, 25)
draw_chinese(oled, "四", 42, 25)
draw_chinese(oled, "陳", 10, 45)
draw_chinese(oled, "韋", 26, 45)
draw_chinese(oled, "任", 42, 45)
oled.show()