ESP32S3入门实验|电位器调节LED亮度(ADC+PWM详解,适配新版Arduino内核)
·
📌专栏:ESP32单片机零基础实战
✨适用人群:单片机新手、初中生科创、Arduino入门、ESP32S3开发者
🔥解决痛点:全网大部分教程为老旧ESP32内核代码,新版3.0+内核报错ledcSetup未定义,本文提供零报错、适配最新内核两套代码,通俗易懂,零基础可复刻
一、实验简介
1.1 实验功能
本次实验结合ADC模拟采集与PWM脉冲调光两大单片机核心功能:旋转电位器采集电压变化,实时改变LED输出亮度,实现无级调光,仿真台灯调光效果。
1.2 核心知识点
- analogRead():ADC模拟读取,采集电位器电压,返回0~4095数值
- analogWrite():PWM模拟输出,输出调光信号,控制LED亮度,范围0~255
- map()映射函数:转换数值区间,匹配ADC和PWM数值范围
- ESP32S3硬件原理:数字引脚只有高低电平,依靠PWM快速频闪实现亮度调节
1.3 实验器材 - ESP32S3开发板 ×1
- 直插LED灯 ×1
- 10k电位器 ×1
- 220Ω限流电阻 ×1
- 杜邦线、面包板若干
二、硬件接线(重点!接线错误百分百不亮)
2.1 LED接线
- ESP32S3 GPIO14 → 220Ω电阻 → LED长脚(正极)
- LED短脚(负极)→ 开发板 GND
注意:必须串联220Ω电阻!不加电阻会烧毁ESP32引脚;LED正负极接反完全不发光
2.2 电位器接线(三线接法) - 电位器左侧引脚 → 3.3V(禁止接5V,烧毁ADC外设)
- 电位器中间引脚 → GPIO36(专用ADC模拟引脚)
- 电位器右侧引脚 → GND

三、原理通俗讲解(初中生易懂)
- 电位器:相当于可变电阻,旋转旋钮改变电压,输出0~3.3V模拟电压;
- ADC采集(analogRead):单片机读取模拟电压,转换成数字0~4095,电压越高数值越大;
- 数值映射(map):ADC最大值4095,PWM亮度最大值255,需要换算区间,不然亮度无法控制;
- PWM调光(analogWrite):高速开关LED,亮灭速度快到人眼无法分辨,占空比越大,灯光越亮。
核心公式:亮度 = map(电压值,0,4095,0,255)
四、适配新版内核代码(零报错推荐)
当前Arduino ESP32内核≥3.0,官方删除老旧 ledcSetup、ledcAttachPin,旧代码直接编译报错!推荐使用极简analogWrite写法,无需配置通道,新手首选。
4.1 完整版调光代码(可串口打印调试)
// 实验:电位器控制LED亮度|ESP32S3新版内核适配
// 适配Arduino ESP32 3.0+版本,解决ledcSetup未定义报错
const int ledPin = 14; // LED PWM输出引脚
const int adcPin = 36; // 电位器ADC采集引脚
int adcValue; // 存储电位器原始采样值 0~4095
int ledBright; // 映射后LED亮度值 0~255
void setup() {
Serial.begin(115200); // 开启串口,打印调试数据
}
void loop() {
// 1、读取电位器模拟电压
adcValue = analogRead(adcPin);
// 2、数值区间映射
ledBright = map(adcValue, 0, 4095, 0, 255);
// 3、PWM输出,调节LED亮度
analogWrite(ledPin, ledBright);
// 4、串口打印,直观观察数据
Serial.print("ADC采样值:");
Serial.print(adcValue);
Serial.print(" | LED亮度:");
Serial.println(ledBright);
delay(50); // 稳定采样,防止亮度跳动
}
4.2 编译运行配置
- 开发板选择:ESP32S3 Dev Module
- 波特率设置:115200
- 上传代码,旋转电位器即可实时调节灯光明暗
五、新旧版本代码对比(报错根源解析)
5.1 废弃旧代码(高版本报错,全网老旧教程版本)
以下代码会报 ‘ledcSetup’ was not declared in this scope,新版内核直接废弃,不建议使用:
// 老旧废弃代码!!3.0+内核编译报错
ledcSetup(pwmChannel, pwmFreq, pwmRes);
ledcAttachPin(ledPin, pwmChannel);
5.2 两种新版合法写法
- 写法1(新手推荐):analogWrite,零配置、代码极简
- 写法2(进阶工程):ledcAttach,自定义PWM频率,适配电机、RGB灯光
六、常见故障排查(90%踩坑汇总)
6.1 LED完全不亮
- ❌ LED正负极接反,调换引脚接线
- ❌ 省略220Ω限流电阻,电路工作异常
- ❌ 选错开发板,未选择ESP32S3 Dev Module
6.2 旋转电位器,亮度无变化 - ❌ 电位器接5V电压,烧毁ADC采集引脚
- ❌ 电位器GND虚接,缺少回路
- ✅ 排查技巧:打开串口监视器,查看ADC数值是否变化
6.3 串口数值跳动剧烈
增大代码中delay()延时,或者外接104滤波电容,稳定模拟电压
七、知识点总结
- analogRead():读取模拟量,专门采集电位器、光敏传感器,范围0~4095
- analogWrite():输出PWM模拟量,调光、调速专用,范围0~255
- map函数:单片机必备函数,解决两个模块数值范围不匹配问题
- ESP32新版内核废弃ledc旧API,新手优先使用analogWrite,规避编译报错
八、拓展实验
- 实验1:修改代码,实现亮度反转,电位器数值越大灯光越暗
- 实验2:更换光敏传感器,实现光线自动控灯
- 实验3:三路电位器,分别控制RGB彩灯三通道亮度
附录:CSDN发布标签
ESP32、ESP32S3、Arduino单片机、科创实验、单片机入门、PWM调光、ADC采集、初中生科创
更多推荐
所有评论(0)