【雕爷学编程】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 是一种交互式的 Python 解释器模式,它可以让用户在 MicroPython 环境中直接输入和执行 Python 代码,并查看结果。REPL 的全称是 Read-Evaluate-Print-Loop,即读取-求值-打印-循环的过程。

REPL 的主要特点有:

自动缩进:当输入以冒号结尾的 Python 语句时(例如 if、for、while),REPL 会自动缩进下一行的光标,方便输入复合语句。如果按退格键,则会撤消一级缩进。如果光标回到开头,按回车键则会执行输入的代码。
自动完成:当输入的内容对应于某些名称的开头时,按 Tab 键会显示可能的补全选项。这样可以节省输入时间,也可以避免拼写错误。
中断运行:当程序正在运行时,可以按 Ctrl-C 键来中断程序。这会引发一个 KeyboardInterrupt 异常,将用户带回到 REPL。这样可以在程序出现死循环或其他问题时及时停止运行。
粘贴模式:当用户想要将一些代码粘贴到终端窗口中时,可以按 Ctrl-E 键进入粘贴模式。这会关闭自动缩进功能,并将提示符从 >>> 改为 ===。粘贴完代码后,按 Ctrl-D 键退出粘贴模式并执行代码。这样可以方便地将已有的代码复制到 REPL 中运行。
软重置:软重置会重置 Python 解释器,但不会影响用户连接到 MicroPython 板的方式(USB 串口或 WiFi)。用户可以通过按 Ctrl-D 键从 REPL 执行软重置,或者通过执行 machine.soft_reset() 命令来执行软重置。软重置会清除所有已定义的变量和函数,恢复到初始状态。
特殊变量 _:REPL 会将上一条语句的结果存储在变量 _ 中。用户可以使用下划线将结果保存在其他变量中,或者进行后续的计算。
原始模式:原始模式(也称为原始 REPL)是一种类似于粘贴模式的模式,但是关闭了回显,并具有可选的流量控制。用户可以使用 Ctrl-A 键进入原始模式。然后发送 Python 代码,然后是 Ctrl-D 键。Ctrl-D 键将通过“OK”确认,然后将编译和执行 Python 代码。原始模式主要用于编程用途,而不是人工交互。

REPL 的应用场景有:

测试和调试:REPL 可以让用户快速地测试一些 Python 语句或函数,查看它们的运行结果和效果。这样可以方便地进行调试和修改,而不需要每次都保存和运行整个程序文件。
学习和探索:REPL 可以让用户实时地学习和探索 Python 语言和 MicroPython 库的特性和功能。用户可以随时输入帮助命令或文档字符串来查看某个对象或模块的用法和说明。用户也可以使用 dir() 函数来查看某个对象或模块的属性和方法。
实验和创造:REPL 可以让用户尝试一些新的想法和创意,实现一些有趣的功能和效果。用户可以利用 MicroPython 板上的各种外设和传感器,与物理世界进行交互和控制。

REPL 需要注意的事项有:

输入完整:REPL 需要用户输入完整的 Python 语句或表达式,才能正确地执行和求值。如果输入不完整或不合法,REPL 会提示错误或继续等待输入,直到输入完整为止。
区分模式:REPL 有多种模式,例如普通模式、粘贴模式、原始模式等。用户需要根据不同的目的和需求,选择合适的模式,并注意切换和退出的方式。不同的模式有不同的提示符和行为,用户需要注意区分和理解。
保留结果:REPL 的运行结果只会显示在终端窗口中,不会保存到文件或其他地方。如果用户想要保留结果,可以使用变量或函数来存储,或者将结果复制到其他地方。用户也可以使用 print() 函数来打印结果,以便查看和记录。

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

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

案例二:使用 network 模块连接到 WiFi 网络

# 导入 network 模块
import network

# 创建一个 WLAN 对象,设置为 STA 模式
wlan = network.WLAN(network.STA_IF)

# 定义一个函数,用于连接到指定的 WiFi 网络
def connect_wifi(ssid, password):
    # 激活 WLAN 对象
    wlan.active(True)
    # 如果已经连接到 WiFi 网络,就断开连接
    if wlan.isconnected():
        wlan.disconnect()
    # 连接到指定的 WiFi 网络
    wlan.connect(ssid, password)
    # 等待连接成功
    while not wlan.isconnected():
        pass
    # 打印网络配置信息
    print('Network config:', wlan.ifconfig())

# 定义一个函数,用于断开 WiFi 网络
def disconnect_wifi():
    # 如果已经连接到 WiFi 网络,就断开连接
    if wlan.isconnected():
        wlan.disconnect()
    # 关闭 WLAN 对象
    wlan.active(False)

# 调用 connect_wifi 函数,连接到 Network1 网络,密码为 password
connect_wifi('Network1', 'password')
# 程序运行后,会显示类似如下的输出:
# Network config: ('192.168.1.100', '255.255.255.0', '192.168.1.1', '8.8.8.8')

