MicroPython远程控制工具:mpremote

mpremote是microPython的一个命令行工具,可以通过串口与microPython设备进行交互并且能对设备上的文件进行管理。

mpremote的安装

mpremote的安装有下面几种方式:

  • 用pip进行安装
    $ pip install --user mpremote
  • 通过pipx安装
    $ pipx install mpremote

mpremote的使用

最简单的用法,不带任何参数直接运行:
$ mpremote
mpremote会自动检测并连接到第一个可用的USB串口设备,并提供一个交互式终端(命令行窗口)来访问REPL和程序的输出。
注意:
串口会以独占模式打开,运行多个mpremote实例的时候,将依次连接到后续可用的串行设备。
另外,没有安装的情况下,使用pipx也可以直接mpremote:
$ pipx run mpremote ...args

举例:

命令含义
mpremote连接到第一个可用设备并隐式运行该repl命令。
mpremote a1连接到 (Linux) 上的设备/dev/ttyACM1并运行repl命令
mpremote c1连接到 (Windows) 上的设备COM1并运行repl命令
mpremote connect /dev/ttyUSB0连接到/dev/ttyUSB0,并运行repl命令。
mpremote a1 ls连接到设备/dev/ttyACM0,然后运行ls命令。相当于mpremote connect /dev/ttyACM1 fs ls

常用命令参考

命令形式

mpremote支持在命令行中给出一系列命令,这些命令会在MicroPython设备上按顺序执行。
命令的的形式:
<command name> [--options] [args...]
对于支持多个参数的命令(例如文件列表),参数列表可以+结尾。
如果不指定命令,则默认命令为repl。如果之前没有connect,则会添加隐式命令connect auto
为了连接后保证设备在确定的状态,连接后mpremote将停止之前运行的程序并软重启设备(repl除外)。可以使用resume和soft-reset命令控制此行为。

connect 连接到指定的设备

$ mpremote connect <device>
<device>可以是:

  • list:列出可用设备
  • auto:连接到第一个可用的USB串口
  • id:<serial>:连接带有USB序列号的设备 <serial>(connect list命令输出的第二列 )
  • port:<path>:使用给定路径连接到设备(connect list命令输出的第一列)
  • rfc2217://<host>:<port>:使用 TCP 串行连接到设备(例如基于 RFC2217 的网络串行端口)
  • 使用其他有效的设备名称/路径连接设备

注意:

  • 除了使用connect命令之外,还有一些 针对常见设备路径的预定义快捷方式。例如,a0快捷命令相当于 (Linux),或( Windows)。connect /dev/ttyACM0c0COM0
  • auto选项仅检测USB VID/PID 的串行端口(即CDC/ACM 或FTDI 类型设备)。其他类型的串口将不会被自动检测。

disconnect 断开当前设备

$ mpremote disconnect
断开连接后,自动软重置。

resume 维护后续命令的现有解释器状态

$ mpremote resume
将禁用自动软重置。如果想运行后续命令而不进行软重置可以使用resume命令。
举例:
mpremote resume exec "print_state_info()" soft-reset
连接到设备而不触发软重置并执行 print_state_info()功能(例如,查找有关当前程序状态的信息),然后触发软重置。

soft-reset 执行设备的软重置

$ mpremote soft-reset
清除Python堆并重启解释器。并且防止后续命令触发auto-soft-reset。

repl 进入REPL

$ mpremote repl [--options]
options的值有:

  • escape-non-printable,将不可打印的字节/字符输出为其十六进制代码
  • capture <file>,将REPL的会话输出到指定的文件
  • inject-code <string>,指定当按下Ctrl-J时要在REPL注入的字符。通常用于自动执行常用命令。
  • inject-file <file>,指定按下Ctrl-K时要在REPL注入的文件。可以运行一些设置代码或处理的程序。
  • 命令运行时repl,可以使用Ctrl-]Ctrl-x退出。

