MicroPython的交互式解释器模式 REPL

2023-12-23 23:49:44

MicroPython的交互式解释器模式又名REPL(read-eval-print-loop),就是一种命令输入交互模式,跟Python的REPL是类似的,就是在命令行直接输入Python代码或表达式执行并打印结果。关于MicroPython的REPL跟通常的Python类似又有一些不同点,下面逐一介绍一下。

REPL环境

要进入MicroPython的REPL环境,你需要先有一块支持MicroPython的开发板,并且开发板已经烧录了MicroPython的固件,如果是新手推荐MicroPython官网推荐的开发板。

Windows环境

Windows环境下推荐使用Putty,可以直接到Putty网站下载安装。

首先将开发板连接到电脑的USB接口,并且确认设备工作正常,可以通过Windows的设备管理器查看设备
WIndows设备管理器
是否工作正常。**注意:**不同的开发板串口号可能不一样,如果设备出现黄色的感叹号说明需要安装驱动,可以咨询下开发板的技术支持安装相应的驱动。

打开Putty,选择session节点,Connect Type选择Serial,在Serial Line文本框输入串口名,Speed输入115200,如下图:
Putty

然后,点Open按钮,即可进入到REPL的命令交互界面,如果没有显示>>>可以按下回车:
REPL
输入help()回车,可以打印出MicroPython的帮助信息:
repl help

REPL控制快捷键
快捷键命令
CTRL-A在空行状态下,进入原始REPL模式
CTRL-B在空行状态下,进入常规REPL模式
CTRL-C终止正在运行的程序
CTRL-D在空行状态下,软启动开发板
CTRL-E在空行状态下,进入粘贴模式

到这一步,就说明成功进入到REPL环境了。

MAC OS X

打开终端并运行:

screen /dev/tty.usbmodem*

完成并退出屏幕后,键入 CTRL-A CTRL-\。

Linux

打开终端并运行:

screen /dev/ttyACM0

也可以尝试用 picocomminicom 代替 screen。**注意:**设备名可能不是ttyACM0,也可能是ttyACM1或更大的数字。另外,要注意是否有足够的权限来访问设备(如将 uucp 或 dialout 编为一个组,或使用 sudo)。

使用REPL

自动缩进

键入以冒号结尾的 python 语句(例如 if、for、while)时,提示符将变为三个点(…),光标将缩进 4 个空格。按回车键后,下一行将以与常规语句相同的缩进或适当的额外缩进继续。如果按退格键,则会取消一级缩进。

如果光标回到起始位置,按 RETURN 键就会执行输入的代码。下面显示的是输入 for 语句后的结果(下划线表示光标的位置):

>>> for i in range(30):
...    _

如果随后输入 if 语句,将提供额外的缩进级别:

>>> for i in range(30):
        if i > 3:
            _

现在输入 break,接着输入 RETURN,然后按 BACKSPACE 键:

>>> for i in range(30):
        if i > 3:
            break
        _

最后输入 print(i),按 RETURN 键,按回车键,再按一次 RETURN 键:

>>> for i in range(30):
...     if i > 3:
...         break
...     print(i)
... 
0
1
2
3
>>>

如果前两行都是空格,则不会应用自动缩进功能。可以按两次 RETURN 键来完成一个复合语句的输入,然后再按第三次 RETURN 键即可完成并执行该语句。

其实以上这些跟Python的控制台是一样的。

自动补全

REPL支持自动补全,比如输入一个关键字的开头字符后按TAB键,如果输入的字符能唯一确定关键字,则自动补全关键字,如果关键字不唯一,则会列出所有以输入字符为开头的关键字。例如,首先输入 import machine 并按下 RETURN 键,导入 machine 模块。然后输入 m 并按 TAB 键,它会扩展为 machine。输入点 . 并再次按 TAB 键。应该会看到类似的内容:

>>> machine.
__name__        info            unique_id       reset
bootloader      freq            rng             idle
sleep           deepsleep       disable_irq     enable_irq
Pin

**注:**不同的开发板或固件显示的内容会有所不同

上面提到的,当有多个可能关键字时,会尽可能列出。例如,键入 machine.Pin.AF3,然后按 TAB 键,它将扩展为 machine.Pin.AF3_TIM。再次按 TAB 键将显示可能的扩展:

>>>machine.Pin.AF3_TIM
AF3_TIM10       AF3_TIM11       AF3_TIM8        AF3_TIM9
>>>machine.Pin.AF3_TIM

终止正在运行的程序

按 Ctrl-C 会中断正在运行的程序,这将引发键盘中断(KeyboardInterrupt),如果程序没有拦截键盘中断异常,则会返回 REPL。

>>>for i in range(1000000):
...    print(i)
...
...
0
1
2
3
...
6466
6467
6468
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
KeyboardInterrupt:
>>>

粘贴模式

如果要在终端窗口中粘贴一些代码,自动缩进功能会把事情搞得一团糟。例如,有以下 python 代码:

def foo():
    print('This is a test to show paste mode')
    print('Here is a second line')
foo()

如果尝试粘贴到普通模式的RPEL中时,会出现下面的情况:

>>>def foo():
...        print('This is a test to show paste mode')
...            print('Here is a second line')
...            foo()
...
Traceback (most recent call last):
  File "<stdin>", line 3
IndentationError: unexpected indent

如果按下 Ctrl-E,就会进入粘贴模式,该模式基本上关闭了自动缩进功能,并将提示符从 >>> 改为 ===。 例如:

>>>
paste mode; Ctrl-C to cancel, Ctrl-D to finish
=== def foo():
===     print('This is a test to show paste mode')
===     print('Here is a second line')
=== foo()
===
This is a test to show paste mode
Here is a second line
>>>

粘贴模式允许粘贴空行。粘贴的文本会像文件一样被编译。按下 Ctrl-D 可退出粘贴模式并启动编译。

软启动

软重置将重置 python 解释器,但不会重置与 MicroPython 开发板连接的方式(USB-串口或 Wifi)。可以在 REPL 中按 Ctrl-D 执行软重置,也可以在 python 代码中执行软重置:

machine.soft_reset()

例如,如果重置 MicroPython 开发板并执行 dir() 命令,就会看到类似下面的内容:

>>>dir()
['__name__', 'pyb'] 

现在创建一些变量并重复执行 dir() 命令:

>>>i = 1
>>>j = 23
>>>x = 'abc'
>>>dir()
['j', 'x', '__name__', 'pyb', 'i']
>>>

**注意:**不同的板子显示结果会有不同

现在,如果输入 Ctrl-D,并重复 dir() 命令,就会发现变量已经不存在了:

MPY: sync filesystems
MPY: soft reboot
MicroPython v1.5-51-g6f70283-dirty on 2015-10-30; PYBv1.0 with STM32F405RG
Type "help()" for more information.
>>> dir()
['__name__', 'pyb']
>>>

特殊变量 _ (下划线)

在使用REPL的时候,执行的计算结果会默认保存到一个下划线变量中,没错就是_,所以,也可以用这个变量名把结果保存到另一个变量,举例:


>>> 1 + 2 + 3 + 4 + 5
15
>>> x = _
>>> x
15
>>>

总结

REPL是MicroPython开发时经常用到的工具,结合mpremote可以帮助我们更好的进行代码的测试和调试。有关mpremote的用法可以参考另一篇文章MicroPython远程控制工具:mpremote。希望对进行MicroPython的伙伴们有所帮助,别忘了点赞收藏^_^

文章来源:https://blog.csdn.net/superatom01/article/details/135094219
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。