from machine import Pin, I2C
import ssd1306
import os, io
# ESP32 Pin assignment
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
class logToFile(io.IOBase):
def __init__(self, display):
self.display = display
self.width = 128 // 8 # 每行可显示的最大字符数
self.height = 64 // 8 # 能显示的最大行数
self.buffer = [""] * self.height # 初始化每行的空内容
def write(self, data):
# 解码字节数组
str_data = data.decode('utf-8')
# 分批次写入缓冲
for char in str_data:
if char == '\n' or len(self.buffer[-1]) >= self.width:
self.buffer.append("") # 追加新行
if len(self.buffer) > self.height:
self.buffer.pop(0) # 移除顶部行以保持有限行数
if char != '\n':
# 将字符添加到最后行
self.buffer[-1] += char
# 绘制屏幕内容
self.display.fill(0)
for idx, line in enumerate(self.buffer):
self.display.text(line, 0, idx * 8) # 根据字体高度设置y坐标
self.display.show()
def readinto(self, b):
return None
os.dupterm(logToFile(oled))
# 现在所有的print()输出和REPL交互都将显示在SSD1306屏幕上
print("Hello, SSD1306!")