5分钟上手 ESP32:arduino-esp32 核心库完整指南(安装、第一个程序、Wi-Fi 与深度睡眠)

【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 【免费下载链接】arduino-esp32 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32

arduino-esp32 是乐鑫官方维护的 ESP32 系列芯片 Arduino 核心,它把一块不到二十元、带 Wi-Fi 和蓝牙的芯片,变成"写个 .ino、点一下上传"就能玩起来的开发板。不管你要做联网传感器、蓝牙外设,还是 Web 控制台,这个核心都提供了从引脚定义、硬件抽象层(cores/esp32/ 下的 esp32-hal-* 文件)到三十多个内置库的完整支持。

读完本文你会拿到:一条 3 步安装路径、一张 DevKitC 引脚速查表、两个可直接编译的示例(Wi-Fi 网页控制台 + 深度睡眠),以及新手中招率最高的 4 个坑的解法。

mermaid

为什么 ESP32 是物联网硬件的"默认答案"

先看结论:在百元以内的开发板里,ESP32 是同时给到"性能 + 双无线 + 成熟 Arduino 生态"的唯一选择。

芯片CPU无线能力适合场景
ESP32双核 Xtensa LX6,240MHzWi-Fi + 经典蓝牙 + BLE通用物联网、网关
ESP32-S2单核 RISC-V,240MHzWi-Fi(无蓝牙)USB 主机、摄像头
ESP32-S3双核 RISC-V,240MHzWi-Fi + BLE,支持 AI 指令集触控、显示、AI 边缘
ESP32-C3 / C6单核 RISC-VWi-Fi(C6 为 Wi-Fi 6)+ BLE低成本、低功耗节点
ESP32-P4双核 RISC-V,400MHz需外扩无线高性能显示与计算

这些芯片的支持都由同一个核心包提供——安装一次,就能在工具栏里切换所有型号。各芯片的稳定性状态可在 官方文档的受支持 SoC 列表 中确认。

三步完成 ESP32 支持包安装

这是全文最省事的一步:不需要命令行,Arduino IDE 自带"开发板管理器"就能搞定。

第 1 步:添加核心索引地址。 打开 IDE 的"文件 → 首选项",在"附加开发板管理器网址"一栏填入官方索引地址:

https://espressif.github.io/arduino-esp32/package_esp32_index.json

Arduino IDE 首选项窗口中填写附加开发板管理器网址

如果下载速度不理想,官方安装文档 还提供了国内镜像索引,直接替换上面的地址即可。

第 2 步:在开发板管理器中搜索 esp32。 进入"工具 → 开发板 → 开发板管理器",搜索 esp32,勾选安装(建议选带版本号的正式版本,而非 dev 分支)。

Arduino 开发板管理器中添加 ESP32 包索引地址

开发板管理器中搜索并安装 esp32 核心包

第 3 步:选中你的板子与串口号。 安装完成后回到"工具"菜单,开发板一栏会出现几百种 ESP32 板型,最常见的入门板选 ESP32 Dev Module;串口选择系统识别到的 COM/ttyUSB 设备,即可编译上传。

Arduino IDE 中选择 ESP32 开发板并连接串口进行编译

⚠️ 两个前提:v2.x 及以上的核心不支持 32 位 Windows(Win7/Win8 x86 需停留在 1.0.6 老版本);Linux 下若提示串口无权限,需要把当前用户加入 dialout 组。

DevKitC 引脚速查:10 个常用映射一次记牢

完成安装后,先认识手里这块板子。下面这张图是 ESP32 DevKitC 的完整引脚布局,USB、电源、ADC、DAC、SPI、I2C 区域一目了然:

ESP32 DevKitC 开发板引脚布局图,展示 GPIO、ADC、DAC 与外设接口分布

核心包在 variants/esp32/pins_arduino.h 中为经典版 ESP32 预定义了这些映射,写代码时可以直接用符号名:

符号GPIO说明
TX / RX1 / 3串口 UART0
SDA / SCL21 / 22I2C 总线
SS / MOSI / MISO / SCK5 / 23 / 19 / 18SPI 总线
A036ADC 通道(仅输入)
A5 / A6 / A733 / 34 / 35ADC 通道(仅输入)
DAC1 / DAC225 / 26模拟输出(PWM 波形)
GPIO2DevKitC 板载用户 LED 的常见接法

