自动化 Micropython REPL 控制以进行 Pyboard 固件更新

问题描述 投票:0回答:1

我正在使用 Pyboard(D 系列),需要自动化准备固件更新的过程(启动模式)。具体来说,我想通过 Python 脚本以编程方式控制 Micropython REPL(读取-求值-打印循环)。这将允许我执行诸如触发引导加载程序和在 Micropython 中的 Pyboard 上执行命令之类的任务。我使用的是 M1 Mac。 如果不自动化,该过程将是:

screen /dev/*usb*
>>> import machine
>>> machine.bootloader()

然后 pyboard 将自行完成 REPL 会话并进入启动模式。

我尝试过的:

  1. 我尝试使用Python中的expect包来控制Micropython REPL,如下:
screen_process = pexpect.spawn("screen /dev/*usb*")

fd = os.open("/dev/tty.usbmodem355B317230372", os.O_RDWR|os.O_NONBLOCK|os.O_NOCTTY)
m = pexpect.spawn(fd) 
m.send("import machine")
m.send("machine.bootloader")

但是,串行设备似乎需要特殊处理,我遇到了问题。

  1. 我还尝试在Python中使用串行包并遵循@David Grayson的建议(谢谢):
ser = serial.Serial('/dev/tty.usbmodem355B317230372', 115200, timeout=1)
ser.write(b'\x03\x01')
ser.write(b'import machine\n')
ser.write(b'machine.bootloader()\n')

这似乎运行良好。它不会抛出任何错误,但也不会将 pyboard 设置为启动模式。

我在寻找:

有关如何有效实施此自动化的指南,包括示例代码或最佳实践。如果您有以编程方式控制 Pyboard D 系列或类似设备上的 Micropython REPL 的经验,我将非常感谢您在解决我面临的问题方面的见解和帮助。

我想使用 Python 脚本自动执行以下操作:

  1. 通过 USB 建立与 Pyboard D 系列的连接(Pyboard 将被识别为串行设备)。
  2. 在 Python 脚本内的 Pyboard 上启动 Micropython REPL 会话。
  3. 向 Micropython REPL 发送命令以触发 Pyboard 上的特定操作,例如进入引导加载程序模式(类似于 machine.bootloader())。
  4. 捕获并处理 Python 脚本中 Micropython REPL 的输出或响应。
  5. 优雅地退出 Micropython REPL 会话。

实现这些目标的任何帮助或代码示例都非常有价值。 预先感谢您!

python automation serial-port micropython
1个回答
0
投票

我建议使用 mpremote 打开与开发板的连接并在 REPL 内执行一些命令。您甚至可以为其配置一个m远程快捷方式

© www.soinside.com 2019 - 2024. All rights reserved.