树莓派 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

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

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



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