MicroPython的交互式解释器模式 REPL

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.mzph.cn/news/241263.shtml

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

相关文章

linux运维面试题

linux运维面试题 面试 K8S篇(高可用) Q&#xff1a;k8s是什么&#xff1f;架构&#xff1f; Kubenetes是一个开源的容器集群管理系统。主要用于容器编排&#xff0c;解决容器调度问题。当应用请求时&#xff0c;k8s需要合理分配请求到空闲node节点上去。k8s使用的主从模式&…

python通过JS逆向采集艺恩电影数据, 并制作可视化

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 环境使用: 版 本&#xff1a; python 3.10 编辑器&#xff1a;pycharm 2022.3.2 nodejs 模块使用: requests -> pip install requests execjs -> pip install…

【Git】在 IDEA 中合并多个 commit 为一个

文章目录 1 未提交到远程分支1.1 需求说明1.2 reset 操作1.3 再次 push 2 已经提交到远程分支2.1 需求说明2.2 rebase 操作2.3 强制 push 分两种情况&#xff1a; 一种是本地提交还没推到远程&#xff0c;这种好处理另一种是已经提交到远程分支&#xff0c;这个略麻烦 1 未提…

【接口测试】Postman(三)-变量与集合

一、变量 ​ 变量这个概念相信大家都不陌生&#xff0c;因此在这里我们不介绍了。主要说一下在Postman中有哪几类变量&#xff0c;主要包括以下四类&#xff1a; Global&#xff08;全局&#xff09; Environment&#xff08;环境&#xff09; Local&#xff08;本地&#xf…

Linux中安装Maven3.6.1

一、安装及配置maven 1.下载maven安装包 首先需要切换到自己需要安装的目录 我自己是把配置都放到了&#xff1a;/usr/local/maven路径下 cd /usr/local/maven 下载maven安装包&#xff1a; wget https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/apache-maven…

FreeRTOS信号量学习

目录 一、信号量的特性 1. 信号量的常规操作 2. 信号量跟队列的对比 3. 两种信号量的对比 4. 信号量函数 4.1 创建 4.2 删除 4.3 give/take 5. 使用二进制信号量来同步 6. 防止数据丢失 7. 使用计数型信号量 队列(queue)可以用于传输数据&#xff1a;在任务之间、任务和…

Linux多线程:线程池(单例),读写锁

目录 一、线程池&#xff08;单例模式&#xff09;1.1 makefile1.2 LockGuard.hpp1.3 log.hpp1.4 Task.hpp1.5 Thread.hpp1.6 ThreadPool.hpp1.7 main.cc 二、STL,智能指针和线程安全2.1 STL中的容器是否是线程安全的?2.2 智能指针是否是线程安全的? 三、其他常见的各种锁四、…

微服务之配置中心与服务跟踪

zookeeper 配置中心 实现的架构图如下所示&#xff0c;采取数据加载到内存方式解决高效获取的问题&#xff0c;借助 zookeeper 的节点监听机制来实现实时感知。 配置中心数据分类 事件调度&#xff08;kafka&#xff09; 消息服务和事件的统一调度&#xff0c;常用用 kafka …

使用Java语言中的算法输出杨辉三角形

一、算法思想 创建一个名为YanghuiTest的类,然后创建二维数组&#xff0c;然后遍历二维数组的第一层&#xff0c;然后初始化第二层数组的大小&#xff0c;然后遍历第二层数组&#xff0c;然后将两侧的数组元素赋为1&#xff0c;然后其它数值通过公式计算&#xff0c;最后可以输…

Leetcode—1099.小于K的两数之和【简单】Plus

2023每日刷题&#xff08;六十八&#xff09; Leetcode—1099.小于K的两数之和 实现代码 class Solution { public:int twoSumLessThanK(vector<int>& nums, int k) {int n nums.size();int left 0, right n - 1;int sum 0;int ans 0;sort(nums.begin(), nums…

讲座思考 | 周志华教授:新型机器学习神经元模型的探索

