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:[email protected] 的依赖如下:
esp32:[email protected]
├─ ① xtensa-esp-elf-gcc 14.2.0+20260121 395MB C/C++ → Xtensa 机器码
├─ ② esp32-arduino-libs-idf 5.5-129cd0d2 425MB WiFi/BLE/FreeRTOS/LWIP
├─ ③ esp32-libs 3.3.10 42MB 外设驱动(SPI/I2C/UART/GPIO/ADC)
├─ ④ esp32-core 3.3.10 44MB Arduino API 封装 + bootloader
└─ ⑤ esptool 5.3.0 61MB USB-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. 获取文件
付费资源,¥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.zip
PowerShell 下用 cmd /c "copy /b ..." 包裹。
3. 创建目录结构
在 %LOCALAPPDATA%\Arduino15\ 下创建以下目录(如果不存在):
mkdir %LOCALAPPDATA%\Arduino15\packages\esp32\tools\xtensa-esp-elf\14.2.0+20260121
mkdir %LOCALAPPDATA%\Arduino15\packages\esp32\tools\esp32-arduino-libs-idf\5.5-129cd0d2
mkdir %LOCALAPPDATA%\Arduino15\packages\esp32\hardware\esp32\3.3.10
mkdir %LOCALAPPDATA%\Arduino15\packages\esp32\tools\esptool_py\5.3.0
mkdir %LOCALAPPDATA%\Arduino15\staging\packages
4. 解压
逐个解压到对应目录。③号不解压,直接把 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:
void setup() { pinMode(2, OUTPUT); }
void loop() { 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 + SHA256
2. 遍历 files[]:
a. 检查目标路径 / staging 路径是否已有文件
b. 已有且 SHA256 匹配 → 跳过
c. 没有 → 从 GitHub 下载 → 校验 → 解压
3. 全部完成 → 显示 INSTALLED
关键在第 2.a 步:IDE 不区分文件是手动放的还是自己下载的。只要文件在预期位置且校验通过,就认为是已下载。这就是整个离线安装的基础。
③号包(芯片驱动)不走解压——它在 JSON 里的 archiveFileName 指向 staging/packages/,IDE 下载完原样保留 ZIP,编译时按需引用。其他 4 个包的 archiveFileName 指向 packages/ 下的工具目录,下载后自动解压到对应版本号子目录。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/llm765800916/article/details/162795455