💡 使用建议:

  • GPIO34~39 只能作输入,别拿来点灯或控制继电器;
  • 核心包没有为 esp32 这个板型定义 LED_BUILTIN,板载 LED 需要自己在代码里写死引脚(通常是 GPIO2);
  • 接 I2C 传感器时先查 peripherals 教程 里的接线图,SDA/SCL 别忘了确认是否需要上拉电阻。

ESP32 外设模块接线示意图,展示传感器与开发板的连接关系

第一个程序:点灯并看懂上传流程

新建一个草图,粘贴下面这段。它做两件事:初始化 GPIO2 上的 LED,并以 1 秒为周期翻转电平,同时打开串口方便你观察日志。

// ESP32 DevKitC 板载 LED 通常接在 GPIO2
const int ledPin = 2;

void setup() {
  pinMode(ledPin, OUTPUT);      // 设置为输出
  Serial.begin(115200);        // 打开串口,波特率 115200
  Serial.println("ESP32 点灯程序启动");
}

void loop() {
  digitalWrite(ledPin, !digitalRead(ledPin));  // 翻转 LED 状态
  delay(500);                                  // 间隔 500ms
}

点击"上传",第一次编译会自动拉取工具链,耐心等几十秒。如果卡住不动、最后报 Timed out,记住这个动作:按住板子上的 BOOT 键不松手,等出现"Connecting..."字样后再松开,这是把芯片拉进下载模式的经典操作。

上传成功、串口监视器(波特率选 115200)里打印出启动信息后,环境就算真正跑通了。

内置库清单:核心功能不用找第三方

arduino-esp32 最被低估的地方是 libraries/ 目录——官方内置了三十多个库,常见需求几乎都有"标准答案":

需求内置库路径
Wi-Fi 连接(STA/AP/共存)WiFilibraries/WiFi/
网页服务器 / 静态页面WebServerlibraries/WebServer/
HTTP 请求(调云 API)HTTPClientlibraries/HTTPClient/
设备发现ESPmDNSDNSServerlibraries/ESPmDNS/
蓝牙(经典 + BLE)BluetoothSerialBLElibraries/BLE/
芯片间直连免 IP 通信ESP_NOWlibraries/ESP_NOW/
串口 OTA 升级ArduinoOTAlibraries/ArduinoOTA/
本地文件系统LittleFSSPIFFSSDFFatlibraries/LittleFS/
通用外设Wire(I2C)、SPITickerPreferenceslibraries/Wire/
USB(CDC/HID/MSC 等)USBlibraries/USB/
Matter 智能家居协议Matterlibraries/Matter/

每个库都自带 examples 目录,IDE 里"文件 → 示例"即可浏览,比搜索引擎找到的碎片代码可靠得多。

10 行代码连上 Wi-Fi,再送一个网页控制台

把板子接入网络是大部分项目的起点。下面这个示例比"点灯"更进一步:连上家里的 Wi-Fi,然后起一个 80 端口的小 Web 服务,浏览器访问就能看到 LED 状态,还能通过 /on/off 两个网址远程开关 LED。

#include <WiFi.h>
#include <WebServer.h>

const char* ssid = "HomeWiFi";          // 改成你的 Wi-Fi 名称
const char* password = "12345678";      // 改成你的 Wi-Fi 密码
WebServer server(80);                   // 监听 80 端口
const int ledPin = 2;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(115200);

  // 以 Station 模式加入路由器网络
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {  // 等待连接成功
    delay(500);
    Serial.print(".");
  }
  Serial.println("\n已连上 Wi-Fi,本机 IP: ");
  Serial.println(WiFi.localIP());

  // 根路径:返回 LED 当前状态
  server.on("/", []() {
    server.send(200, "text/plain",
      "LED: " + String(digitalRead(ledPin)) + "\n");
  });
  // 两个控制网址:/on 打开、/off 关闭
  server.on("/on",  []() { digitalWrite(ledPin, HIGH); server.send(200, "text/plain", "on");  });
  server.on("/off", []() { digitalWrite(ledPin, LOW);  server.send(200, "text/plain", "off"); });
  server.begin();
}

void loop() {
  server.handleClient();  // 轮询处理 HTTP 请求
}

ESP32 作为 Wi-Fi Station 模式接入路由器的连接示意图

完成这一步后,把电脑 IP 填进浏览器试试:访问 /on 灯亮、访问 /off 灯灭——你已经做出一台可以远程控制的物联网设备了。若没有路由器可用,WiFi 库同样支持 WIFI_AP 自建热点模式(见 Wi-Fi 文档),板子自己变成一个 Wi-Fi 信号供设备连接。

