micropython+ESP32入门教程——PWM控制LED灯亮度,实现呼吸灯效果

所需硬件

1、电脑

2、ESP32开发板

3、USB数据线(要能传输的线,不能是只能充电的线)

前提

完成环境部署,具体可参考文章micropython ESP32环境部署-CSDN博客

了解Thoney基本操作,具体可参考文章Thonny安装_thonny安装教程-CSDN博客

一、PWM概念

大多数GPIO引脚只能输出高低电平,即只能输出+5V或0V,如果想输出任意电压,比如2.1V,就显得力不从心了。

于是我们想到,如果让一段时间内,一会输出高电平,一会输出低电平,平均下来的电压不就介于高电平和低电平之间吗,通过控制高电平占总时间的比例(占空比),实现输出任意不大于高电平的电压。

此即脉冲宽度调制(Pulse width modulation,PWM)技术,通过调节占空比(高电平占总时间的比例),达到设置任意电压的等效效果。从而实现等效模拟量的输出,这在LED亮度控制、风扇转速控制、舵机控制等起到非常大的作用。

如下图的脉冲信号,一个脉冲周期为T,在脉冲周期内,有t时间为高电平,高电平电压为5V,则其占空比为 t/T * 100%,等效电压为5 * t / T

二、ESP32中PWM的用法

ESP32自带对PWM的支持,通过,led = machine.PWM(machine.Pin(2)) 可将引脚2设置为PWM输出,然后设置其频率(1s内多少个脉冲周期)和占空比即可。

三、PWM控制灯的亮度
from machine import Pin,PWM
led = PWM(Pin(2))
led.freq(1000)
led.duty(256) 

代码共4行

第1行

从machine包中引入Pin和PWM

第2行

定义变量led,指向采用PWM控制的GPIO2引脚,GPIO2引脚即ESP32自带的蓝色LED灯

第3行

配置 PWM的频率为1000hz,第2行和第3行也可以合并为1行 led = PWM(Pin(2), freq=1000)

第4行

配置占空比,duty函数用于配置占空比,输入值为0-1023的一个整数,占空比为 输入值/1024 * 100%,如果输入256,占空比为25%

通过改变duty函数的输入,达到控制LED灯亮度的效果

四、PWM实现呼吸灯

呼吸灯是指由亮逐渐到暗,再由暗逐渐到亮的灯,就好像灯会呼吸一般。可以通过设置不同时刻的占空比达到呼吸灯的效果,其代码如下

from machine import Pin,PWM
import time
led = PWM(Pin(2))
led.freq(1000)
while True:
    for i in range(0,1023):
        led.duty(i)
        time.sleep_ms(2)
    for i in range(1023,0,-1):
        led.duty(i)
        time.sleep_ms(2)

在一个while循环中,先后执行两个for循环,第一个for循环将占空比从最小逐渐调到最大,此时LED灯逐渐变亮,第二个for循环将占空比从最大逐渐调到最小,此时LED灯逐渐变暗,于是最终看到的效果就是灯逐渐变亮、逐渐变暗、逐渐变亮、逐渐变暗……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值