MicroPython的交互式解释器模式 REPL

news2025/1/16 20:05:06

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的伙伴们有所帮助,别忘了点赞收藏^_^

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1331517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电子病历编辑器源码,提供电子病历在线制作、管理和使用的一体化电子病历解决方案

概述&#xff1a; 电子病历是指医务人员在医疗活动过程中,使用医疗机构信息系统生成的文字、符号、图表、图形、数据、影像等数字化信息,并能实现存储、管理、传输和重现的医疗记录,是病历的一种记录形式。 医院通过电子病历以电子化方式记录患者就诊的信息&#xff0c;包括&…

【常见的语法糖(详解)】

&#x1f7e9; 说几个常见的语法糖 &#x1f7e2;关于语法糖的典型解析&#x1f7e2;如何解语法糖&#xff1f;&#x1f7e2;糖块一、switch 支持 String 与枚举&#x1f4d9;糖块二、泛型&#x1f4dd;糖块三、自动装箱与拆箱&#x1f341;糖块四、方法变长参数&#x1f5a5;️…

Linux多线程:POSIX信号量,基于信号量的环形队列实现生产者消费者模型

目录 一、POSIX信号量1.1 初始化信号量1.2 销毁信号量1.3 等待信号量1.4 发布信号量1.5 基于环形队列的生产消费模型(用信号量控制生产者和消费者之间的同步互斥关系)1.5.1 makefile1.5.2 RingQueue.hpp1.5.3 Sem.hpp1.5.4 Task.hpp1.5.5 main.cc 二、信号量控制的环形队列原理…

.Net 访问电子邮箱-LumiSoft.Net,好用

序言&#xff1a; 网上找了很多关于.Net如何访问电子邮箱的方法&#xff0c;但是大多数都达不到想要的需求&#xff0c;只有一些 收发邮件。因此 花了很大功夫去看 LumiSoft.Net.dll 的源码&#xff0c;总算做出自己想要的结果了&#xff0c;果然学习诗人进步。 介绍&#xff…

Qt 开源项目

Qt 开源项目 Omniverse View链接技术介绍 QuickQanava链接技术介绍QField链接技术介绍 AtomicDEX链接技术介绍 Status-desktop链接技术介绍 Librum链接技术介绍 A Simple Cross-Platform ReaderQPrompt链接技术介绍 GCompris链接技术介绍 Scrite链接技术介绍 QSkinny链接技术介…

如何在PC上运行大模型

如何在PC上运行大模型 在PC上使用CPU运行大模型不如使用GPU高效&#xff0c;但仍然是可以实现的大模型推理。 大模型训练要求的资源更高&#xff0c;这里直接使用面向开源的Facebook’s LLaMA model(llama-2-7b-chat.Q2_K.gguf)。 连接CPU与LLaMA model的是llama.cpp。 为方便…

认识Linux背景

1.发展史 Linux从哪里来&#xff1f;它是怎么发展的&#xff1f;在这里简要介绍Linux的发展史 要说Linux&#xff0c;还得从UNIX说起 UNIX发展的历史 1968年&#xff0c;一些来自通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫Multics的特殊操作系统。Mu…

LLaMA开源大模型源码分析!

Datawhale干货 作者&#xff1a;宋志学&#xff0c;Datawhale成员 花了一晚上照着transformers仓库的LLaMA源码&#xff0c;把张量并行和梯度保存的代码删掉&#xff0c;只留下模型基础结构&#xff0c;梳理了一遍LLaMA的模型结构。 今年四月份的时候&#xff0c;我第一次接触…

第一次记录QPSK,BSPK,MPSK,QAM—MATLAB实现

最近有偶然的机会学习了一次QPSK防止以后忘记又得找资料&#xff0c;这里就详细的记录一下 基于 QPSK 的通信系统如图 1 所示&#xff0c;QPSK 调制是目前最常用的一种卫星数字和数 字集群信号调制方式&#xff0c;它具有较高的频谱利用率、较强的抗干扰性、在电路上实现也较为…