深度睡眠:两次采样之间把电流降下去

电池或太阳能供电的项目,功耗就是寿命。ESP32 的深度睡眠(deep sleep)模式下整片 SoC 几乎断电,平均电流可以压到微安量级——相当于常亮 LED 的千分之一。核心包把入口封装成了简单的一行:ESP.deepSleep(微秒数)

#include "esp_sleep.h"   // 提供唤醒原因查询

void setup() {
  Serial.begin(115200);

  // 打印本次上电的原因:定时器、外部引脚还是按键
  Serial.printf("唤醒原因: %d\n", esp_sleep_get_wakeup_cause());

  // 这里本可以执行传感器采样、数据上报等"醒着"的工作...

  // 配置 30 秒后由定时器自动唤醒
  esp_sleep_enable_timer_wakeup(30 * 1000000);
  Serial.println("准备进入深度睡眠,30 秒后自动醒来");
  delay(100);  // 给串口留出冲刷时间,否则日志可能丢
  esp_deep_sleep_start();
}

void loop() {}

💡 进阶用法:把唤醒源换成某个 GPIO 的电平变化(esp_sleep_enable_ext0_wakeup),就能实现"平时睡死、有人踩到踏板才醒"的事件驱动系统,比定时器轮询更省电。

免拆机的更新:两条 OTA 路线

设备部署到天花板上之后,再拔下来插线刷固件显然不现实。核心包内建了两条更新路线:

  1. ArduinoOTA:固件里加几行代码,开发机与设备同网段时,IDE 可以直接通过网络把新固件推给设备,适合小批量调试;
  2. Web 页面更新:板子上跑一个带登录的上传页面,浏览器里选一个 .bin 文件就能刷机,适合现场交付后的小规模维护。登录页长这样:

ESP32 网页 OTA 更新页面的登录表单界面

两条路线的完整步骤(包括如何从 IDE 导出 .bin、mDNS 解析失败的替代方案)都写在 OTA 更新文档 中,示例代码在 libraries/ArduinoOTA/ 的 examples 里。

新手最常踩的 4 个坑,一次说清

症状原因解法
上传时报 Failed to connect to ESP32: Timed out芯片没进下载模式按住 BOOT 键,等出现 Connecting 再松开
设备管理器 / ls /dev/tty* 里没有串口驱动缺失或 Linux 权限不足Windows 装 CH340/CP210x 驱动;Linux 执行 sudo usermod -a -G dialout $USER 后重新登录
编译提示 sketch too big超出默认分区的程序区(约 1.25MB)"工具"菜单里把 Partition Scheme 换成 Huge APP,或删减未用到的功能
32 位 Windows 装不上 v2.x工具链已放弃 32 位 Windows换 64 位系统,或停留在 1.0.6 旧核心

⚠️ 特别提醒:tools/partitions/ 目录下有 49 份预设分区表(CSV 格式),每种对"程序区 / 数据区 / OTA 槽位"的切法都不同,切换前先看一眼列出的各分区大小,再对照 boards.txtupload.maximum_size 的上限来选。

下一步路线图:从会点灯到做项目

到这里,环境、引脚、联网、低功耗、OTA 五块拼图已经齐了。接下来按你的项目方向选一条路走:

  1. 做传感器网关 → 读 API 参考文档,重点看 Wire(I2C)与 HTTPClient(上报云端)的用法,把 HTTPClient 示例 跑通;
  2. 做蓝牙产品 → 从 libraries/BLE/ 的 22 个示例入手,先跑通广播,再做 GATT 服务;
  3. 做存储与日志 → 对比 LittleFSSD 两个库的示例,按容量和掉电可靠性选型;
  4. 想改核心本身(加自定义板型、调编译选项) → 克隆仓库源码,variants/ 目录里每个子文件夹就是一块板的引脚定义,照着 esp32/ 抄一份即可:
git clone https://gitcode.com/GitHub_Trending/ar/arduino-esp32

延伸资源一览:

一块芯片、一个核心、几行代码,物联网项目的门槛已经被压到最低。现在打开 IDE,把 DevKitC 插上 USB,按照第 1 个示例把灯点亮——剩下的路,你已经知道怎么走。🚀

【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 【免费下载链接】arduino-esp32 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