Arduino IDE 离线安装 ESP32 开发板支持(3.3.10)
Arduino IDE 离线安装 ESP32 开发板支持(3.3.10)
背景
Arduino IDE 通过package_esp32_index.json定义 ESP32 的依赖链。添加开发板时,IDE 从 GitHub Releases 逐个拉取文件。国内网络环境下单线程下载速度约 30KB/s,395MB 的编译器需要 3 小时以上,整个依赖链 28GB 全部下完在实际操作中基本不可行。
IDE 的下载逻辑是一个文件一个文件校验的:检查%LOCALAPPDATA%\Arduino15\下目标路径是否已有对应文件,有则跳过。利用这一点,提前把文件放到正确位置即可绕过下载。
依赖链
package_esp32_index.json中esp32:esp32@3.3.10的依赖如下:
esp32:esp32@3.3.10├─①xtensa-esp-elf-gcc14.2.0+20260121395MBC/C++→Xtensa机器码├─②esp32-arduino-libs-idf5.5-129cd0d2425MBWiFi/BLE/FreeRTOS/LWIP├─③esp32-libs3.3.1042MB外设驱动(SPI/I2C/UART/GPIO/ADC)├─④esp32-core3.3.1044MBArduinoAPI封装+bootloader└─⑤esptool5.3.061MBUSB-Serial烧录合计 967MB。IDE 自动下载还会拉取其他 7 种芯片的 libs、32 位工具链、RISC-V GCC、各版本 OpenOCD、mkspiffs 等不需要的文件,总量约 28GB。
文件清单
① 编译器
| 项目 | 值 |
|---|---|
| 文件名 | xtensa-esp-elf-14.2.0_20260121-x86_64-w64-mingw32.zip |
| 分卷 | xtensa_compiler_part_00.zip~_04.zip(5 卷,90MB×4 + 35MB) |
| 合并 | copy /b xtensa_compiler_part_00.zip + xtensa_compiler_part_01.zip + xtensa_compiler_part_02.zip + xtensa_compiler_part_03.zip + xtensa_compiler_part_04.zip xtensa-esp-elf-14.2.0_20260121-x86_64-w64-mingw32.zip |
| 解压到 | %LOCALAPPDATA%\Arduino15\packages\esp32\tools\xtensa-esp-elf\14.2.0+20260121\ |
② IDF 框架库
| 项目 | 值 |
|---|---|
| 文件名 | esp32-arduino-libs-idf-v5.5.zip |
| 分卷 | idf_libs_part_00.zip~_04.zip(5 卷,90MB×4 + 66MB) |
| 合并 | copy /b idf_libs_part_00.zip + idf_libs_part_01.zip + idf_libs_part_02.zip + idf_libs_part_03.zip + idf_libs_part_04.zip esp32-arduino-libs-idf-v5.5.zip |
| 解压到 | %LOCALAPPDATA%\Arduino15\packages\esp32\tools\esp32-arduino-libs-idf\5.5-129cd0d2\ |
③ 芯片驱动库
| 项目 | 值 |
|---|---|
| 文件名 | esp32-libs-3.3.10.zip |
| 分卷 | 无,单文件 |
| 放到 | %LOCALAPPDATA%\Arduino15\staging\packages\esp32-libs-3.3.10.zip(不解压) |
Arduino IDE 的安装流程中对这个文件做了特殊处理:下载到
staging/packages/后校验 SHA256,通过后自动解压。所以直接放 ZIP 本身即可,IDE 检测到文件存在就会跳过下载并自行解压。
④ Arduino 核心
| 项目 | 值 |
|---|---|
| 文件名 | esp32-core-3.3.10.zip |
| 分卷 | 无,单文件 |
| 解压到 | %LOCALAPPDATA%\Arduino15\packages\esp32\hardware\esp32\3.3.10\ |
⑤ 烧录工具
| 项目 | 值 |
|---|---|
| 文件名 | esptool-v5.3.0-windows-amd64.zip |
| 分卷 | 无,单文件 |
| 解压到 | %LOCALAPPDATA%\Arduino15\packages\esp32\tools\esptool_py\5.3.0\ |
操作步骤
1. 获取文件
| 编号 | 组件 | CSDN 下载链接 |
|---|---|---|
| ① | 编译器 | download.csdn.net/download/llm765800916/93107209 |
| ② | IDF 框架 | download.csdn.net/download/llm765800916/93107213 |
| ③ | 芯片驱动 | download.csdn.net/download/llm765800916/93107214 |
| ④ | Arduino Core | download.csdn.net/download/llm765800916/93107215 |
| ⑤ | 烧录工具 | download.csdn.net/download/llm765800916/93107243 |
付费资源,¥6.90/个。下载后得到 ZIP 文件,解压密码csdn2026,解压后内含download.txt(蓝奏云直链 + 合并说明)。
2. 合并分卷
①和②是大文件拆分。所有分卷下载到同一目录后,CMD 执行:
copy /b xtensa_compiler_part_00.zip + xtensa_compiler_part_01.zip + xtensa_compiler_part_02.zip + xtensa_compiler_part_03.zip + xtensa_compiler_part_04.zip xtensa-esp-elf-14.2.0_20260121-x86_64-w64-mingw32.zip copy /b idf_libs_part_00.zip + idf_libs_part_01.zip + idf_libs_part_02.zip + idf_libs_part_03.zip + idf_libs_part_04.zip esp32-arduino-libs-idf-v5.5.zipPowerShell 下用cmd /c "copy /b ..."包裹。
3. 创建目录结构
在%LOCALAPPDATA%\Arduino15\下创建以下目录(如果不存在):
mkdir%LOCALAPPDATA%\Arduino15\packages\esp32\tools\xtensa-esp-elf\14.2.0+20260121mkdir%LOCALAPPDATA%\Arduino15\packages\esp32\tools\esp32-arduino-libs-idf\5.5-129cd0d2mkdir%LOCALAPPDATA%\Arduino15\packages\esp32\hardware\esp32\3.3.10mkdir%LOCALAPPDATA%\Arduino15\packages\esp32\tools\esptool_py\5.3.0mkdir%LOCALAPPDATA%\Arduino15\staging\packages4. 解压
逐个解压到对应目录。③号不解压,直接把 ZIP 文件放到staging\packages\。
完成后目录结构如下:
%LOCALAPPDATA%\Arduino15\├──staging\│└──packages\│└──esp32-libs-3.3.10.zip└──packages\└──esp32\├──hardware\│└──esp32\│└──3.3.10\│├──boards.txt│├──platform.txt│├──cores/│├──libraries/│└──...└──tools\├──xtensa-esp-elf\14.2.0+20260121\│└──bin\│├──xtensa-esp-elf-gcc.exe│└──...├──esp32-arduino-libs-idf\5.5-129cd0d2\└──esptool_py\5.3.0\5. 验证
重启 Arduino IDE。工具 → 开发板 → 开发板管理器,搜索esp32,版本选3.3.10,点击安装。IDE 会逐个校验文件,已就位的直接跳过,应该在 30 秒内完成。
工具 → 开发板 → ESP32 Arduino → ESP32 Dev Module,编译 Blink:
voidsetup(){pinMode(2,OUTPUT);}voidloop(){digitalWrite(2,HIGH);delay(500);digitalWrite(2,LOW);delay(500);}编译通过且不触发任何下载,说明离线安装成功。
其他芯片型号
上面 5 个包对应经典 ESP32(单模组 Xtensa 双核)。用到其他芯片时只需替换③号:
| 芯片 | ③号包文件名 | 架构 |
|---|---|---|
| ESP32-S3 | esp32s3-libs-3.3.10.zip | Xtensa LX7 |
| ESP32-C3 | esp32c3-libs-3.3.10.zip | RISC-V |
| ESP32-C6 | esp32c6-libs-3.3.10.zip | RISC-V |
| ESP32-S2 | esp32s2-libs-3.3.10.zip | Xtensa LX7 |
①、②、④、⑤仍用上面列的文件,不换。
RISC-V 芯片(C3/C5/C6/H2/P4)还需要 ⑥号包:RISC-V GCC 编译器(
riscv32-esp-elf-14.2.0_20260121-x86_64-w64-mingw32.zip),路径为packages\esp32\tools\riscv32-esp-elf\14.2.0+20260121\。本文不展开,留作后续。
原理
Arduino IDE 的 Boards Manager 安装流程:
1.解析package_esp32_index.json→获取文件列表+URL+SHA2562.遍历files[]:a.检查目标路径/staging路径是否已有文件b.已有且SHA256匹配→跳过c.没有→从GitHub下载→校验→解压3.全部完成→显示INSTALLED关键在第 2.a 步:IDE 不区分文件是手动放的还是自己下载的。只要文件在预期位置且校验通过,就认为是已下载。这就是整个离线安装的基础。
③号包(芯片驱动)不走解压——它在 JSON 里的archiveFileName指向staging/packages/,IDE 下载完原样保留 ZIP,编译时按需引用。其他 4 个包的archiveFileName指向packages/下的工具目录,下载后自动解压到对应版本号子目录。