注意:
此处的名称“REPL”反映了该命令访问 MicroPython 设备上运行的 Read Eval Print Loop 的常见用法。严格来说,该repl命令只是充当访问设备的终端(或“串行监视器”)。因为此命令不会触发自动重置行为,这意味着如果程序当前正在运行,首先需要中断它以 Ctrl-C进入 REPL,然后允许访问程序状态。可以使用mpremote soft-reset repl来清除所有程序状态,从而获取的“干净”REPL。

eval 计算并打印表达式的结果:

$ mpremote eval <string>

举例:
mpremote eval 1/2 eval 3/4
依次计算每个表达式并打印结果。
mpremote a0 eval 1/2 a1 eval 3/4
1/2在设备/dev/ttyACM0执行,然后3/4在设备/dev/ttyACM1执行,并打印结果。

exec 执行给定的代码

$ mpremote exec <string>
默认情况下,mpremote exec将显示表达式的输出直到结束。也可以通过指定--no-follow标志立即返回并使设备在后台运行表达式。
举例:
mpremote exec "import micropython; micropython.mem_info()"
运行指定的 Python 命令并显示输出。相当于在 REPL 提示符下键入命令。

run 从本地文件系统运行脚本

$ mpremote run <file.py>
直接从设备的RAM执行文件,而不需要把它复制到文件系统。这个方法对于单段代码的迭代开发非常有用,不用考虑部署到文件系统。

默认情况下mpremote run显示脚本的所有输出直到其终止。如果希望命令在后台运行并立即返回,可以使用--no-follow参数。

fs 在设备上执行文件系统命令

这个命令有点类似linux或unix常用的文件操作命令,具体如下:
$ mpremote fs <sub-command>
<sub-command>可以是:

  • cat <file..>显示设备上一个或多个文件的内容
  • ls列出当前目录
  • ls <dirs...>列出指定的目录
  • cp [-r] <src...> <dest>复制文件
  • rm <src...>删除设备上的文件
  • mkdir <dirs...>在设备上创建目录
  • rmdir <dirs...>删除设备上的目录
  • touch <file..>创建文件(如果它们尚不存在)

注意:
cp命令遵循安全复制协议客户端( Secure Copy Protocol client)的约定,路径前面加:代表远程路径,路径前面没有:则是本地路径。所有其他命令都默认路径为远程路径,但为了清楚起见,可以选择使用:
例如,mpremote fs cp main.py :main.py表示把main.py从本地当前目录复制到远程文件系统,而mpremote fs cp :main.py main.py则表示把main.py从设备复制到当前目录。
所有文件系统子命令都采用多个路径参数,因此如果序列中有另一个命令,则必须需要使用+表示终止,例如:
$ mpremote fs cp main.py :main.py + repl
表示把文件复制到设备,然后进入REPL。+防止"repl"被解释为路径。
为了方便起见,所有文件系统的子命令可以省略fs,如:mpremote fs cp ...可以省略为mpremote cp ...
举例:
mpremote cp utils/driver.py :utils/driver.py + run test.py
更新设备上的utils/driver.py文件,然后在设备上执行test.py。test.py会从RAM运行,不会复制到设备的文件系统。

mpremote cp utils/driver.py :utils/driver.py + exec "import app"
更新设备上的utils/driver.py文件,然后在设备上执行 app.py。
这是一种常见的开发工作流程,更新一个文件,然后重新启动程序。设备上的 main.py 文件也会import app。

mpremote cp utils/driver.py :utils/driver.py + soft-reset repl
更新设备上的utils/driver.py文件后触发软重置,然后通过 repl 命令监控输出。

mpremote cp -r utils/ :utils/ + soft-reset repl
与上面的类似,但会先更新整个utils目录。

mpremote cat boot.py
显示设备上boot.py的内容。

mpremote cp :main.py .
将main.py从设备复制到本地目录。

mpremote cp main.py :
将本地目录的main.py复制到设备。

mpremote cp :a.py :b.py
把设备上的a.py复制到b.py。

mpremote cp -r dir/ :
将本地dir下的所有文件和文件夹复制到远程设备。

mpremote cp a.py b.py : + repl
将本地目录下的a.py和b.py复制到设备,然后运行repl。

df 查询设备可用/已用空间

