【雕爷学编程】MicroPython手册之 REPL 软复位

本文介绍了MicroPython,一种专为嵌入式系统设计的轻量级Python解释器,其特点包括语法兼容、硬件访问、模块系统和原生代码生成。文章详细阐述了REPL软复位功能,用于测试、调试、学习和实验,以及在不同场景下的应用和注意事项。
摘要由CSDN通过智能技术生成

在这里插入图片描述

MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述
MicroPython 的 REPL 软复位是一种可以让用户在任何时候重置 Python 解释器的功能,它可以清除所有的变量、函数、模块和状态,恢复到初始状态。REPL 的全称是 Read-Evaluate-Print-Loop,即读取-求值-打印-循环的过程。

REPL 软复位的主要特点有:

当用户想要重置 Python 解释器时,可以按 Ctrl-D 键从 REPL 执行软复位,或者在脚本中执行以下命令:import sys; sys.exit() 或 machine.soft_reset()。这会导致 MicroPython 重新启动,并显示版本信息和提示符。
软复位只会影响 Python 解释器的状态,不会影响硬件外围设备的状态。例如,如果用户在软复位前设置了某个引脚为输出模式,并控制了 LED 灯的亮灭,那么软复位后,该引脚仍然保持输出模式,LED 灯仍然保持原来的状态。
软复位可以用于清除内存中的垃圾数据,释放一些资源,提高运行效率。也可以用于解决一些异常或错误,恢复正常运行。

REPL 软复位的应用场景有:

测试和调试:REPL 软复位可以让用户快速地测试一些 Python 语句或函数,查看它们的运行结果和效果。如果用户想要重新开始测试,或者遇到了一些问题,可以使用软复位来清除所有的状态,并恢复到初始状态。
学习和探索:REPL 软复位可以让用户实时地学习和探索 Python 语言和 MicroPython 库的特性和功能。如果用户想要取消之前的操作,或者尝试不同的代码,可以使用软复位来重置 Python 解释器,并重新导入需要的模块。
实验和创造:REPL 软复位可以让用户尝试一些新的想法和创意,实现一些有趣的功能和效果。如果用户想要修改或优化自己的代码,或者加载不同的程序文件,可以使用软复位来清空之前的代码,并重新编译和执行。

REPL 软复位需要注意的事项有:

区分模式:REPL 软复位只在普通模式下有效,而在粘贴模式或原始模式下无效。用户需要根据不同的目的和需求,选择合适的模式,并注意切换和退出的方式。不同的模式有不同的提示符和行为,用户需要注意区分和理解。
保存数据:REPL 软复位会清除所有的变量、函数、模块和状态,包括用户自定义或导入的内容。如果用户想要保留一些数据或结果,可以使用文件系统或其他方法来存储,否则软复位后会丢失。
控制硬件:REPL 软复位不会影响硬件外围设备的状态,例如引脚、定时器、串口等。如果用户想要重置硬件外围设备的状态,需要使用相应的模块或函数来进行设置或关闭。

以下是 MicroPython 的 REPL 软复位的几个实际运用程序参考代码案例:

案例一:使用 math 模块计算圆周率

# 导入 math 模块
import math

# 定义一个函数,用于计算圆的周长和面积
def circle(radius):
    # 计算周长,公式为 2 * pi * r
    circumference = 2 * math.pi * radius
    # 计算面积,公式为 pi * r * r
    area = math.pi * radius * radius
    # 返回周长和面积
    return circumference, area

# 输入半径
r = float(input('请输入圆的半径: '))
# 调用函数,传入半径
c, a = circle(r)
# 打印结果
print('圆的周长为:', c)
print('圆的面积为:', a)

# 按 Ctrl-D 键执行软复位,清除所有的变量、函数、模块和状态
MPY: sync filesystems
MPY: soft reboot
MicroPython v1.17 on 2021-09-02; ESP32 module with ESP32
Type "help()" for more information.
>>> 

案例二:使用 machine 模块控制 LED 灯

# 导入 machine 模块
import machine

# 创建一个 Pin 对象,连接到 GPIO2 引脚,设置为输出模式
led = machine.Pin(2, machine.Pin.OUT)

# 定义一个函数,用于切换 LED 灯的状态
def toggle_led():
    # 设置 Pin 对象的值为其反值
    led.value(not led.value())

# 创建一个 Timer 对象,设置为周期性模式
timer = machine.Timer(-1)

