MicroPython重定向Repl终端输出
默认是输出到URAT上的,只能通过电脑串口连接查看。
官方的文档里提到了通过os.dupterm重定向的方法:os – basic “operating system” services — MicroPython latest documentation

这个帖子里也提到了重定向到日志的方法:
python - Redirect Stderr in micropython? - Stack Overflow
import io, os class logToFile(io.IOBase): def __init__(self): pass def write(self, data): with open("logfile.txt", mode="a") as f: f.write(data) return len(data) # Begin loging to file os.dupterm(logToFile()) # Stop loging to file os.dupterm(None)
这是GPT写的示例,重定向到SSD1306屏幕(有问题要解决,退格键跟回车会被打印出来,且退格键没有正常删除字符):
esp32-micropython-ssd1306 Copy - Wokwi ESP32, STM32, Arduino Simulator

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 logToOled(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(logToOled(oled)) # 现在所有的print()输出和REPL交互都将显示在SSD1306屏幕上 print("Hello, SSD1306!")

浙公网安备 33010602011771号