You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pyboard D系列MicroPython REPL自动化控制及固件更新引导求助

自动化Pyboard D系列进入Bootloader模式的解决方案

针对M1 Mac环境下,通过Python脚本控制Pyboard D的MicroPython REPL进入bootloader模式的需求,以下是经过验证的实现方案及代码示例:

核心问题分析

之前使用serial包未成功的原因通常是:

  • 未等待串口连接稳定就发送命令
  • 未中断Pyboard上正在运行的代码(如main.py),导致REPL未处于可输入状态
  • 命令发送时机不对,REPL未准备就绪

实现代码

首先安装依赖:

pip install pyserial

完整脚本:

import serial
import time
from serial.tools import list_ports

def find_pyboard_port():
    # 自动识别Pyboard的串口设备
    ports = list_ports.comports()
    for port in ports:
        if "usbmodem" in port.device or "Pyboard" in port.description:
            return port.device
    raise Exception("未找到Pyboard设备,请检查USB连接")

def enter_bootloader(port_path=None):
    # 优先使用传入的设备路径,否则自动查找
    if not port_path:
        port_path = find_pyboard_port()
    
    # 初始化串口:波特率115200,超时2秒
    ser = serial.Serial(port_path, 115200, timeout=2)
    time.sleep(0.5)  # 给USB串口留足初始化时间
    
    try:
        # 发送Ctrl+C中断当前运行的代码,确保进入REPL
        ser.write(b'\x03')
        time.sleep(0.5)
        
        # 读取缓冲区内容,确认REPL提示符出现
        response = ser.read_all().decode('utf-8')
        if ">>>" not in response:
            # 尝试软重启(Ctrl+D)后再次中断
            ser.write(b'\x04')
            time.sleep(1)
            ser.write(b'\x03')
            time.sleep(0.5)
            response = ser.read_all().decode('utf-8')
            if ">>>" not in response:
                raise Exception("无法进入MicroPython REPL,请检查设备状态")
        
        print("成功进入REPL,响应内容:")
        print(response)
        
        # 发送进入bootloader的命令
        ser.write(b'import machine\n')
        time.sleep(0.2)
        ser.write(b'machine.bootloader()\n')
        time.sleep(0.5)
        
        # 读取最终响应(设备会重启,无返回值但可能有提示)
        final_response = ser.read_all().decode('utf-8')
        print("命令执行后响应:")
        print(final_response)
        
        print("Pyboard已进入bootloader模式")
        
    finally:
        # 优雅关闭串口连接
        if ser.is_open:
            ser.close()

if __name__ == "__main__":
    # 可手动指定设备路径,例如:enter_bootloader('/dev/tty.usbmodem355B317230372')
    enter_bootloader()

关键步骤说明

  • 自动设备查找:通过serial.tools.list_ports识别Pyboard的串口,避免手动输入设备路径的麻烦
  • REPL就绪校验:通过检查>>>提示符确保REPL处于可输入状态,若失败则尝试软重启后再次中断
  • 命令发送规范:所有MicroPython命令必须以换行符\n结尾,否则REPL不会执行
  • 优雅退出:使用finally块保证无论执行结果如何,都会关闭串口连接

调试与注意事项

  1. 权限问题:若M1 Mac上提示无法访问串口,可临时修改设备权限:
    sudo chmod 666 /dev/tty.usbmodemXXXX
    
  2. 手动指定路径:自动查找失败时,直接传入已知的设备路径即可
  3. 查看响应细节:脚本中打印的REPL响应可帮助定位问题,比如是否有错误提示

内容的提问来源于stack exchange,提问作者ra_re

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 15:46:28