【雕爷学编程】MicroPython手册之 pyboard 特定端口库 pyb.LED

在这里插入图片描述

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进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。

在这里插入图片描述

pyboard是一个紧凑而强大的电子开发板,运行MicroPython。它通过USB连接到您的PC,为您提供一个USB闪存驱动器来保存Python脚本,以及用于即时编程的串行Python提示符(REPL)。需要微型 USB 电缆。适用于 Windows、Mac 和 Linux。

MicroPython是对Python(版本3.4)编程语言的完全重写,因此它适合并在微控制器上运行。它包括许多优化,因此它可以高效运行并使用很少的 RAM。

MicroPython在pyboard上运行裸机,本质上是一个Python操作系统。内置 pyb 模块包含用于控制板上可用外设的函数和类,例如 UART、I2C、SPI、ADC 和 DAC。观看此视频,了解 pyboard 的概述。

在这里插入图片描述

MicroPython 的 pyb.LED 是一个用于控制单个 LED(发光二极管)的类,它可以让你在板子上的 LED 上实现开关和亮度调节。它的基本定义如下:

你可以通过传入一个 LED 编号或别名来创建一个 pyb.LED 的实例,例如 led = pyb.LED(1) 或 led = pyb.LED(‘RED’)。LED 编号或别名可以是 1-4,分别对应红色、绿色、黄色和蓝色的 LED。
你可以使用 led.on() 方法来打开 LED,达到最大亮度。
你可以使用 led.off() 方法来关闭 LED。
你可以使用 led.toggle() 方法来切换 LED 的状态,如果 LED 是开的,就关掉,如果是关的,就打开。
你可以使用 led.intensity() 方法来获取或设置 LED 的亮度。亮度的范围是 0(关闭)到 255(完全开启)。如果没有给出参数,就返回 LED 的亮度。如果给出参数,就设置 LED 的亮度,并返回 None。

MicroPython 的 pyb.LED 是一个用于控制单个 LED(发光二极管)的类,它可以让你在板子上的 LED 上实现开关和亮度调节。它的主要特点、应用场景和注意事项如下:

它的主要特点是:

它可以支持四个 LED,分别是红色、绿色、黄色和蓝色的 LED,每个 LED 有一个编号和别名,可以用来创建 pyb.LED 的实例。
它可以支持 LED 的开关和亮度调节,可以用来实现不同的效果,例如闪烁、呼吸、渐变等。
它还可以支持 LED 的切换,可以用来实现一些简单的逻辑或反馈,例如开关状态、错误提示、警告信号等。

它的应用场景有:

可以用来显示各种信息,例如电源状态、网络状态、温度状态等。
可以用来实现各种效果,例如心跳灯、流水灯、彩虹灯等。
可以用来实现一些有趣的项目或游戏,例如摩尔斯电码、密码锁、猜拳游戏等。

它的注意事项有:

在使用 pyb.LED 时,应选择合适的 LED 编号或别名,并注意 LED 的颜色和位置。
在使用 pyb.LED 时,应注意 LED 的亮度范围和调节方式,并根据需要设置合适的亮度值。
在使用 pyb.LED 时,应注意 LED 的电流和功率消耗,并避免过载或过热。

以下是 MicroPython 的 pyb.LED 的几个实际运用程序案例:

案例1:心跳灯:通过使用红色 LED 来模拟心跳的效果,使用亮度调节来实现呼吸的效果。代码如下::

import pyb

# 初始化红色 LED
led = pyb.LED(1) # 假设红色 LED 的编号为 1

# 主循环
while True:
    # 循环改变 LED 的亮度,从 0 到 255 再到 0
    for i in range(256):
        # 设置 LED 的亮度为 i
        led.intensity(i)
        # 延时一段时间,控制呼吸速度
        pyb.delay(2)
    for i in range(256):
        # 设置 LED 的亮度为 255 - i
        led.intensity(255 - i)
        # 延时一段时间,控制呼吸速度
        pyb.delay(2)

案例2:流水灯:通过使用四个 LED 来模拟流水的效果,使用开关和延时来实现移动的效果。代码如下::

import pyb

# 初始化四个 LED
leds = [pyb.LED(i) for i in range(1, 5)] # 假设四个 LED 的编号分别为 1, 2, 3, 4

# 主循环
while True:
    # 循环点亮每个 LED,并关闭前一个 LED
    for i in range(4):
        # 点亮第 i 个 LED
        leds[i].on()
        # 如果不是第一个 LED,就关闭前一个 LED
        if i > 0:
            leds[i-1].off()
        # 延时一段时间,控制移动速度
        pyb.delay(200)
    # 关闭最后一个 LED
    leds[3].off()

案例3:猜拳游戏:通过使用三个 LED 来模拟猜拳的结果,使用触摸传感器来输入用户的选择。代码如下::

import pyb

# 初始化三个 LED
leds = [pyb.LED(i) for i in range(1, 4)] # 假设三个 LED 的编号分别为 1, 2, 3
# 定义三个 LED 对应的猜拳选项,分别是剪刀、石头、布
options = ['scissors', 'rock', 'paper']
# 定义一个字典,表示猜拳的胜负关系
rules = {
    
    
    'scissors': 'paper',
    'rock': 'scissors',
    'paper': 'rock'
}

# 初始化触摸传感器
touch = pyb.TouchScreen() # 使用板子上的触摸传感器

# 定义一个函数,用于获取用户的输入
def get_user_input():
    # 循环等待用户触摸屏幕
    while True:
        # 如果检测到触摸
        if touch.z > 100:
            # 获取触摸的位置,并将其映射到三个区域之一,分别对应三个 LED
            x = touch.x * 3 // touch.Z_MAX
            # 返回用户选择的选项
            return options[x]

