Arduino IDE环境下用ESP32控制多路LED调光

本实验在Ardu​ino IDE环境下,利用ESP32产生的PWM信号控制多个L​ED。

实验所需物料如下:
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并调光时,将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,就可以测试调光效果了。

多个LED调光控制

也可以从相同通道的不同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 呼吸灯等。

- 本文内容来自网络,如有侵权,请联系本站处理。

2022-06   阅读(791)   评论(0)
 标签: maker Arduino ESP32 PWM LED

涨知识
中断

中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

评论:
相关文章
小鹏物联网 MicroPython 智能浇花方案

相信很多人都有把绿植给养死的经历,可能是浇水过多、忘记浇水、较长时间不在家不能浇水等,本文介绍一种可以灵活定制的智能浇花方案。


MicroPython 开发ESP32应用之线程介绍及实例分析

MicroPython 在 ESP32 上支持线程(Thread)功能,通过_thread模块实现。线程允许程序并发执行多个任务,适合处理需要同时运行的场景,例如传感器数据采集和网络通信。


盛思发布掌控板3.0

掌控板3.0升级了主控,还主打AI。带有双麦克风阵列,增加了音频解码芯片,板载了一个1W喇叭,还把之前的单色屏幕换成了1.47寸的彩色屏幕,有更多的可玩性。


ESP32 MicroPython采集模拟传感器数值

使用了 MicroPython 库,通过 定时器(Timer) 和 ADC(模数转换器) 功能来实时读取传感器数据。使用定时器可以实现高精度、非阻塞、低资源消耗的周期性任务,保证实时性和可靠性,特别适用于嵌入式系统中的多任务处理和低功耗场景。



ESP32 使用DAC模拟输出完成两路呼吸灯

ESP32的DAC函数可以实现真正的模拟输出。


在 ESP32 上使用 LEDC (PWM)

ESP32 没有Arduino输出 PWM 的 analogWrite(pin, value) 方法,取而代之的 ESP32 有一个 LEDC 来实现PWM功能。


《米思齐实战手册:Arduino图形化编程指南》

本书由少年创学院联合创始人兼院长、知名创客程晨撰写,以Arduino作为硬件平台,介绍了使用米思齐(Mixly)软件进行程序开发的方法。


MicroPython PWM类

machine.pwm是MicroPython中用于控制PWM输出的模块之一,它提供了一些方法和属性,用于设置和控制PWM输出的频率、占空比等参数,从而实现对各种应用场景的控制。


Micropython基于ESP32的多线程开发

本文学习如何使用ESP32开发板来进行多线程的开发。

搜索
小鹏STEM教研服务

专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。