$ mpremote df
df命令打印设备文件系统的大小、已用、空闲统计信息,类似Linux的df命令。

edit 编辑设备上的文件

$ mpremote edit <files...>
edit命令会把文件从设备复制到本地临时目录,然后启动每个文件的编辑器(由环境变量定义$EDITOR)。如果编辑器成功退出,更新的文件将被复制回设备。

举例:
mpremote edit utils/driver.py
使用本地$EDITOR系统变量指定的编辑器编辑utils/driver.py。

mip 从micropython-lib(或 GitHub)安装软件包

$ mpremote mip install <packages...>

举例:
mpremote mip install aioble
aioble包从micropython-lib安装到设备。

mpremote mip install github:org/repo@branch
将GitHub上org/repo指定分支中的包安装到设备。

mpremote mip install --target /flash/third-party functools
将micropython-lib中functools包安装到设备的/flash/third-party目录。

mount 将本地目录挂载到远程设备

$ mpremote mount [options] <local-dir>
挂载后远程设备可以查看本地主机目录,就像用自己的文件系统一样。这对开发很有用,避免了在处理文件时将文件复制到设备。
设备首先安装文件系统驱动,将目录挂载在到其VFS/remote,然后使用串行连接作为mpremote侧通道来访问文件。设备将其当前工作目录(通过os.chdir)设置为 /remote,以便在挂载处于活动状态时,导入和文件访问将在此处进行,而不是默认文件系统路径。
注意:
如果mount序列中命令后面没有其他操作,则repl命令将隐式添加到序列末尾。
在使用过程中,Ctrl-D 将触发软重置,但挂载会自动重新连接。如果设备在启动时运行main.py,则无法重新挂载。在这种情况下,可以使用原始模式软重启:按 Ctrl-A Ctrl-D 重新启动,然后按Ctrl-B返回到正常 repl,此时挂载已准备就绪。
options选项可以是:

  • -l, --unsafe-links:默认情况下,如果设备访问位于已挂载的本地目录之外(上一层或多层目录)的文件或目录,则会引发错误。此选项禁用对符号链接的检查,允许设备跟踪本地目录之外的符号链接。
    举例:
    mpremote mount .
    将当前目录挂载到设备的/remote上,启动一个repl会话并将/remote作为当前工作目录。

mpremote mount . exec "import demo"
挂载本地当前目录并执行目录下的demo.py。

mpremote mount app run test.py
把本地的app目录挂载到设备后,运行挂载目录下的test.py,但不复制到文件系统。

mpremote mount . repl --inject-code "import demo"
挂载当前本地目录后,每次Ctrl-J按都从挂载的目录执行demo.py。
需要先按Ctrl-D重置解释器状态(保持挂载),然后再按Ctrl-J重新导入demo.py。

mpremote mount app repl --inject-file demo.py
与上面类似,每次按下Ctrl-K都会在REPL执行本地文件demo.py。同样的,需要先按Ctrl-D重置解释器。

unmount 从远程设备卸载本地目录

$ mpremote umount
虽然在mpremote终止时会自动执行卸载,但可以使用它在执行后续命令之前卸载较早的挂载。

rtc 设置/获取设备时钟 (RTC)

$ mpremote rtc
查询设备RTC的当前时间并打印日期时间元组。
$ mpremote rtc --set
将设备 RTC 设置为主机 PC 的当前时间。

sleep 睡眠(延迟)

$ mpremote sleep 0.5
暂停命令执行0.5秒,比如:可以用于等待设备执行某些操作。

reset 硬重置设备(冷启动)

$ mpremote reset
注意: 硬重置相当于machine.reset()
举例:
mpremote reset sleep 0.5 bootloader
硬重置设备,休眠500毫秒,然后进入引导加载程序。

bootloader 进入引导程序

$ mpremote bootloader
使设备进入其引导程序。引导程序与端口和板卡相关(例如 stm32 上的 DFU、rp2040/Pico 上的 UF2)。

自动连接和软重置

