Arduino 开发ESP32

前言

本人新手用于记录学习ESP32的初学过程,此笔记来源于学校课程和b站

Arduino 开发ESP32简介

ESP32 是一款功能强大且性价比极高的 Wi-Fi + 蓝牙双模芯片,而 Arduino 是一个广为人知、易于上手的开源电子原型平台。将两者结合,意味着你可以用 Arduino 简单易懂的编程方式(基于 C/C++),来驾驭 ESP32 强大的硬件功能,非常适合初学者、快速原型开发以及物联网(IoT)项目。
核心概念:什么是 Arduino 开发 ESP32?
它并不是一个全新的东西,而是指在 Arduino IDE(集成开发环境)或 Arduino 框架下,为 ESP32 芯片编写和上传程序。

硬件是 ESP32:负责执行代码、连接网络、驱动外设。

开发环境和语言是 Arduino:负责提供熟悉的编程接口、丰富的库函数和简洁的上传流程。

官方 Arduino 核心库并不原生支持 ESP32,因此需要一个“桥梁”——这就是 ESP32 Arduino Core(ESP32 Arduino 核心库)。它由 Espressif(乐鑫,ESP32 的制造商)和社区共同维护,将 ESP32 的硬件操作封装成了 Arduino 风格的函数。

安装 Arduino 开发环境

安装教程请访问:🧑‍💻点击链接

Arduino开发语言

Arduino 是基于 C++,现在要回顾一下相关的知识

注释与变量

1
2
3
4
5
6
7
// 这是一个单行注释

/*
这是一个多行注释
它可以跨越多行
*/

  • 在 Arduino中声明一个变量的步骤:
    1
    数据类型 变量名;
    由于跟c++差不多的,我就不在往下写了

Arduino 常用内置函数介绍

在使用 Arduino 进行编程时,系统提供了大量内置函数,这些函数能够极大简化程序编写流程,帮助开发者高效处理引脚输入输出、逻辑流控制及各类功能实现。以下是最核心、最常用的 Arduino 内置函数详解。

1. 引脚模式配置函数:pinMode(pin, mode)

功能:用于配置指定数字引脚的工作模式(输入或输出),是控制引脚前必须执行的初始化步骤。
参数说明

  • pin:需配置的数字引脚编号(如 213 等,需与 Arduino 板卡实际引脚对应)。
  • mode:引脚模式,仅支持以下两种固定值:
    • INPUT:配置为输入模式(用于读取外部信号,如按键、传感器输出)。
    • OUTPUT:配置为输出模式(用于驱动外部设备,如 LED、继电器)。

示例:将数字引脚 13 配置为输出模式

1
pinMode(13, OUTPUT);

2. 数字引脚写入函数:digitalWrite(pin, value)

功能:向已配置为 OUTPUT 模式的数字引脚写入高电平(HIGH)或低电平(LOW),实现对外部设备的开关控制。
参数说明

  • pin:需写入电平的数字引脚编号(必须先通过 pinMode 配置为 OUTPUT 模式)。
  • value:需写入的电平值,仅支持两种固定值:
    • HIGH:写入高电平(通常对应 Arduino 工作电压,如 5V 或 3.3V)。
    • LOW:写入低电平(通常对应 0V)。

示例:向数字引脚 13 写入高电平(点亮引脚连接的 LED)

1
digitalWrite(13, HIGH);

3. 数字引脚读取函数:digitalRead(pin)

功能:读取已配置为 INPUT 模式的数字引脚当前电平,获取外部设备的数字信号(如按键是否按下)。
参数说明

  • pin:需读取的数字引脚编号(必须先通过 pinMode 配置为 INPUT 模式)。

返回值:引脚当前的电平值,仅为 HIGHLOW

示例:读取数字引脚 2 的电平,并将结果存储到变量 buttonState

1
int buttonState = digitalRead(2);

4. 模拟引脚读取函数:analogRead(pin)

功能:读取模拟引脚的模拟信号(如电位器、光敏电阻等连续变化的信号),并将其转换为 Arduino 可处理的数字值。
参数说明

  • pin:需读取的模拟引脚编号(Arduino 板卡通常以 A0A1 等标识,无需通过 pinMode 配置)。

关键特性

  • 模拟信号范围:通常为 0V ~ 5V(或 0V ~ 3.3V,取决于板卡)。
  • 数字值输出范围:固定为 0 ~ 1023(10 位 ADC 分辨率,即 (2^{10} = 1024) 个等级)。
  • 读取速度:单次读取约需 100 微秒(μs)。

示例:读取模拟引脚 A0 的值,并将结果存储到变量 sensorValue

1
int sensorValue = analogRead(A0);

5. PWM 信号输出函数:analogWrite(pin, value)