基于STM32单片机模拟智能电梯步进电机控制升降毕业设计3

STM32单片机模拟智能电梯步进电机控制数码管显示3 演示视频&#xff08;复制到浏览器打开&#xff09;&#xff1a; 基于STM32单片机的智能电梯控制系统模拟智能电梯步进电机控制系统设计数码管显示楼层设计/DIY开发板套件3 产品功能描述&#xff1a; 本系统由STM32F103C8T6单…

技术交底二维码的应用

二维码技术交底可以逐级落实、责任到人、有据可查、是目前最方便、实用的交底方式&#xff0c;下面我们讲解技术交底二维码的应用。 1、生成对应的技术交底二维码&#xff0c;将施工方案、技术资料、安全教育资料等内容上传到二维码里。打印出来现场粘贴&#xff0c;便于作业班…

(一)深入理解Mysql底层数据结构和算法

什么是索引 索引是帮助MySQL高效获取数据的排好序的数据结构 数据结构有哪些 数据结构模拟网站&#xff1a;Data Structure Visualization 二叉树 不适合做自增ID的数据结构。如下示意图&#xff0c;假设采用二叉树作为表自增主键ID的数据存储结果如下&#xff1a;当查询i…

行列式:方程组未知数的计算:克拉默法则

行列式&#xff1a;方程组未知数的计算 ![ ](https://img-blog.csdnimg.cn/direct/4a9c2800da3746ea95c1a3c93057d796.png)

VS Code实现“Ctr+save”保存代码自动格式化

一、下载Prettier - Code formatter插件 点击安装即可 二、配置 【1】打开文件——首选项——设置 或者左下角齿轮打开设置 【2】搜索设置框输入editor default formatter&#xff08;意思是默认格式化设置&#xff09;&#xff0c;接着下拉选中刚下好的插件名称Prettier - C…

【Vulnhub 靶场】【Corrosion: 1】【简单】【20210731】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/corrosion-1,730/ 靶场下载&#xff1a;https://download.vulnhub.com/corrosion/Corrosion.ova 靶场难度&#xff1a;简单 发布日期&#xff1a;2021年07月31日 文件大小&#xff1a;7.8 GB 靶场作者&#xf…

Windows安装cnpm报错 The operation was rejected by your operating system.

Windows在安装cnpm时出现如下错误 npm ERR! The operation was rejected by your operating system. npm ERR! Its possible that the file was already in use (by a text editor or antivirus), npm ERR! or that you lack permissions to access it. npm ERR! npm ERR! If y…

[vue]Echart使用手册

[vue]Echart使用手册 使用环境Echart的使用Echart所有组件和图表类型Echart 使用方法 使用环境 之前是在JQuery阶段使用Echart&#xff0c;直接引入Echart的js文件即可&#xff0c;现在是在vue中使用,不仅仅时echarts包&#xff0c;还需要安装vue-echarts&#xff1a; "…

智能优化算法应用:基于鹈鹕算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鹈鹕算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鹈鹕算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鹈鹕算法4.实验参数设定5.算法结果6.参考文献7.MA…

C语言——小细节和小知识6

一、转义字符相关 \ 反斜杠&#xff0c;转义字符中的转义序列符 \? 将?转义&#xff0c;防止他被识别成三字母词(很早的东西)中的问号 //三字母词 //??(是[ //??)是] printf("%s","??(??)"); //打印结果是[] 二、fopen函数fc…

Linux 基础指令三

一、cat命令 默认是顺序查看&#xff0c;可同时查看多个文件&#xff0c;只能看普通文件&#xff0c;不能看文件以外 使用格式: cat [选项] 文件名 常用选项 -n显示行号-b跳过空白行编号-s将所有的连续的多个空行替换为一个空行&#xff08;压缩成一个空行&#xff0…