- 机器人等级考试
ESP32 for Arduino 学习笔记
- 2025-7-16 20:06:15 @
ESP32 for Arduino 学习笔记
一、前言
Arduino 是个很友好的开发平台,ESP32 功能又超强大,把它们结合起来玩硬件、搞物联网项目特别有意思!这笔记会从基础的引脚控制开始,用通俗易懂的话和带详细注释的代码,教你一步步掌握 ESP32 在 Arduino 环境下的常用操作,就算是刚入门的小白也能轻松跟上~
二、开发环境准备
(一)软件安装
要先在电脑上装好 Arduino IDE 软件,打开后,在「文件」-「首选项」里的「附加开发板管理器网址」,添加 ESP32 对应的开发板地址(不同 ESP32 开发板可能有差异,比如 https://dl.espressif.com/dl/package_esp32_index.json
),然后去「工具」-「开发板」-「开发板管理器」里搜索 “ESP32” 并安装,这样就能在 Arduino 里愉快开发 ESP32 啦。
(二)硬件连接
找一根 Micro - USB 或者 Type - C 线(看你 ESP32 开发板的接口),把 ESP32 和电脑连起来,后面下载程序、调试都靠它。
三、基础引脚控制(以 LED 控制为例)
(一)数字输出:点亮 LED
1. 原理说明
ESP32 有很多引脚,我们选一个引脚接到 LED 上(一般还得串个电阻,保护 LED ,比如 220Ω 左右),通过控制引脚输出高电平(3.3V 左右,能点亮 LED )和低电平(0V ,LED 熄灭),就能让 LED 亮灭啦。
2. 代码示例(带超详细注释)
// 定义 LED 连接的引脚,这里选 27 号引脚,你也可以换其他支持输出的引脚
const int ledPin = 27;
// 初始化函数,Arduino 程序运行时,这个函数里的代码会先执行一次
void setup() {
// 把 ledPin 引脚设置为输出模式,这样才能往这个引脚输出高低电平控制 LED
pinMode(ledPin, OUTPUT);
}
// 循环函数,setup 执行完后,这里的代码会一直重复执行
void loop() {
// 让 ledPin 输出高电平,3.3V 左右,LED 就点亮啦
digitalWrite(ledPin, HIGH);
// 延时 1000 毫秒,也就是 1 秒,让 LED 亮一会儿
delay(1000);
// 让 ledPin 输出低电平,0V ,LED 熄灭
digitalWrite(ledPin, LOW);
// 再延时 1 秒,让 LED 灭一会儿,然后又会循环亮灭
delay(1000);
}
3. 硬件连接建议
把 LED 的长脚(正极)通过 220Ω 电阻接到 ESP32 的 27 号引脚,短脚(负极)直接接到 ESP32 的 GND(地线)上。上传代码后,就能看到 LED 一闪一闪啦。
(二)数字输入:读取按钮状态
1. 原理说明
按钮有两个状态,按下和松开。我们把按钮一端接 ESP32 的某个引脚,另一端接地,通过检测引脚的电平变化(按下时可能是低电平,松开时可能是高电平,具体看电路),就能知道按钮是不是被按下啦。
2. 代码示例(带详细注释,基础版 - 只打印状态)
// 定义按钮连接的引脚,这里用 26 号引脚
const int buttonPin = 26;
// 用来存按钮状态的变量,初始设为 0(代表未按下等状态,后面会变)
int buttonState = 0;
// 初始化函数,先执行一次
void setup() {
// 把 buttonPin 引脚设为输入模式,这样才能读取外部按钮的电平
pinMode(buttonPin, INPUT);
// 初始化串口通信,波特率 9600 ,后面可以在串口监视器看按钮状态
Serial.begin(9600);
}
// 循环函数,一直重复执行
void loop() {
// 读取 buttonPin 引脚的电平状态,存到 buttonState 变量里
buttonState = digitalRead(buttonPin);
// 把按钮状态打印到串口监视器,方便我们看
Serial.println(buttonState);
// 延时 20 毫秒,稍微等一下,让读取更稳定,避免误判
delay(20);
}
3. 进阶代码(带按下判断和打印提示,更实用)
// 定义按钮连接的引脚
const int buttonPin = 26;
// 存按钮状态的变量
int buttonState = 0;
void setup() {
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void loop() {
buttonState = digitalRead(buttonPin);
Serial.println(buttonState);
delay(20);
// 判断按钮是不是被按下(这里假设按下时是 HIGH 电平,具体看你的电路哦,有的电路按下是 LOW ,得灵活改)
if (buttonState == HIGH) {
// 按下时,在串口打印提示
Serial.println("Button is pressed!");
} else {
// 没按下(松开)时,打印另一个提示
Serial.println("Button is released!");
}
}
4. 硬件连接
按钮一端接 ESP32 的 26 号引脚,另一端接 GND 。如果想让按下时是高电平,可能还得接个上拉电阻(比如 10KΩ 接到 3.3V ),不过有些开发板内部有上拉/下拉电阻,也可以在代码里用 pinMode(buttonPin, INPUT_PULLUP);
开启内部上拉,这样就不用外接电阻啦,具体看你需求和硬件情况调整。
四、ESP32 引脚模式与函数说明
(一)pinMode 函数
作用是设置引脚的工作模式,常用的模式有:
- INPUT:输入模式,用来读取外部的电平信号,比如按钮状态。
- OUTPUT:输出模式,用来输出高低电平,控制 LED 、继电器这些设备。
- INPUT_PULLUP:内部上拉输入模式,开启引脚内部的上拉电阻,这样引脚在没外部信号时,默认是高电平,接上 GND 按下按钮就会变成低电平,能省掉外接上拉电阻的麻烦。
- INPUT_PULLDOWN:内部下拉输入模式,类似上面,默认是低电平,接上 3.3V 按下按钮变高电平。
示例代码(设置不同模式):
void setup() {
// 设置 12 号引脚为输出模式,控制设备
pinMode(12, OUTPUT);
// 设置 13 号引脚为输入模式,读信号
pinMode(13, INPUT);
// 开启 14 号引脚内部上拉,读按钮常用这种
pinMode(14, INPUT_PULLUP);
}
void loop() {
// 这里可以写对应的读写逻辑,比如用 digitalRead 读 13、14 脚,digitalWrite 控制 12 脚
}
(二)digitalWrite 函数
专门用来向指定引脚输出高低电平的,参数里 pin
是要控制的引脚号,value
可以是 HIGH
(高电平,一般 3.3V )或者 LOW
(低电平,0V )。不过要注意,不是所有引脚都能输出哦,像 34、35、36、39 这些引脚,一般只能作为输入,用 digitalWrite
控制它们输出是没用的,得避开这些引脚用输出功能~
示例(控制 LED ,和之前的 LED 代码呼应):
const int ledPin = 27;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
// 输出高电平,点亮
digitalWrite(ledPin, HIGH);
delay(1000);
// 输出低电平,熄灭
digitalWrite(ledPin, LOW);
delay(1000);
}
(三)digitalRead 函数
用来读取指定引脚的电平状态,返回 HIGH
或者 LOW
,也就是高电平或者低电平,常用来读按钮、开关这些输入设备的状态。
示例(读按钮,和之前按钮代码呼应):
const int buttonPin = 26;
int buttonState = 0;
void setup() {
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void loop() {
// 读取按钮引脚的状态
buttonState = digitalRead(buttonPin);
Serial.println(buttonState);
delay(20);
}
五、综合小项目:按钮控制 LED 亮灭
(一)需求
按下按钮,LED 点亮;松开按钮,LED 熄灭。把前面学的数字输入、输出结合起来用~
(二)代码实现(带详细注释)
// 定义 LED 引脚,接 LED 正极(串电阻)
const int ledPin = 27;
// 定义按钮引脚,接按钮一端
const int buttonPin = 26;
void setup() {
// 设置 LED 引脚为输出模式,用来控制亮灭
pinMode(ledPin, OUTPUT);
// 设置按钮引脚为输入模式,并且开启内部上拉电阻(这样按钮另一端接 GND ,按下时引脚变低电平)
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
// 读取按钮引脚的状态,因为用了内部上拉,松开时是 HIGH ,按下时是 LOW
int buttonState = digitalRead(buttonPin);
// 判断按钮状态,如果是 LOW ,说明按下了
if (buttonState == LOW) {
// 点亮 LED ,输出高电平
digitalWrite(ledPin, HIGH);
} else {
// 没按下,熄灭 LED ,输出低电平
digitalWrite(ledPin, LOW);
}
// 稍微延时一下,让检测更稳定,避免抖动(按钮按下松开时可能会有瞬间的电平乱跳)
delay(20);
}
(三)硬件连接
- LED 长脚(正极)串 220Ω 电阻接到 ESP32 的 27 号引脚,短脚(负极)接 GND 。
- 按钮一端接 ESP32 的 26 号引脚,另一端接 GND 。因为代码里用了
INPUT_PULLUP
,所以不用外接上拉电阻,简单又方便~
上传代码后,按按钮试试,LED 就会跟着你的操作亮灭啦,是不是很有趣!
六、串口通信的使用
(一)作用
串口通信可以让 ESP32 和电脑之间传数据,我们在代码里用 Serial.println
把信息打印到串口监视器,就能看到程序运行的状态,比如按钮有没有被按下、传感器读了什么数据等等,调试程序超好用!
(二)基础代码示例(和之前按钮代码结合看状态)
const int buttonPin = 26;
int buttonState = 0;
void setup() {
pinMode(buttonPin, INPUT);
// 初始化串口,波特率 9600 ,要和串口监视器设置的一致才能正常通信
Serial.begin(9600);
}
void loop() {
buttonState = digitalRead(buttonPin);
// 把按钮状态打印到串口
Serial.println(buttonState);
delay(20);
if (buttonState == HIGH) {
Serial.println("按钮松开啦!");
} else {
Serial.println("按钮按下啦!");
}
}
(三)查看串口监视器
在 Arduino IDE 右上角点那个“串口监视器”的图标(像放大镜旁边有个串口的标志),打开后设置波特率为 9600 ,就能看到打印出来的按钮状态和提示文字啦,方便我们调试、看程序运行情况。
七、总结
通过上面这些内容,你已经学会了 ESP32 在 Arduino 环境下的基础操作:
- 用
pinMode
设置引脚模式,让引脚当输入或输出。 - 用
digitalWrite
控制引脚输出高低电平,点亮 LED 这类设备。 - 用
digitalRead
读取引脚的电平,知道按钮有没有被按下。 - 还会用串口通信打印信息,调试程序。
接下来就可以自己动手扩展啦,比如接多个 LED 做流水灯,接多个按钮做复杂控制,或者结合其他传感器(像温湿度传感器、光敏电阻这些),做更有意思的物联网小项目,比如用 ESP32 连 WiFi ,把传感器数据传到手机或者电脑上,一步步玩起来,你会发现 ESP32 + Arduino 超好玩、超强大! 要是遇到问题,多查查代码里的引脚对不对、硬件连接有没有错,慢慢调试,肯定能解决哒~