功能:在支持 PWM(脉冲宽度调制)功能的数字引脚上输出模拟“等效值”(实际为高频脉冲信号),可实现设备的渐变控制(如 LED 亮度调节、电机转速控制)。
参数说明

  • pin:需输出 PWM 信号的数字引脚(Arduino 板卡通常以 ~ 标识,如 ~3~9,无需额外配置 pinMode)。
  • value:PWM 信号的占空比,范围为 0 ~ 255(8 位分辨率):
    • 0:占空比 0%(等效于低电平,设备关闭)。
    • 255:占空比 100%(等效于高电平,设备满功率)。
    • 中间值(如 128):占空比 50%(等效于半功率)。

示例:向 PWM 引脚 9 输出值 128(使 LED 处于半亮状态)

1
analogWrite(9, 128);

6. 延时函数:delay(ms)

功能:使程序暂停指定的时间,常用于控制事件间隔(如 LED 闪烁、传感器采样间隔)。
参数说明

  • ms:暂停的时间,单位为 毫秒(ms)(1 秒 = 1000 毫秒)。

注意delay 函数会“阻塞”程序执行——暂停期间,Arduino 无法执行其他代码(如读取传感器、响应按键)。若需非阻塞延时,需使用 millis() 函数。

示例:使程序暂停 1000 毫秒(1 秒)

1
delay(1000);

7. 时间跟踪函数:millis()

功能:返回 Arduino 板卡通电(或复位)以来的累计时间,单位为毫秒(ms),常用于实现非阻塞延时、时间间隔记录。
参数说明:无参数。

返回值:自启动以来的毫秒数,数据类型为 unsigned long(最大值约 50 天,溢出后会自动从 0 重新开始计数)。

示例:记录程序启动后的时间,并打印到串口

1
2
3
4
unsigned long currentTime = millis();
Serial.print("运行时间:");
Serial.print(currentTime);
Serial.println(" ms");

8. 串口初始化函数:Serial.begin(baud)

功能:初始化 Arduino 与电脑(或其他设备)的串口通信,建立数据传输的“通道”,是使用串口功能的前提。
参数说明

  • baud:串口通信的波特率(数据传输速率,单位为“波特/秒”),需与电脑串口监视器的波特率保持一致(常用值:9600、115200、38400 等)。

示例:以 9600 波特率初始化串口通信

1
2
3
void setup() {
Serial.begin(9600); // 仅需在 setup() 中初始化一次
}

9. 串口数据发送函数:Serial.print(data)

功能:将数据(数字、字符串、变量等)通过串口发送到电脑,在串口监视器中查看,常用于调试程序、输出传感器数据。
参数说明

  • data:需发送的数据,支持多种类型:
    • 字符串:如 "传感器值:"
    • 数字:如 12345.67(可指定进制,如 Serial.print(10, HEX) 表示以十六进制发送 10)。
    • 变量:如前面定义的 sensorValuecurrentTime

关联函数Serial.println(data)——功能与 Serial.print 一致,但会在数据末尾自动添加“换行符”(使下次输出从新一行开始)。

示例:发送字符串和变量值到串口

1
2
3
int temp = 25;
Serial.print("当前温度:"); // 不换行
Serial.println(temp); // 发送变量并换行

10. 串口数据接收检测函数:Serial.available()

功能:检查是否有数据通过串口发送到 Arduino(即电脑是否向 Arduino 发送了数据),用于判断是否需要读取串口数据。
参数说明:无参数。

返回值:等待读取的串口数据字节数(0 表示无数据,大于 0 表示有数据待读取)。

示例:检测到串口有数据时,读取并打印该数据

1
2
3
4
5
if (Serial.available() > 0) {
char receivedData = Serial.read(); // 读取一个字节的数据
Serial.print("收到数据:");
Serial.println(receivedData);
}

面包板

面包板是连接电路的简单而有用的工具。它对初学者非常有用,因为您无需焊接即可轻松试验和测试电路。但它对更有经验的人也很有用,因为您可以快速制作一个想法或电路的一部分。

图上横向的5孔是连通的,纵向是不连通的。
竖向的红色是+,蓝色为- 接地

硬件电路设计


VIN是5V电源引脚,3v3是3v电源引脚,GND引脚为接地引脚

  1. GPIO 引脚引脚又叫管脚,英文叫 Pin, 就是从集成电路(芯片以及一些电子元件)内部电路引出与外围电路的接线的接口。在我们的 ESP32 开发板上, 我们可以把这些称为引脚, 这些引脚其实是从 ESP32 芯片内部引出来的, 我们可以看到每个引脚都标了自己独特的名字。其中有一类引脚叫 GPIO 引脚, 负责输入/输出电压。开发板上 D 开头的引脚都是这种引脚, 比如 D2、D4、D15 等等