实验所需物料如下:
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 呼吸灯等。
UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信。
本小节主要介绍Ws2812灯珠的使用、对父类进行扩展实现自定义功能,和指针向下强制转换的使用。
本小节主要介绍RGB三色LED的使用,以及多态的具体实现。
ESP32 Arduino Framework是专门针对ESP32开发板的Arduino应用开发框架,为用户开发IOT应用、HMI应用提供一致的开发体验。
ESPConnect是一个基于现代浏览器的管理器,在你需要快速验证、调试、管理文件、检查状态的时候,它能帮你省下大量打开和切换重型工具的时间。
本文介绍两种使用TEA5767收音机模块实现FM收音机的方案,感兴趣的朋友可在此基础上实现更丰富的功能。
GPIOViewer 是一个强大的 Arduino 库,专门为 ESP32 芯片设计,可以实时监控 ESP32 芯片上的所有 GPIO 引脚状态。它可以帮助你快速直观地了解每个引脚的当前状态,例如高电平、低电平、输入、输出、中断等等。
在音频处理领域,I2S是一种广泛使用的通信协议,它专门用于芯片之间的音频数据传输。ESP32 作为一款高性能的微控制器,不仅支持 I2S 通信,还提供了强大的硬件接口和灵活的软件库,使其成为音频项目开发的理想选择。
小鹏物联网智能浇花系统是照顾植物的好帮手,支持自动控制和手动控制两种模式,可通过电脑端和手机端查看数据和控制浇水。
Arduino开发环境下适用于ESP32芯片系列开发板的应用开发框架。
本小节主要介绍C++ 类相关的基础知识,包括类的定义、继承、多态,范围作用域等。