树莓派 Pico MicroPython 基础实例:PWM 控制 LED 呼吸灯

以下实验中所有代码开源在我们提供的资料包中 elegance-devkit v1\Demo\26 PWM_LED 文件夹找到。
这里,我们使用 PWM 信号来控制板载 LED 呼吸灯并打印 PWM 占空比,代码如下:

# Python env   : MicroPython v1.23.0
# -*- coding: utf-8 -*-
# @Time    : 2024/7/10 下午10:42
# @Author  : 李清水
# @File    : main.py
# @Description : PWM定时器实验,使用PWM完成呼吸灯

# ======================================== 导入相关模块 ========================================

# 导入硬件相关的模块
from machine import Pin, PWM, Timer
# 导入时间相关模块
import time

# ======================================== 全局变量 ============================================

# PWM占空比参数系数
pwm_duty = 0
# 占空比
value    = 0

# ======================================== 功能函数 ============================================

def breathing(t:Timer) -> None:
    '''
​    呼吸灯函数,通过定时调整 PWM 占空比实现 LED 的呼吸效果。

​    该函数通过定时器周期性调用,动态调整 PWM 占空比,使 LED 亮度从暗到亮再到暗,形成呼吸效果。

​    Args:
​        t (machine.Timer): 定时器实例,用于触发呼吸灯效果。

​    Returns:
​        None
​    '''
​    ​# 声明全局变量
    global pwm_duty,value,LED

    # 调整LED的占空比,占空比为value / 65535
    value = int(abs(32000- pwm_duty*1000))
    LED.duty_u16(value)

    # 根据当前占空比计算下一个占空比
    pwm_duty = (pwm_duty + 1) % 64

    # 打印输出PWM占空比
    print('PWM duty :', LED.duty_u16() / 65535)

# ======================================== 自定义类 ============================================

# ======================================== 初始化配置 ==========================================

# 上电延时3s
time.sleep(3)
# 打印调试信息
print('FreakStudio:Using PWM to control LED')

# 配置呼吸LED引脚
LED = PWM(Pin(25), freq=100, duty_u16=0)

# 创建一个定时器对象
timer = Timer(-1)
# 定时器初始化:周期运行,回调函数为breathing,过100ms执行一次
timer.init(period=100, mode=Timer.PERIODIC, callback=breathing)

# ========================================  主程序  ============================================

# 主程序
while True:
    pass

可以看到,我们通过定时器每隔 100ms 调用一次 breathing 函数,该函数不断调整 LED 的占空比,从而实现呼吸灯的效果。这里需要注意的点是,我们在 breathing 方法中声明了全局变量来确保正常运行:

# 声明全局变量
global pwm_duty,value,LED

微信图片_20260608110628_10_4.png

烧录代码,我们可以看到 LED 灯实现了呼吸灯的效果,从明到暗,再由暗到明:

06c73126-a256-4efd-8b90-2174bd0da971.png

同时终端输出了 PWM 占空比的数据:

75ca62c6-76bc-4b66-b7dc-cead625d7e59.png

mmexport1780888384989.gif

posted @ 2026-08-31 18:50  FreakStudio  阅读(6)  评论(0)    收藏  举报