# 定义一个函数,用于生成电脑的输入
def get_computer_input():
    # 随机选择一个选项
    return random.choice(options)

# 定义一个函数,用于判断猜拳的结果
def judge(user, computer):
    # 如果用户和电脑选择相同,返回平局
    if user == computer:
        return 'draw'
    # 如果用户选择的选项能赢电脑选择的选项,返回胜利
    if rules[user] == computer:
        return 'win'
    # 否则,返回失败
    return 'lose'

# 定义一个函数,用于显示猜拳的结果
def show_result(user, computer, result):
    # 清空所有 LED 的状态
    for led in leds:
        led.off()
    # 根据用户和电脑的选择,点亮相应的 LED,使用白色
    leds[options.index(user)].on()
    leds[options.index(computer)].on()
    # 根据猜拳的结果,闪烁相应的 LED,使用白色
    if result == 'win':
        leds[options.index(user)].toggle()
    elif result == 'lose':
        leds[options.index(computer)].toggle()
    elif result == 'draw':
        for led in leds:
            led.toggle()

# 主循环
while True:
    # 获取用户和电脑的输入
    user = get_user_input()
    computer = get_computer_input()
    # 判断猜拳的结果
    result = judge(user, computer)
    # 显示猜拳的结果,并等待一段时间
    show_result(user, computer, result)
    pyb.delay(3000)

案例4:控制LED灯闪烁:

import pyb

# 初始化LED对象
led = pyb.LED(1)

# 控制LED灯闪烁
led.toggle()
pyb.delay(1000)
led.toggle()
pyb.delay(1000)

在这个例子中,我们使用pyb.LED()函数初始化LED对象,并指定要使用的LED灯(在这里是1号灯)。然后,我们使用toggle()方法切换LED灯的状态,使其闪烁。通过使用pyb.delay()函数,我们设置了LED灯亮和灭的时间间隔,以控制闪烁的频率。

案例5:控制多个LED灯同时闪烁::

import pyb

# 初始化LED对象
led1 = pyb.LED(1)
led2 = pyb.LED(2)
led3 = pyb.LED(3)

# 控制多个LED灯同时闪烁
for _ in range(5):
    led1.toggle()
    led2.toggle()
    led3.toggle()
    pyb.delay(500)

在这个例子中,我们使用pyb.LED()函数分别初始化三个LED对象,分别表示不同的LED灯(在这里是1号、2号和3号灯)。然后,我们使用toggle()方法同时切换多个LED灯的状态,使它们同时闪烁。通过使用pyb.delay()函数,我们设置了每次闪烁的时间间隔。

案例6:控制LED灯的亮度::

import pyb

# 初始化LED对象
led = pyb.LED(1)

# 控制LED灯的亮度
for brightness in range(0, 256, 10):
    led.intensity(brightness)
    pyb.delay(100)

在这个例子中,我们使用pyb.LED()函数初始化LED对象,并指定要使用的LED灯(在这里是1号灯)。然后,我们使用intensity()方法来控制LED灯的亮度。通过循环,我们逐渐调整LED灯的亮度,从0到255,每次增加10。通过使用pyb.delay()函数,我们设置了每次亮度调整的时间间隔。

案例7:控制LED灯闪烁

import pyb
import time

# 创建LED对象
led = pyb.LED(1)

# 闪烁LED灯
while True:
    led.toggle()
    time.sleep(0.5)

这个示例程序创建了一个LED对象led,并将其连接到LED灯1。然后,在一个无限循环中,通过调用led.toggle()方法来切换LED灯的状态,实现LED灯的闪烁效果。使用time.sleep()方法可以控制闪烁的时间间隔。

案例8:按键控制LED灯开关

import pyb

# 创建LED对象
led = pyb.LED(1)

# 创建按键对象
switch = pyb.Switch()

# 按键控制LED灯开关
while True:
    if switch():
        led.on()
    else:
        led.off()

这个示例程序创建了一个LED对象led,并将其连接到LED灯1。然后,创建一个按键对象switch,用于检测按键状态。在一个无限循环中,通过调用switch()方法检测按键状态,如果按键按下,则调用led.on()方法打开LED灯;如果按键释放,则调用led.off()方法关闭LED灯。这样就实现了按键控制LED灯的开关功能。

案例9:使用PWM调节LED灯亮度

import pyb

# 创建LED对象
led = pyb.LED(1)

# 创建定时器对象
timer = pyb.Timer(2, freq=1000)

# 创建通道对象
channel = timer.channel(1, pyb.Timer.PWM, pin=pyb.Pin.board.X1)

# 使用PWM调节LED灯亮度
duty_cycle = 50  # 占空比,范围为0-100

while True:
    channel.pulse_width_percent(duty_cycle)

这个示例程序创建了一个LED对象led,并将其连接到LED灯1。然后,创建一个定时器对象timer,并配置其频率为1000Hz。接下来,通过调用timer.channel()方法创建一个PWM通道对象channel,将其连接到引脚X1,并设置通道模式为PWM。在一个无限循环中,通过调用channel.pulse_width_percent()方法来调节PWM的占空比,从而控制LED灯的亮度。duty_cycle变量表示占空比,范围为0-100,可以根据需求调整LED灯的亮度。

这些示例程序展示了pyb.LED类的用法,可以用于控制LED灯的闪烁、开关以及使用PWM调节LED灯的亮度。具体的应用场景和使用方式可能会根据实际需求而有所不同。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41659040/article/details/132884927