第二章:零基础学习ESP32 : 按钮控制LED &PWM呼吸灯

(图1:Arduino IDE 主界面截图,标注菜单栏、代码区、串口监视器按钮)


第一部分:环境搭建

1.1 安装 Arduino IDE

  1. 访问 Arduino官网 下载最新版IDE(建议版本≥2.0)
  2. 安装时勾选 “Install USB drivers”(确保识别ESP32)
    (图2:Arduino安装界面截图,高亮USB驱动选项)

1.2 添加 ESP32 支持

  1. 打开IDE,进入 文件 > 首选项,在 附加开发板管理器网址 输入:
    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
    
    (图3:首选项设置截图,显示URL输入位置)
  2. 进入 工具 > 开发板 > 开发板管理器,搜索 “esp32”,安装最新版
    (图4:开发板管理器搜索esp32的截图)

1.3 配置开发板

  1. 连接ESP32到电脑,进入 工具 > 开发板 > ESP32 Arduino,选择 “ESP32 Dev Module”
  2. 设置 Upload Speed 为 921600(加快上传速度)
  3. 端口选择对应的COM口(Windows)或/dev/cu.*(Mac)
    (图5:工具菜单配置截图,标注开发板型号和端口)

第二部分:实验1 - 按钮控制LED

2.1 硬件连接

元件连接方式
LED 正极GPIO2(通过220Ω电阻)
LED 负极GND
按钮引脚1GPIO4
按钮引脚23.3V
按钮引脚3/410kΩ下拉电阻 → GND

🔔 注意:ESP32的 GPIO2 自带板载LED(部分型号),可直接使用,无需外接LED。

2.2 代码详解

// 实验1:按钮控制LED
const int BUTTON_PIN = 4;  // 按钮接GPIO4
const int LED_PIN = 2;     // LED接GPIO2

void setup() {
  Serial.begin(115200);                // 初始化串口通信
  pinMode(BUTTON_PIN, INPUT);           // 设置按钮为输入模式
  pinMode(LED_PIN, OUTPUT);             // 设置LED为输出模式
  digitalWrite(LED_PIN, LOW);           // 初始关闭LED
}

void loop() {
  int buttonState = digitalRead(BUTTON_PIN);  // 读取按钮状态
  
  if (buttonState == HIGH) {           // 按下按钮
    digitalWrite(LED_PIN, HIGH);       // 点亮LED
    Serial.println("LED ON");          // 串口打印状态
  } else {                             // 松开按钮
    digitalWrite(LED_PIN, LOW);        // 熄灭LED
    Serial.println("LED OFF");
  }
  
  delay(50);  // 防抖延时
}
关键代码解析:
  • Serial.begin(115200):启动串口通信,用于调试(需打开 工具 > 串口监视器
  • INPUT 模式:ESP32引脚默认高阻抗,必须外接下拉电阻或使用 INPUT_PULLDOWN
    (图7:串口监视器截图,显示“LED ON/OFF”日志)

2.3 上传代码

  1. 点击  编译代码,首次编译会下载依赖库(等待进度条完成)
  2. 点击  上传代码,观察底部提示 “Hard resetting via RTS pin…” 表示成功
    (图8:Arduino IDE 上传成功截图,标注状态栏提示)

第三部分:实验2 - PWM呼吸灯

3.1 PWM 核心函数

ESP32 使用 LEDC(LED Control)库 代替传统Arduino的 analogWrite(),支持更高精度:

函数作用
ledcSetup(channel,freq,resolution)配置PWM通道参数
ledcAttachPin(pin,channel)绑定引脚和通道
ledcWrite(channel,duty)输出PWM信号

3.2 代码实现

// 实验2:PWM呼吸灯
const int LED_PIN = 2;        // GPIO2
const int PWM_CHANNEL = 0;    // 通道0
const int PWM_FREQ = 5000;    // 频率5kHz
const int PWM_RESOLUTION = 8; // 8位分辨率(0-255)

void setup() {
  ledcSetup(PWM_CHANNEL, PWM_FREQ, PWM_RESOLUTION);  // 配置通道
  ledcAttachPin(LED_PIN, PWM_CHANNEL);               // 绑定引脚
}

void loop() {
  // 亮度递增
  for (int duty = 0; duty <= 255; duty++) {
    ledcWrite(PWM_CHANNEL, duty);
    delay(10);
  }
  // 亮度递减
  for (int duty = 255; duty >= 0; duty--) {
    ledcWrite(PWM_CHANNEL, duty);
    delay(10);
  }
}
参数调试技巧:
  • 频率(FREQ)
    • LED调光:500Hz~5kHz(高频可消除肉眼可见的闪烁)
    • 电机控制:>20kHz(避免噪音)
  • 分辨率(RESOLUTION)
    • 8位:256级亮度(常用)
    • 12位:4096级(需降低频率)

(图9:示波器PWM波形截图 - 展示不同占空比的方波)


第四部分:故障排除

4.1 常见问题及解决

问题现象解决方案
上传失败长按BOOT键再点上传
端口未识别安装CP210x/USB-CH340驱动
LED常亮不响应检查是否启用内部上拉电阻冲突
PWM无输出确认通道号与attachPin一致

(图11:驱动安装界面截图 - CP210x和CH340驱动下载页面)


附录:扩展学习资源

  1. 官方文档
  2. 推荐库
    • ESP32Servo:舵机控制
    • Blynk:物联网远程控制

如需完整代码工程包或高清电路图,欢迎在评论区留言!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙大大L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值