12月22日&#xff0c;有幸听了南京大学周志华教授题为“新型机器学习神经元模型的探索”的讲座。现场热闹非凡&#xff0c;大家像追星一样拿着“西瓜书”找周教授签名。周教授讲得依旧循循善诱&#xff0c;由浅入深&#xff0c;听得我很入迷&#xff0c;故作此记。 周教授首先就…

conda环境下module ‘backend_interagg‘ has no attribute ‘FigureCanvas‘问题解决

1 问题描述 在pycharm下&#xff0c;使用conda环境运行模型程序&#xff0c;调用matplotlib绘制图形&#xff0c;出现如下错误&#xff1a; Traceback (most recent call last):File "D:\code\cv\vgg16_cifar10.py", line 173, in <module>plt.xlabel(times)…

天文与计算机:技术的星辰大海

天文与计算机&#xff1a;技术的星辰大海 一、引言 在人类的历史长河中&#xff0c;天文学与计算机技术这两个领域似乎相隔甚远&#xff0c;然而在科技的推动下&#xff0c;它们却逐渐走到了一起&#xff0c;为人类对宇宙的探索开辟了新的道路。天文观测的复杂度与数据量随着…

【数据结构】最短路径算法实现(Dijkstra(迪克斯特拉),FloydWarshall(弗洛伊德) )

文章目录 前言一、Dijkstra&#xff08;迪克斯特拉&#xff09;1.方法&#xff1a;2.代码实现 二、FloydWarshall&#xff08;弗洛伊德&#xff09;1.方法2.代码实现 完整源码 前言 最短路径问题&#xff1a;从在带权有向图G中的某一顶点出发&#xff0c;找出一条通往另一顶点…

Linux创建macvlan 测试bridge、private和vepa模式

Linux创建macvlan&#xff0c;测试bridge、private和vepa模式 最近在看Docker的网络&#xff0c;看到关于macvlan网络的介绍。查阅了相关资料&#xff0c;记录如下。 参考 1.Linux Macvlan 2.图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN 环境 操…

Vue如何请求接口——axios请求

1、安装axios 在cmd或powershell打开文件后&#xff0c;输入下面的命令 npm install axios 可在项目框架中的package.json中查看是否&#xff1a; 二、引用axios import axios from axios 在需要使用的页面中引用 三、get方式使用 get请求使用params传参,本文只列举常用参数…

山西电力市场日前价格预测【2023-12-24】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-12-24&#xff09;山西电力市场全天平均日前电价为324.41元/MWh。其中&#xff0c;最高日前电价为456.41元/MWh&#xff0c;预计出现在18:00。最低日前电价为0.00元/MWh&#xff0c;预计出…

thinkphp+vue+mysql酒店客房管理系统 b1g8z

本系统包括前台界面、用户界面和管理员界面、员工界面。在前台界面里游客和用户可以浏览客房信息、公告信息等&#xff0c;用户可以预定客房&#xff0c;在用户中心界面里&#xff0c;用户可以管理预定信息&#xff0c;管理员负责用户预定的审核以及客房的发布、用户的入住等。…

PHP开发案例:用PHP写一个简单的蜘蛛统计代码

在前面的文章中我们已经学习了怎么来识别蜘蛛(搜素引擎的爬虫),现在我们来运用我们学习到的知识写一个简单的程序。当然你必须在你需要统计的页面引入spider.php,否则是无法统计到的哦! 一、spider.php <?php function spider(){ $spider=0;//首先定义蜘蛛的默认值为…

要参加微软官方 Copilot 智能编程训练营了

GitHub Copilot 是由 GitHub、OpenAI 和 Microsoft 联合开发的生成式 AI 模型驱动的。 GitHub Copilot 分析用户正在编辑的文件及相关文件的上下文&#xff0c;并在编写代码时提供自动补全式的建议。 刚好下周要参加微软官方组织的 GitHub Copilot 工作坊-智能编程训练营&…