所需硬件
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灯逐渐变暗,于是最终看到的效果就是灯逐渐变亮、逐渐变暗、逐渐变亮、逐渐变暗……