实验所需物料如下:
ESP32 DEVKIT开发板、3x 5mm LED、3x 330欧姆电阻、面包板、跳线若干
ESP32带一个包含16通道LED PWM控制器,可配置以产生不同特性的PWM信号。
使用Arduino IDE进行LED调光的步骤如下:
1. 从0 to 15选择PWM channel。
2. 设置PWM频率,LED频率选择5000Hz较好。
3. 选择信号的占空比:,其分表率范围1-16bits。本项目使用8bit,这样可控制的LED亮度等级值为0-255。
4. 指定信号出现的GPIO or GPIOs:其函数为ledcAttachPin(GPIO, channel)。该函数具有两个变量,第一个GPIO用来输出信号,第二个表示产生信号的通道。
5. 使用PWM控制LED亮度,函数为ledcWrite(channel, dutycycle)。其中,第一个变量产生PWM信号,第一个变量是占空比。
点亮一个LED并调光时,将LED连接于GPIO 16引脚。
ESP32 DEVKIT模块有30个GPIOs,只要能用作输出,就可用作PWM引脚以连接LED。
代码如下:
const int ledPin = 16;
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
void setup(){
//设定的PWM信号频率为5000Hz,选择通道 0 来产生信号,信号的分辨率为8bits。
ledcSetup(ledChannel, freq, resolution);
//选择信号的GPIO引脚
ledcAttachPin(ledPin, ledChannel);
}
void loop(){
//增加PWM通道占空比(0 -> 255), LED将逐渐变亮
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
//减少PWM通道的占空比(255 -> 0), LED将逐渐变暗
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
}
调节LED亮度,须使用 ledcWrite() 函数。该函数有两个参数:产生信号的通道、duty cycle。注意,这里的 ledcWrite() 函数中产生信号的变量是通道,而不是GPIO。
确定板子和COM端口选择正确,把代码上传到 ESP32,就可以测试调光效果了。
也可以从相同通道的不同GPIO取得同样的信号,这需要将这些GPIOs连接到 setup() 的相同通道。以下我们对上述操作稍作改动,来通过同一通道PWN信号对3个LED进行调光控制。
代码如下:
const int ledPin = 16;
const int ledPin2 = 17;
const int ledPin3 = 5;
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
void setup(){
//设定的PWM信号频率为5000Hz,选择通道 0 来产生信号,信号的分辨率为8bits。
ledcSetup(ledChannel, freq, resolution);
//将多个引脚配置到同一个channel
ledcAttachPin(ledPin, ledChannel);
ledcAttachPin(ledPin2, ledChannel);
ledcAttachPin(ledPin3, ledChannel);
}
void loop(){
//增加PWM通道的占空比(0 -> 255), LED将逐渐变亮
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
//减少PWM通道的占空比(255 -> 0), LED将逐渐变暗
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
}
把修改后的代码上传到 ESP32,就可以测试者三个LED调光效果了。
由于所有GPIOs 输出了相同PWM信号,所有三个LED亮度的增加与减少是同时进行的,这样就产生了同步效果。
通过设置正确的信号属性,这种方法可用来控制其他PWM输出,如马达、LED 呼吸灯等。
中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
相信很多人都有把绿植给养死的经历,可能是浇水过多、忘记浇水、较长时间不在家不能浇水等,本文介绍一种可以灵活定制的智能浇花方案。
MicroPython 在 ESP32 上支持线程(Thread)功能,通过_thread模块实现。线程允许程序并发执行多个任务,适合处理需要同时运行的场景,例如传感器数据采集和网络通信。
掌控板3.0升级了主控,还主打AI。带有双麦克风阵列,增加了音频解码芯片,板载了一个1W喇叭,还把之前的单色屏幕换成了1.47寸的彩色屏幕,有更多的可玩性。
使用了 MicroPython 库,通过 定时器(Timer) 和 ADC(模数转换器) 功能来实时读取传感器数据。使用定时器可以实现高精度、非阻塞、低资源消耗的周期性任务,保证实时性和可靠性,特别适用于嵌入式系统中的多任务处理和低功耗场景。
ESP32的DAC函数可以实现真正的模拟输出。
ESP32 没有Arduino输出 PWM 的 analogWrite(pin, value) 方法,取而代之的 ESP32 有一个 LEDC 来实现PWM功能。
本书由少年创学院联合创始人兼院长、知名创客程晨撰写,以Arduino作为硬件平台,介绍了使用米思齐(Mixly)软件进行程序开发的方法。
machine.pwm是MicroPython中用于控制PWM输出的模块之一,它提供了一些方法和属性,用于设置和控制PWM输出的频率、占空比等参数,从而实现对各种应用场景的控制。
本文学习如何使用ESP32开发板来进行多线程的开发。