MicroPython 远程控制: mpremote

mpremote 命令行工具提供了一组集成的实用功能,可通过串口连接与 MicroPython 设备进行远程交互和自动化。

通过 pip 安装来使用 mpremote :

$ pip install mpremote

使用此工具的最简单方式,就是不带任何参数地调用它

mpremote

此命令自动检测并连接到第一个可用的串口设备并提供交互式 REPL。串行端口打开时是独占的,因此运行第二个(或第三个等)实例时, mpremote 将连接到后续串行设备(如果有的话)。

命令

对于访问 REPL ,通常只需要不带任何参数运行 mpremote 即可。 mpremote 也支持在命令行中给出的附带命令。这些命令可远程在 MicroPython 设备上执行各种操作。

完整的支持命令的列表:

  • 通过设备名简称连接到指定设备:

    $ mpremote <device-shortcut>
    
  • 通过名称连接到指定设备:

    $ mpremote connect <device>
    

    <device> 处可以是:

    • list: 用于列出可用的设备

    • auto: 连接首个可用的设备

    • id:<serial>:使用 USB 序列号 <serial>connect list 命令输出中的第二排)连接到设备

    • port:<path>: 使用给定的路径连接到设备

    • 任意有效的设备名或地址,来连接到设备

  • 断开当前设备的链接:

    $ mpremote disconnect
    
  • 在连接的设备上进入 REPL:

    $ mpremote repl [options]
    

    选项:

    • --capture <file>, 将 REPL 会话的输出捕获到给定的文件中

    • --inject-code <string>, 指定在 REPL 中按下 Ctrl-J 时注入的字符

    • --inject-file <strfileing>, 指定在 REPL 中按下 Ctrl-K 时注入的文件

  • 计算并打印 Python 表达式的结果

    $ mpremote eval <string>
    
  • 执行给定的 Python 代码

    $ mpremote exec <string>
    
  • 从本地文件系统运行脚本

    $ mpremote run <file>
    
  • 在设备上执行文件系统命令

    $ mpremote fs <command>
    

    <command> 可以是:

    • cat <file..> 显示设备上一个或多个文件的内容

    • ls 列出当前目录

    • ls <dirs...> 列出给定的目录

    • cp [-r] <src...> <dest> 复制文件;使用 “:” 作为前缀来指定设备上的文件

    • rm <src...> 删除设备上的文件

    • mkdir <dirs...> 在设备上创建目录

    • rmdir <dirs...> 删除设备上的目录

  • 在远程设备上挂载本地目录

    $ mpremote mount <local-dir>
    

可以指定多个命令,它们将按顺序运行。当未明确给出上述命令时,连接和断开将在工具执行的开始和结束时自动完成。自动连接特性将搜索第一个可用的串行设备。如果未指定任何操作,则将进入 REPL。

快捷方式

快捷方式可以使用宏系统定义。内置的快捷方式有:

  • devs: 列出所有可用设备 (即 connect list 的快捷方式)

  • a0, a1, a2, a3: 连接到 /dev/ttyACM?

  • u0, u1, u2, u3: 连接到 /dev/ttyUSB?

  • c0, c1, c2, c3: 连接到 COM?

  • cat, ls, cp, rm, mkdir, rmdir, df: 文件系统命令

  • reset: 软复位设备

  • bootloader: 使设备进入其引导加载程序

用户定义的快捷方式,像所有用户配置一样,都可以在文件中 .config/mpremote/config.py 修改替换。例如:

commands = {
    "c33": "connect id:334D335C3138",
    "bl": "bootloader",
    "double x=4": "eval x*2",  # x is an argument, with default 4
    "wl_scan": ["exec", """
import network
wl = network.WLAN()
wl.active(1)
for ap in wl.scan():
    print(ap)
""",],
    "test": ["mount", ".", "exec", "import test"],
}

示例

mpremote

mpremote a1

mpremote connect /dev/ttyUSB0 repl

mpremote ls

mpremote a1 ls

mpremote exec "import micropython; micropython.mem_info()"

mpremote eval 1/2 eval 3/4

mpremote mount .

mpremote mount . exec "import local_script"

mpremote ls

mpremote cat boot.py

mpremote cp :main.py .

mpremote cp main.py :

mpremote cp -r dir/ :