# 初始化 Timer 对象,每隔 1 秒执行一次 toggle_led 函数
timer.init(period=1000, mode=machine.Timer.PERIODIC, callback=lambda t: toggle_led())

# 程序运行后,LED 灯会每隔 1 秒闪烁一次

# 按 Ctrl-D 键执行软复位,清除所有的变量、函数、模块和状态,但不会影响 LED 灯的状态
MPY: sync filesystems
MPY: soft reboot
MicroPython v1.17 on 2021-09-02; ESP32 module with ESP32
Type "help()" for more information.
>>> 

案例三:使用 urequests 模块获取网页内容

# 导入 urequests 模块
import urequests

# 定义一个函数,用于获取网页内容
def get_web_content(url):
    # 发送 GET 请求到指定的网址,返回一个 Response 对象
    response = urequests.get(url)
    # 检查响应的状态码是否为 200,表示成功
    if response.status_code == 200:
        # 打印响应的文本内容
        print(response.text)
    else:
        # 打印响应的状态码和原因
        print('Error:', response.status_code, response.reason)
    # 关闭 Response 对象
    response.close()

# 调用 get_web_content 函数,获取 MicroPython 官网的内容 [^1^][1]
get_web_content('http://micropython.org')
# 程序运行后,会显示类似如下的输出:
# <!DOCTYPE html>
# <html>
# <head>
# <meta charset="utf-8" />
# <title>MicroPython - Python for microcontrollers</title>
# <link rel="stylesheet" href="micropython.css" />
# </head>

案例四:执行软复位:

import machine

# 执行软复位
machine.reset()

在这个示例中,我们导入 machine 模块,并使用 machine.reset() 函数执行软复位。当您在 REPL 中输入这行代码并按下回车键时,MicroPython 设备将进行软复位并重新启动。

案例五:在特定条件下执行软复位:

import machine

# 检查某个条件
if condition:
    # 执行软复位
    machine.reset()

在这个示例中,我们在某个条件(condition)成立时执行软复位。根据您的具体需求和应用场景,您可以设置适当的条件,当条件满足时,使用 machine.reset() 函数进行软复位。

案例六:捕获异常后执行软复位:

import machine

try:
    # 执行一些操作
    pass
except Exception as e:
    print("An exception occurred:", e)
    # 执行软复位
    machine.reset()

在这个示例中,我们使用 try…except 块来捕获异常。如果在执行一些操作时发生异常,我们打印异常信息,并使用 machine.reset() 函数执行软复位。这可以是一种应对异常情况的方式,确保在出现问题时重新启动设备。这些示例展示了如何在 MicroPython REPL 中使用软复位功能。通过执行软复位,您可以重新启动 MicroPython 设备,并在需要时处理特定条件或异常情况。请注意,在执行软复位之前,确保您已经保存了重要的数据和状态,以免丢失。

案例七:使用 machine.reset() 函数进行软复位:

import machine
machine.reset()

在上述示例中,我们导入 machine 模块,并调用 reset() 函数来执行软复位操作。这将重新启动 MicroPython 解释器。

案例八:使用 sys.exit() 函数进行软复位:

import sys
sys.exit()

在上述示例中,我们导入 sys 模块,并调用 exit() 函数来执行软复位操作。这将退出当前的 Python 进程,并重新启动 MicroPython 解释器。

案例九:使用 os.uname() 和 os.exec() 函数进行软复位:

import os

# 获取当前系统信息
uname = os.uname()

# 执行软复位
os.exec(uname[0])

在上述示例中,我们导入 os 模块,并使用 uname() 函数获取当前系统信息。然后,我们使用 exec() 函数来执行软复位操作,传入系统信息中的名称(uname[0])作为参数。这将重新启动 MicroPython 解释器。请注意,这些示例是在 MicroPython REPL 中直接输入和执行的。在实际应用中,您可以将这些代码存储在 Python 脚本文件中,并通过连接到 MicroPython 设备的串行终端或使用 MicroPython 开发工具(如 Thonny、uPyCraft)来执行这些脚本。软复位是一种方便的方法,可用于重新启动 MicroPython 解释器,以清除现有的状态并重新开始执行程序。

请注意,以上示例仅供参考,具体的使用方法可能因不同的硬件平台和MicroPython版本而有所差异。在实际编程中,你需要根据你所使用的硬件和具体需求进行适当的调整。

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

驴友花雕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值