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使用的主从模式&…

hive sql常用函数

目录 一、数据类型 二、基础运算 三、字符串函数 1、字符串长度函数: length() 2、字符串反转函数&#xff1a;reverse 3、字符串连接函数 4、字符串截取函数 5、字符串分割函数&#xff1a;split 6、字符串查找函数 7、ascii 8、base64 9、character_length 10、c…

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 智能指针是否是线程安全的? 三、其他常见的各种锁四、…

dockerfile ENTRYPOINT 执行.sh脚本提示找不到文件或文件不存在 No such file or directory

我这里记录的是我遇到的一种特殊情况&#xff0c;如果你也遇到了这个问题&#xff0c;且都试了在百度中找到的解决方法还没有解决可以看看是不是和我遇到的问题一样。 在Dockerfile中&#xff0c;我ADD了两个文件&#xff0c;一个是jar包&#xff0c;一个是一个执行jar包的.sh…

proto与json的互相转换

proto与json的互相转换 proto使用proto python dict和messagepython message序列化golangmessage序列化message转json proto使用 生成逻辑请参考 https://blog.csdn.net/qq_43645782/article/details/127112663 proto syntax "proto3";message testRequest {stri…

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

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

c语言突击函数

函数 1.函数&#xff1a;是具有一定功能的程序块&#xff0c;是c语言的基本组成单位 2.函数的定义&#xff1a;[函数类型] 函数名 &#xff08;形式参数&#xff09; 函数不可以嵌套定义&#xff0c;但是可以嵌套调用 3.函数名缺省返回值&#xff0c;默认int&#xff1b; 4…

使用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…

学堂云《信息检索与科技写作》单元测试考核答案

注&#xff1a;不含主观题 第1题 判断题 (1分) 信息检索与科技写作课程分别在工科、理科和文科三个大学科方向上进行了有针对性地开设。 正确答案&#xff1a; 对 第2题 多选题 (2分) 为什么要强调“检索”&#xff1f; A 信息爆炸B 文献浩如烟海C 提高效率D 科技迅…

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

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)…

LRU 是什么?如何实现? 什么是堆内存?参数如何设置?

文章目录 LRU 是什么&#xff1f;如何实现&#xff1f;什么是堆内存&#xff1f;参数如何设置&#xff1f; LRU 是什么&#xff1f;如何实现&#xff1f; 最近最少使用策略 LRU&#xff08;Least Recently Used&#xff09;是一种缓存淘汰算法&#xff0c;是一种缓存淘汰机制。…

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

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

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

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