【雕爷学编程】MicroPython手册之 REPL 原始粘贴模式

在这里插入图片描述

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 原始粘贴模式是一种在原始模式下的附加模式,它包括流控制,并在收到代码时对其进行编译。这使得它在将代码高速传输到设备时更加健壮,并且在接收时也使用更少的 RAM,因为它不需要在编译前存储代码的逐字副本(与标准原始模式不同)。

REPL 原始粘贴模式的主要特点有:

原始粘贴模式可以用于编程用途,例如使用脚本或其他工具来与 MicroPython 交互。这样可以避免终端的回显或其他干扰,提高传输效率和准确性。
原始粘贴模式可以支持流量控制,即使用 XON/XOFF 协议来暂停或恢复数据的发送。这可以防止数据丢失或溢出,特别是在低速或不稳定的连接中。
原始粘贴模式可以在任何时候通过按 Ctrl-B 键退出,并返回到普通模式。

REPL 原始粘贴模式的应用场景有:

测试和调试:REPL 原始粘贴模式可以让用户快速地测试一些 Python 语句或函数,查看它们的运行结果和效果。用户可以从其他地方复制一些代码,并通过原始粘贴模式发送到 MicroPython 中运行,而不需要每次都保存和运行整个程序文件。
学习和探索:REPL 原始粘贴模式可以让用户实时地学习和探索 Python 语言和 MicroPython 库的特性和功能。用户可以从教程或示例中复制一些代码,并通过原始粘贴模式发送到 MicroPython 中运行,以便理解和掌握。
实验和创造:REPL 原始粘贴模式可以让用户尝试一些新的想法和创意,实现一些有趣的功能和效果。用户可以从自己或他人的代码中复制一些代码,并通过原始粘贴模式发送到 MicroPython 中运行,以便修改和优化。

REPL 原始粘贴模式需要注意的事项有:

区分模式:REPL 原始粘贴模式只在原始模式下有效,而在普通模式或粘贴模式下无效。用户需要根据不同的目的和需求,选择合适的模式,并注意切换和退出的方式。不同的模式有不同的提示符和行为,用户需要注意区分和理解。
格式正确:REPL 原始粘贴模式需要用户发送正确格式的 Python 代码,才能正确地编译和执行。如果发送的代码有缩进错误或语法错误,MicroPython 会提示异常信息,并返回到普通模式。
结果及时: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)

案例二:使用 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 秒闪烁一次

案例三:使用 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>
# <body>
# <div id="content">
# <h1>MicroPython</h1>
# <p class="tagline">Python for microcontrollers</p>
# ...
# </div>
# </body>
# </html>

案例四:导入多行代码块:

# 输入控制符号:Ctrl-E

# 在粘贴模式中导入多行代码块
"""
import machine
import time

led = machine.Pin(2, machine.Pin.OUT)

for _ in range(5):
    led.on()
    time.sleep(1)
    led.off()
    time.sleep(1)
"""
# 输入控制符号:Ctrl-D

在这个示例中,我们使用控制符号 Ctrl-E 进入原始粘贴模式。然后,我们将多行代码块使用三引号包围起来,以保持缩进结构。在粘贴完代码后,我们使用控制符号 Ctrl-D 结束原始粘贴模式。这样,我们可以一次性导入多行代码,而不必手动调整缩进。

案例五:定义函数和条件判断:

# 输入控制符号:Ctrl-E

# 在粘贴模式中定义函数和条件判断
"""
def is_even(number):
    if number % 2 == 0:
        return True
    else:
        return False

num = int(input("Enter a number: "))

if is_even(num):
    print("The number is even.")
else:
    print("The number is odd.")
"""
# 输入控制符号:Ctrl-D

在这个示例中,我们使用控制符号 Ctrl-E 进入原始粘贴模式。然后,我们将函数定义和条件判断的代码块使用三引号包围起来。在粘贴完代码后,我们使用控制符号 Ctrl-D 结束原始粘贴模式。这样,我们可以一次性定义函数和条件判断,而不必手动调整缩进。

案例六:创建列表和字典:

# 输入控制符号:Ctrl-E

# 在粘贴模式中创建列表和字典
"""
fruits = [
    'apple',
    'banana',
    'orange',
    'grape'
]

person = {
    'name': 'John',
    'age': 25,
    'location': 'New York'
}

print(fruits)
print(person)
"""
# 输入控制符号:Ctrl-D

在这个示例中,我们使用控制符号 Ctrl-E 进入原始粘贴模式。然后,我们将列表和字典的创建代码块使用三引号包围起来。在粘贴完代码后,我们使用控制符号 Ctrl-D 结束原始粘贴模式。这样,我们可以一次性创建列表和字典,而不必手动调整缩进。这些示例展示了 MicroPython REPL 的原始粘贴模式的用法。通过进入原始粘贴模式,您可以一次性粘贴多行代码而不必担心缩进问题。请注意,在粘贴完成后,使用控制符号结束原始粘贴模式。

案例七:进入原始粘贴模式并粘贴代码块:

>>> import uos
>>> uos.enter_raw_repl()  # 进入原始粘贴模式
=== Entering raw REPL mode... ===
>>> # 粘贴以下代码块
>>> for i in range(5):
...     print('Number:', i)
...
>>> # 粘贴结束后按 Ctrl+D 退出原始粘贴模式
=== Exit raw REPL mode ===

在上述示例中,我们先导入了 uos 模块,并使用 uos.enter_raw_repl() 函数进入原始粘贴模式。然后,我们可以粘贴多行代码块。在这个例子中,我们粘贴了一个简单的 for 循环,打印出数字 0 到 4。最后,按下 Ctrl+D 键退出原始粘贴模式。

案例八:使用原始粘贴模式加载脚本文件:

>>> import uos
>>> uos.enter_raw_repl()  # 进入原始粘贴模式
=== Entering raw REPL mode... ===
>>> # 粘贴以下代码块
>>> with open('script.py') as f:
...     code = f.read()
... exec(code)
...
>>> # 粘贴结束后按 Ctrl+D 退出原始粘贴模式
=== Exit raw REPL mode ===

在上述示例中,我们使用 uos.enter_raw_repl() 函数进入原始粘贴模式。然后,我们使用 open() 函数打开一个名为 script.py 的脚本文件,并将其内容读取到一个字符串变量 code 中。接下来,我们使用 exec() 函数执行该脚本代码。最后,按下 Ctrl+D 键退出原始粘贴模式。

案例九:在原始粘贴模式下定义函数:

>>> import uos
>>> uos.enter_raw_repl()  # 进入原始粘贴模式
=== Entering raw REPL mode... ===
>>> # 粘贴以下代码块
>>> def add(a, b):
...     return a + b
...
>>> # 粘贴结束后按 Ctrl+D 退出原始粘贴模式
=== Exit raw REPL mode ===

在上述示例中,我们使用 uos.enter_raw_repl() 函数进入原始粘贴模式。然后,我们可以粘贴多行代码块。在这个例子中,我们定义了一个简单的函数 add(),它接受两个参数并返回它们的和。最后,按下 Ctrl+D 键退出原始粘贴模式。请注意,在原始粘贴模式下,您可以粘贴多行代码块,并且缩进会被正确处理,无需手动输入每一行的缩进。这使得在 MicroPython REPL 中加载和执行多行代码变得更加方便。

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

【雕爷学编程】MicroPython手册之 REPL 原始粘贴模式_第1张图片

你可能感兴趣的:(MicroPython手册,单片机,嵌入式硬件,python,MicroPython,REPL,交互式解释器,REPL,原始粘贴模式)