# 调用 disconnect_wifi 函数,断开 WiFi 网络
disconnect_wifi()

案例三:使用 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 官网的内容
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>

案例四:实时监测温度并输出到 REPL:

import machine
import utime

# 温度传感器引脚连接到 GPIO 4
sensor_pin = machine.Pin(4)
sensor = machine.ADC(sensor_pin)

while True:
    # 读取温度传感器的值
    raw_value = sensor.read_u16()
    
    # 将原始值转换为实际温度
    voltage = raw_value * 3.3 / 65535  # 将原始值转换为电压
    temperature = (voltage - 0.5) * 100  # 根据传感器特性转换为温度
    
    # 输出温度到 REPL
    print("Temperature: {:.2f}°C".format(temperature))
    
    # 延迟一段时间
    utime.sleep(1)

这个示例中,我们使用温度传感器连接到 GPIO 引脚 4,并使用 ADC(Analog-to-Digital Converter)读取传感器的值。在一个无限循环中,我们读取传感器的原始值,并将其转换为实际温度值。然后,使用 print() 函数将温度值输出到 REPL 中,实时监测温度变化。

案例五:控制 LED 灯的亮灭:

import machine

# LED 引脚连接到 GPIO 2
led_pin = machine.Pin(2, machine.Pin.OUT)

while True:
    # 从 REPL 中接收命令
    command = input("Enter command (on/off): ")
    
    # 根据命令控制 LED 灯
    if command == "on":
        led_pin.on()
    elif command == "off":
        led_pin.off()
    else:
        print("Invalid command")

在这个示例中,我们将 LED 灯连接到 GPIO 引脚 2,并将其配置为输出模式。通过一个无限循环,我们从 REPL 中接收命令,并根据命令控制 LED 灯的状态。如果输入的命令是 “on”,则打开 LED 灯;如果输入的命令是 “off”,则关闭 LED 灯;否则,输出 “Invalid command”。

案例六:读取按钮状态并输出到 REPL:

import machine

# 按钮引脚连接到 GPIO 3
button_pin = machine.Pin(3, machine.Pin.IN)

while True:
    # 读取按钮状态
    button_state = button_pin.value()
    
    # 输出按钮状态到 REPL
    print("Button state:", button_state)

在这个示例中,我们将按钮连接到 GPIO 引脚 3,并将其配置为输入模式。在一个无限循环中,我们读取按钮的状态,并使用 print() 函数将按钮状态输出到 REPL 中,实时监测按钮的按下和释放状态。这些示例展示了 MicroPython REPL 的实际运用,您可以通过 REPL 与 MicroPython 进行交互,实时监测传感器数据、控制外部设备等。请根据具体的硬件和需求进行相应的调整。

案例七:使用 REPL 进行简单的算术运算:

# 在 MicroPython REPL 中输入以下代码
>>> 2 + 3
5
>>> 4 * 5
20
>>> 10 / 2
5.0

这个示例展示了在 MicroPython REPL 中进行简单的算术运算。您可以直接在 REPL 中输入算术表达式,并按回车键执行。MicroPython 将计算并打印结果。

案例八:在 REPL 中执行函数调用:

# 定义一个简单的函数
>>> def greet(name):
...     print("Hello, " + name + "!")
...

# 在 MicroPython REPL 中调用函数
>>> greet("Alice")
Hello, Alice!
>>> greet("Bob")
Hello, Bob!

这个示例演示了如何在 MicroPython REPL 中定义一个简单的函数,并通过函数调用来执行它。您可以在 REPL 中输入函数定义并按回车键执行。然后,在 REPL 中调用该函数,并传递相应的参数。

案例九:使用 REPL 进行硬件交互:

# 导入 MicroPython 的 machine 模块
>>> import machine

# 创建一个 LED 对象,将引脚 2 配置为输出
>>> led = machine.Pin(2, machine.Pin.OUT)

# 在 MicroPython REPL 中控制 LED
>>> led.on()
>>> led.off()

这个示例展示了如何使用 MicroPython REPL 与硬件进行交互。首先,导入 MicroPython 的 machine 模块,该模块提供了与硬件交互的功能。然后,创建一个 LED 对象,并将引脚 2 配置为输出。接下来,您可以在 REPL 中使用 led.on() 和 led.off() 方法来控制 LED 的开关状态。请注意,以上示例中的代码是在 MicroPython REPL 中直接输入和执行的。在实际应用中,您可以将这些代码存储在 Python 脚本文件中,并通过连接到 MicroPython 设备的串行终端或使用 MicroPython 开发工具(如 Thonny、uPyCraft)来执行这些脚本。使用 REPL 可以方便地与 MicroPython 设备进行交互,进行实时的测试、调试和控制。

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

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

驴友花雕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值