(图1:Arduino IDE 主界面截图,标注菜单栏、代码区、串口监视器按钮)
第一部分:环境搭建
1.1 安装 Arduino IDE
- 访问 Arduino官网 下载最新版IDE(建议版本≥2.0)
- 安装时勾选 “Install USB drivers”(确保识别ESP32)
(图2:Arduino安装界面截图,高亮USB驱动选项)
1.2 添加 ESP32 支持
- 打开IDE,进入 文件 > 首选项,在 附加开发板管理器网址 输入:
(图3:首选项设置截图,显示URL输入位置)https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
- 进入 工具 > 开发板 > 开发板管理器,搜索 “esp32”,安装最新版
(图4:开发板管理器搜索esp32的截图)
1.3 配置开发板
- 连接ESP32到电脑,进入 工具 > 开发板 > ESP32 Arduino,选择 “ESP32 Dev Module”
- 设置 Upload Speed 为 921600(加快上传速度)
- 端口选择对应的COM口(Windows)或/dev/cu.*(Mac)
(图5:工具菜单配置截图,标注开发板型号和端口)
第二部分:实验1 - 按钮控制LED
2.1 硬件连接
元件 | 连接方式 |
---|---|
LED 正极 | GPIO2(通过220Ω电阻) |
LED 负极 | GND |
按钮引脚1 | GPIO4 |
按钮引脚2 | 3.3V |
按钮引脚3/4 | 10kΩ下拉电阻 → 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 上传代码
- 点击 √ 编译代码,首次编译会下载依赖库(等待进度条完成)
- 点击 → 上传代码,观察底部提示 “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驱动下载页面)
附录:扩展学习资源
- 官方文档:
- 推荐库:
- ESP32Servo:舵机控制
- Blynk:物联网远程控制
如需完整代码工程包或高清电路图,欢迎在评论区留言!