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 超好玩、超强大! 要是遇到问题,多查查代码里的引脚对不对、硬件连接有没有错,慢慢调试,肯定能解决哒~

0 条评论

目前还没有评论...