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!")
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!