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!")
复制代码

 

posted @   JeasonBoy  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示