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   阅读(857)   评论(0)
 标签: 创客 Arduino ESP32 PWM LED

涨知识
IMU

IMU(Inertial Measurement Unit),即惯性测量单元,用于测量物体三轴姿态角(或角速率)以及加速度。

评论:
相关文章
Arduino-ESP32文件系统全解析:SPIFFS、LittleFS、SD卡操作

Arduino-ESP32提供了多种文件系统解决方案,本文将深入解析SPIFFS、LittleFS和SD卡三种主流存储方案,帮助你做出最佳选择。


ESP32-P4-WIFI6开发板

ESP32-P4-WIFI6-DEV-KIT是一款微雪(Waveshare)设计的基于 ESP32-P4 的多媒体开发板,并集成 ESP32-C6,支持 Wi-Fi 6 和 BLE 5 无线连接。它提供丰富的人机交互接口,包括 MIPI-CSI (集成图像信号处理器 ISP)、MIPI-DSI、SPI、I2S、I2C、LED PWM、MCPWM、RMT、ADC、UART 和 TWAI 等。


ESP-Hosted 入门介绍 &使用指南

ESP-Hosted 解决方案提供了将 ESP 板用作 Wi-Fi 和 Bluetooth/BLE 连接的通信处理器的方法。


设备上云太麻烦?ESP-Hosted一站触达!

ESP-Hosted 提供了一种将ESP芯片和模组用作通信协处理器的解决方案,该解决方案为主机微处理器或微控制器提供无线连接,使主机能够与其他设备通信。简单来说为网卡方案。


ESP32 + Arduino使用TFT_eSPI库

Arduino+ESP32上使用TFT_eSPI库快速点亮这个屏幕,驱动芯片ST7789


ESP32 利用 SPI 连通 TFT 彩屏

本文给出了一个ESP32与SPI 接口TFT显示屏接线的详细说明,供大家参考。


在Micropython下使用ESPNow功能进行数据传输

本文讲解如何在Micropython环境下使用ESP32的ESPNow功能进行数据传输。


用 ESP32-S3 打造多功能 USB Dongle

ESP-Dongle 是一款基于 ESP32-S3 芯片开发的多功能 USB Device 解决方案。它不仅外形小巧,功能齐全,更集成了无线 U 盘、SD 卡读取以及 USB 无线网卡等多项功能。


利用 ESP32-S3 和 CSI 技术打造智能家居

ESP32 系列芯片可以利用 CSI 数据实现动作检测和存在检测。无论是自动调节灯光、风扇,还是节能控制,CSI 技术为智能家居带来了新的可能性。随着 CSI 技术的发展,未来的智能家居将能够更精确地感知和响应我们的行为,实现更高效、更人性化的控制。


ESP32-FreeRTOS:大量FreeRTOS实例,供参考学习

ESP32-FreeRTOS项目提供了丰富的示例,帮助开发者快速掌握ESP32的硬件功能和FreeRTOS实时操作系统。