默认情况下(没指定命令),mpremote在运行时会自动连接第一个可用的USB串口设备,并且在结束时自动断开。一旦连接到设备,mpremote会自动软重置设备,清除 Python 堆并重新启动解释器,确保后续 Python 代码在新环境中执行。第一次执行以下命令时也会自动执行软重置:mount, eval, exec, run, fs。第一次执行软重置后,就不会再自动执行,直到 disconnect为止。自动软重置可以通过resume命令控制。这对于使用eval命令检查设备的状态可能会很有用。而soft-reset命令可用于在命令序列中间执行显式软重置。

快捷方式

mpremote提供了一些命令的快捷方式,如文件系统操作命令fs相关的操作就可以省略fs,系统内置的命令快捷方式有:

参数别名
devsconnect list
a0, a1, a2, a3connect /dev/ttyACMn
u0, u1, u2, u3connect /dev/ttyUSBn
c0, c1, c2, c3connect COMn
cat, edit, ls, cp, rm, mkdir, rmdir, touchfs <sub-command>

另外,用户也可以通过配置文件自定义快捷方式,文件位于:config/mpremote/config.py,文件中定义了一个commands字典。字典的键是快捷方式,值是命令字符串或列表,如:
"c33": "connect id:334D335C3138",
执行时,命令c33会被替换为connect id:334D335C3138
又如:
"test": ["mount", ".", "exec", "import test"],
执行时,命令test会被替换为mount exec "import test"
快捷方式也可以接受参数。例如:
"multiply x=4 y=7": "eval x*y",
运行会将和设置为设备上的变量,然后计算表达式。mpremote times 3 7xyx*y

config.py例子:

commands = {
    "c33": "connect id:334D335C3138", # 连接到指定ID的设备
    "bl": "bootloader", # bootloader的短命令
    "double x=4": "eval x*2",  # x为参数,缺省值为 4
    "wl_scan": ["exec", """
import network
wl = network.WLAN()
wl.active(1)
for ap in wl.scan():
    print(ap)
""",], # 打印附近的WiFi热点
    "wl_ifconfig": [
"exec",
"import network; sta_if = network.WLAN(network.STA_IF); print(sta_if.ifconfig())",
""], #打印站点接口IP地址
    "test": ["mount", ".", "exec", "import test"], #挂载当前目录并执行test.py.
    "demo": ["run", "path/to/demo.py"], # 在设备上执行demo.py
}
  • 18
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
2022 / 01/ 30: 新版esptool 刷micropython固件指令不是 esptool.py cmd... 而是 esptool cmd... 即可;另外rshell 在 >= python 3.10 的时候出错解决方法可以查看:  已于2022年发布的: 第二章:修复rshell在python3.10出错 免费内容: https://edu.csdn.net/course/detail/29666 micropython语法和python3一样,编写起来非常方便。如果你快速入门单片机玩物联网而且像轻松实现各种功能,那绝力推荐使用micropython。方便易懂易学。 同时如果你懂C语音,也可以用C写好函数并编译进micropython固件里然后进入micropython调用(非必须)。 能通过WIFI联网(2.1章),也能通过sim卡使用2G/3G/4G/5G联网(4.5章)。 为实现语音控制,本教程会教大家使用tensorflow利用神经网络训练自己的语音模型并应用。为实现通过网页控制,本教程会教大家linux(debian10 nginx->uwsgi->python3->postgresql)网站前后台入门。为记录单片机传输过来的数据, 本教程会教大家入门数据库。  本教程会通过通俗易懂的比喻来讲解各种原理与思路,并手把手编写程序来实现各项功能。 本教程micropython版本是 2019年6月发布的1.11; 更多内容请看视频列表。  学习这门课程之前你需要至少掌握: 1: python3基础(变量, 循环, 函数, 常用库, 常用方法)。 本视频使用到的零件与淘宝上大致价格:     1: 超声波传感器(3)     2: MAX9814麦克风放大模块(8)     3: DHT22(15)     4: LED(0.1)     5: 8路5V低电平触发继电器(12)     6: HX1838红外接收模块(2)     7:红外发射管(0.1),HX1838红外接收板(1)     other: 电表, 排线, 面包板(2)*2,ESP32(28)  

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原子星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值