摘要:本文详细介绍在Ubuntu系统下搭建ESP32开发环境的步骤。主要包括:1)创建esp32目录并安装必要工具;2)从Gitee克隆esp-gitee-tools工具和v5.2版本的esp-idf框架;3)执行子模块更新脚本下载蓝牙、WiFi等协议栈库文件;4)运行install.sh安装工具链;5)执行export.sh配置环境变量使系统识别idf.py命令。整个过程涉及大量依赖库的下载和配置,需要耐心等待各步骤完成。
目录
一、安装必要的工具
1.先创建一个目录存放文件
2.进入这个目录
二、拉取esp-gitee-tools工具
三、拉取esp-idf
1.继续在目录esp32下,使用指令,拉取esp-idf
四、执行子模块更新脚本
1.进入esp-gitee-tools目录
2.执行子模块更新脚本
五、安装工具链 (编译器等)
1.进入 IDF 目录。
2.运行安装脚本
3.必须执行这条命令,让终端“认识” idf.py。
4.接下来就可以进入代码的文件编译代码了
本文的开发环境基于vmware+ubuntu+vscode+MobaXterm,主要涵盖ubuntu下的环境搭建,其他虚拟机的安装等不做介绍
一、安装必要的工具
sudo apt-get install git wget flex bison gperf python3-pip python3-venv cmake ninja-build ccache libffi-dev dfu-util libusb-1.0-0 net-tools
1.先创建一个目录存放文件
mkdir esp32
2.进入这个目录
cd esp32
二、拉取esp-gitee-tools工具
1.在目录esp32中执行以下代码
git clone https://gitee.com/EspressifSystems/esp-gitee-tools.git
以下图片代表着拉取成功

在esp目录下,使用指令ls可以看到已经有了esp-gitee-tools文件

三、拉取esp-idf
1.继续在目录esp32下,使用指令,拉取esp-idf
直接从 Gitee 克隆 v5.2 分支,这步很快,因为它只下载主框架
git clone -b v5.2 https://gitee.com/EspressifSystems/esp-idf.git ~/esp32/esp-idf
2.以下代码表示克隆成功!

四、执行子模块更新脚本
1.进入esp-gitee-tools目录
cd ~/esp32/esp-gitee-tools
2.执行子模块更新脚本
./submodule-update.sh ~/esp32/esp-idf
注意: 这一步会下载大量的二进制库(蓝牙、WiFi 协议栈等)。由于是从 Gitee 下载,速度应该很快。请耐心等待它运行完,直到看到类似 Done 的提示。
看到这一长串的 checked out 和 Entering说明成功
ayne@wayne-ubuntu25:~/esp32/esp-gitee-tools$ ./submodule-update.sh ~/esp32/esp-idf
Submodule 'components/bootloader/subproject/components/micro-ecc/micro-ecc' (https://gitee.com/kmackay/micro-ecc.git) registered for path 'components/bootloader/subproject/components/micro-ecc/micro-ecc'
Submodule 'components/bt/controller/lib_esp32' (https://gitee.com/espressif/esp32-bt-lib.git) registered for path 'components/bt/controller/lib_esp32'
Submodule 'components/bt/controller/lib_esp32c2/esp32c2-bt-lib' (https://gitee.com/espressif/esp32c2-bt-lib.git) registered for path 'components/bt/controller/lib_esp32c2/esp32c2-bt-lib'
Submodule 'components/bt/controller/lib_esp32c3_family' (https://gitee.com/espressif/esp32c3-bt-lib.git) registered for path 'components/bt/controller/lib_esp32c3_family'
Submodule 'components/bt/controller/lib_esp32c6/esp32c6-bt-lib' (https://gitee.com/espressif/esp32c6-bt-lib.git) registered for path 'components/bt/controller/lib_esp32c6/esp32c6-bt-lib'
Submodule 'components/bt/controller/lib_esp32h2/esp32h2-bt-lib' (https://gitee.com/espressif/esp32h2-bt-lib.git) registered for path 'components/bt/controller/lib_esp32h2/esp32h2-bt-lib'
Submodule 'components/bt/esp_ble_mesh/lib/lib' (https://gitee.com/espressif/esp-ble-mesh-lib.git) registered for path 'components/bt/esp_ble_mesh/lib/lib'
Submodule 'components/bt/host/nimble/nimble' (https://gitee.com/espressif/esp-nimble.git) registered for path 'components/bt/host/nimble/nimble'
Submodule 'components/cmock/CMock' (https://gitee.com/ThrowTheSwitch/CMock.git) registered for path 'components/cmock/CMock'
Submodule 'components/esp_coex/lib' (https://gitee.com/espressif/esp-coex-lib.git) registered for path 'components/esp_coex/lib'
Submodule 'components/esp_phy/lib' (https://gitee.com/espressif/esp-phy-lib.git) registered for path 'components/esp_phy/lib'
Submodule 'components/esp_wifi/lib' (https://gitee.com/espressif/esp32-wifi-lib.git) registered for path 'components/esp_wifi/lib'
Submodule 'components/heap/tlsf' (https://gitee.com/espressif/tlsf.git) registered for path 'components/heap/tlsf'
Submodule 'components/ieee802154/lib' (https://gitee.com/espressif/esp-ieee802154-lib.git) registered for path 'components/ieee802154/lib'
Submodule 'components/json/cJSON' (https://gitee.com/DaveGamble/cJSON.git) registered for path 'components/json/cJSON'
Submodule 'components/lwip/lwip' (https://gitee.com/espressif/esp-lwip.git) registered for path 'components/lwip/lwip'
Submodule 'components/mbedtls/mbedtls' (https://gitee.com/espressif/mbedtls.git) registered for path 'components/mbedtls/mbedtls'
Submodule 'components/mqtt/esp-mqtt' (https://gitee.com/espressif/esp-mqtt.git) registered for path 'components/mqtt/esp-mqtt'
Submodule 'components/openthread/lib' (https://gitee.com/espressif/esp-thread-lib.git) registered for path 'components/openthread/lib'
Submodule 'components/openthread/openthread' (https://gitee.com/espressif/openthread.git) registered for path 'components/openthread/openthread'
Submodule 'components/protobuf-c/protobuf-c' (https://gitee.com/protobuf-c/protobuf-c.git) registered for path 'components/protobuf-c/protobuf-c'
Submodule 'components/spiffs/spiffs' (https://gitee.com/pellepl/spiffs.git) registered for path 'components/spiffs/spiffs'
Submodule 'components/unity/unity' (https://gitee.com/ThrowTheSwitch/Unity.git) registered for path 'components/unity/unity'
Cloning into '/home/wayne/esp32/esp-idf/components/bootloader/subproject/components/micro-ecc/micro-ecc'…
remote: Enumerating objects: 1159, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 1159 (delta 1), reused 0 (delta 0), pack-reused 1155 (from 1)
Receiving objects: 100% (1159/1159), 679.62 KiB | 456.00 KiB/s, done.
Resolving deltas: 100% (682/682), done.
Cloning into '/home/wayne/esp32/esp-idf/components/bt/controller/lib_esp32'…
remote: Enumerating objects: 2102, done.
remote: Counting objects: 100% (128/128), done.
remote: Compressing objects: 100% (96/96), done.
remote: Total 2102 (delta 59), reused 0 (delta 0), pack-reused 1974 (from 1)
Receiving objects: 100% (2102/2102), 9.72 MiB | 947.00 KiB/s, done.
Resolving deltas: 100% (1304/1304), done.
Cloning into '/home/wayne/esp32/esp-idf/components/bt/controller/lib_esp32c2/esp32c2-bt-lib'…
remote: Enumerating objects: 270, done.
remote: Counting objects: 100% (72/72), done.
remote: Compressing objects: 100% (72/72), done.
remote: Total 270 (delta 49), reused 0 (delta 0), pack-reused 198 (from 1)
Receiving objects: 100% (270/270), 8.66 MiB | 1.00 MiB/s, done.
Resolving deltas: 100% (168/168), done.
Cloning into '/home/wayne/esp32/esp-idf/components/bt/controller/lib_esp32c3_family'…
remote: Enumerating objects: 805, done.
remote: Counting objects: 100% (184/184), done.
remote: Compressing objects: 100% (184/184), done.
remote: Total 805 (delta 101), reused 0 (delta 0), pack-reused 621 (from 1)
Receiving objects: 100% (805/805), 11.98 MiB | 1.25 MiB/s, done.
Resolving deltas: 100% (398/398), done.
Cloning into '/home/wayne/esp32/esp-idf/components/bt/controller/lib_esp32c6/esp32c6-bt-lib'…
remote: Enumerating objects: 439, done.
remote: Counting objects: 100% (439/439), done.
remote: Compressing objects: 100% (278/278), done.
remote: Total 439 (delta 175), reused 158 (delta 78), pack-reused 0 (from 0)
Receiving objects: 100% (439/439), 25.40 MiB | 2.56 MiB/s, done.
Resolving deltas: 100% (175/175), done.
Cloning into '/home/wayne/esp32/esp-idf/components/bt/controller/lib_esp32h2/esp32h2-bt-lib'…
remote: Enumerating objects: 285, done.
remote: Counting objects: 100% (117/117), done.
remote: Compressing objects: 100% (117/117), done.
remote: Total 285 (delta 72), reused 0 (delta 0), pack-reused 168 (from 1)
Receiving objects: 100% (285/285), 17.92 MiB | 1.43 MiB/s, done.
Resolving deltas: 100% (166/166), done.
Cloning into '/home/wayne/esp32/esp-idf/components/bt/esp_ble_mesh/lib/lib'…
remote: Enumerating objects: 286, done.
remote: Counting objects: 100% (122/122), done.
remote: Compressing objects: 100% (86/86), done.
remote: Total 286 (delta 32), reused 0 (delta 0), pack-reused 164 (from 1)
Receiving objects: 100% (286/286), 16.12 MiB | 1.55 MiB/s, done.
Resolving deltas: 100% (77/77), done.
Cloning into '/home/wayne/esp32/esp-idf/components/bt/host/nimble/nimble'…
remote: Enumerating objects: 65383, done.
remote: Counting objects: 100% (199/199), done.
remote: Compressing objects: 100% (178/178), done.
remote: Total 65383 (delta 100), reused 0 (delta 0), pack-reused 65184 (from 1)
Receiving objects: 100% (65383/65383), 16.39 MiB | 1.44 MiB/s, done.
Resolving deltas: 100% (42638/42638), done.
Cloning into '/home/wayne/esp32/esp-idf/components/cmock/CMock'…
remote: Enumerating objects: 6746, done.
remote: Counting objects: 100% (329/329), done.
remote: Compressing objects: 100% (222/222), done.
remote: Total 6746 (delta 174), reused 157 (delta 106), pack-reused 6417 (from 1)
Receiving objects: 100% (6746/6746), 3.97 MiB | 663.00 KiB/s, done.
Resolving deltas: 100% (4611/4611), done.
Cloning into '/home/wayne/esp32/esp-idf/components/esp_coex/lib'…
remote: Enumerating objects: 1185, done.
remote: Counting objects: 100% (547/547), done.
remote: Compressing objects: 100% (305/305), done.
remote: Total 1185 (delta 233), reused 0 (delta 0), pack-reused 638 (from 1)
Receiving objects: 100% (1185/1185), 1.40 MiB | 658.00 KiB/s, done.
Resolving deltas: 100% (506/506), done.
Cloning into '/home/wayne/esp32/esp-idf/components/esp_phy/lib'…
remote: Enumerating objects: 1163, done.
remote: Counting objects: 100% (292/292), done.
remote: Compressing objects: 100% (292/292), done.
remote: Total 1163 (delta 175), reused 2 (delta 0), pack-reused 871 (from 1)
Receiving objects: 100% (1163/1163), 10.37 MiB | 2.06 MiB/s, done.
Resolving deltas: 100% (688/688), done.
Cloning into '/home/wayne/esp32/esp-idf/components/esp_wifi/lib'…
remote: Enumerating objects: 76573, done.
remote: Counting objects: 100% (2494/2494), done.
remote: Compressing objects: 100% (801/801), done.
remote: Total 76573 (delta 2040), reused 2073 (delta 1693), pack-reused 74079 (from 1)
Receiving objects: 100% (76573/76573), 1.34 GiB | 2.51 MiB/s, done.
Resolving deltas: 100% (63738/63738), done.
Cloning into '/home/wayne/esp32/esp-idf/components/heap/tlsf'…
remote: Enumerating objects: 203, done.
remote: Counting objects: 100% (16/16), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 203 (delta 5), reused 0 (delta 0), pack-reused 187 (from 1)
Receiving objects: 100% (203/203), 74.52 KiB | 346.00 KiB/s, done.
Resolving deltas: 100% (95/95), done.
Cloning into '/home/wayne/esp32/esp-idf/components/ieee802154/lib'…
remote: Enumerating objects: 204, done.
remote: Total 204 (delta 0), reused 0 (delta 0), pack-reused 204 (from 1)
Receiving objects: 100% (204/204), 1.23 MiB | 499.00 KiB/s, done.
Resolving deltas: 100% (64/64), done.
Cloning into '/home/wayne/esp32/esp-idf/components/json/cJSON'…
remote: Enumerating objects: 4707, done.
remote: Counting objects: 100% (25/25), done.
remote: Compressing objects: 100% (25/25), done.
remote: Total 4707 (delta 6), reused 0 (delta 0), pack-reused 4682 (from 1)
Receiving objects: 100% (4707/4707), 2.46 MiB | 648.00 KiB/s, done.
Resolving deltas: 100% (3143/3143), done.
Cloning into '/home/wayne/esp32/esp-idf/components/lwip/lwip'…
remote: Enumerating objects: 57284, done.
remote: Counting objects: 100% (143/143), done.
remote: Compressing objects: 100% (143/143), done.
remote: Total 57284 (delta 63), reused 0 (delta 0), pack-reused 57141 (from 1)
Receiving objects: 100% (57284/57284), 11.20 MiB | 976.00 KiB/s, done.
Resolving deltas: 100% (43336/43336), done.
Cloning into '/home/wayne/esp32/esp-idf/components/mbedtls/mbedtls'…
remote: Enumerating objects: 253982, done.
remote: Counting objects: 100% (22365/22365), done.
remote: Compressing objects: 100% (6529/6529), done.
remote: Total 253982 (delta 16763), reused 20883 (delta 15601), pack-reused 231617 (from 1)
Receiving objects: 100% (253982/253982), 88.06 MiB | 2.35 MiB/s, done.
Resolving deltas: 100% (200067/200067), done.
Cloning into '/home/wayne/esp32/esp-idf/components/mqtt/esp-mqtt'…
remote: Enumerating objects: 7278, done.
remote: Counting objects: 100% (3388/3388), done.
remote: Compressing objects: 100% (1370/1370), done.
remote: Total 7278 (delta 1780), reused 2839 (delta 1451), pack-reused 3890 (from 1)
Receiving objects: 100% (7278/7278), 2.42 MiB | 332.00 KiB/s, done.
Resolving deltas: 100% (3885/3885), done.
Cloning into '/home/wayne/esp32/esp-idf/components/openthread/lib'…
remote: Enumerating objects: 1614, done.
remote: Counting objects: 100% (719/719), done.
remote: Compressing objects: 100% (446/446), done.
remote: Total 1614 (delta 315), reused 0 (delta 0), pack-reused 895 (from 1)
Receiving objects: 100% (1614/1614), 10.92 MiB | 1.46 MiB/s, done.
Resolving deltas: 100% (705/705), done.
Cloning into '/home/wayne/esp32/esp-idf/components/openthread/openthread'…
remote: Enumerating objects: 126825, done.
remote: Counting objects: 100% (5304/5304), done.
remote: Compressing objects: 100% (3057/3057), done.
remote: Total 126825 (delta 3986), reused 2827 (delta 2168), pack-reused 121521 (from 1)
Receiving objects: 100% (126825/126825), 97.44 MiB | 5.32 MiB/s, done.
Resolving deltas: 100% (102877/102877), done.
Cloning into '/home/wayne/esp32/esp-idf/components/protobuf-c/protobuf-c'…
remote: Enumerating objects: 4388, done.
remote: Counting objects: 100% (378/378), done.
remote: Compressing objects: 100% (214/214), done.
remote: Total 4388 (delta 216), reused 204 (delta 115), pack-reused 4010 (from 1)
Receiving objects: 100% (4388/4388), 1.56 MiB | 382.00 KiB/s, done.
Resolving deltas: 100% (2873/2873), done.
Cloning into '/home/wayne/esp32/esp-idf/components/spiffs/spiffs'…
remote: Enumerating objects: 1553, done.
remote: Total 1553 (delta 0), reused 0 (delta 0), pack-reused 1553 (from 1)
Receiving objects: 100% (1553/1553), 1.04 MiB | 580.00 KiB/s, done.
Resolving deltas: 100% (1084/1084), done.
Cloning into '/home/wayne/esp32/esp-idf/components/unity/unity'…
remote: Enumerating objects: 7440, done.
remote: Counting objects: 100% (487/487), done.
remote: Compressing objects: 100% (284/284), done.
remote: Total 7440 (delta 287), reused 314 (delta 199), pack-reused 6953 (from 1)
Receiving objects: 100% (7440/7440), 7.01 MiB | 819.00 KiB/s, done.
Resolving deltas: 100% (4698/4698), done.
Submodule path 'components/bootloader/subproject/components/micro-ecc/micro-ecc': checked out '24c60e243580c7868f4334a1ba3123481fe1aa48'
Submodule path 'components/bt/controller/lib_esp32': checked out 'b0f132f17ed48553a4638344023d44af61b7c20a'
Submodule path 'components/bt/controller/lib_esp32c2/esp32c2-bt-lib': checked out '7f3eb5f5568439cdb32dfe9dbf69d99e9c72e69f'
Submodule path 'components/bt/controller/lib_esp32c3_family': checked out '393ac4c33b419226aac9d1e8f1b5d553b7f3bc97'
Submodule path 'components/bt/controller/lib_esp32c6/esp32c6-bt-lib': checked out 'e4d0d86b6f4fe4233f53e71d7dfa18faa0f19f27'
Submodule path 'components/bt/controller/lib_esp32h2/esp32h2-bt-lib': checked out '90793e83195547303e0fd190c890c8bff754d5d3'
Submodule path 'components/bt/esp_ble_mesh/lib/lib': checked out '41bf5fc0926fd6d3fb39cb5107e97f2fc6aed7e5'
Submodule path 'components/bt/host/nimble/nimble': checked out 'f29df73af65971479782db6f3dcf39d26ca278e5'
Submodule path 'components/cmock/CMock': checked out 'eeecc49ce8af123cf8ad40efdb9673e37b56230f'
Submodule path 'components/esp_coex/lib': checked out '496ee81e168881cad93f9a813802e7f7a6daec92'
Submodule path 'components/esp_phy/lib': checked out '798678e4e011c666a931292fc300ec02160cdc6a'
Submodule path 'components/esp_wifi/lib': checked out '2dddee30b7aa2534cbd200f2fb8df7957e447a9c'
Submodule path 'components/heap/tlsf': checked out 'd2e28f872472ffc6a704faae65ddee1f24e2dfba'
Submodule path 'components/ieee802154/lib': checked out '102b03c8095de8a337c293f79dce189be63186f3'
Submodule path 'components/json/cJSON': checked out '87d8f0961a01bf09bef98ff89bae9fdec42181ee'
Submodule path 'components/lwip/lwip': checked out '542ba2997f6cc14fe9c3d781bf9b0d890cd70bb1'
Submodule path 'components/mbedtls/mbedtls': checked out 'dd91f30058dfad68d80267cc82cd8472c4aa54b5'
Submodule path 'components/mqtt/esp-mqtt': checked out 'e6afdb4025fe018ae0add44e3c45249ea1974774'
Submodule path 'components/openthread/lib': checked out 'e0969fc15c1991d91446a0dc5e4625ed2c0bb014'
Submodule path 'components/openthread/openthread': checked out '41ef80717f4b757440125932723cc8721ef42f7f'
Submodule path 'components/protobuf-c/protobuf-c': checked out 'abc67a11c6db271bedbb9f58be85d6f4e2ea8389'
Submodule path 'components/spiffs/spiffs': checked out '0dbb3f71c5f6fae3747a9d935372773762baf852'
Submodule path 'components/unity/unity': checked out '7d2bf62b7e6afaf38153041a9d53c21aeeca9a25'
Entering 'components/bootloader/subproject/components/micro-ecc/micro-ecc'
Entering 'components/bt/controller/lib_esp32'
Entering 'components/bt/controller/lib_esp32c2/esp32c2-bt-lib'
Entering 'components/bt/controller/lib_esp32c3_family'
Entering 'components/bt/controller/lib_esp32c6/esp32c6-bt-lib'
Entering 'components/bt/controller/lib_esp32h2/esp32h2-bt-lib'
Entering 'components/bt/esp_ble_mesh/lib/lib'
Entering 'components/bt/host/nimble/nimble'
Entering 'components/cmock/CMock'
Submodule 'vendor/c_exception' (https://github.com/throwtheswitch/cexception.git) registered for path 'vendor/c_exception'
Submodule 'vendor/unity' (https://github.com/throwtheswitch/unity.git) registered for path 'vendor/unity'
Cloning into '/home/wayne/esp32/esp-idf/components/cmock/CMock/vendor/c_exception'…
remote: Enumerating objects: 389, done.
remote: Counting objects: 100% (9/9), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 389 (delta 1), reused 0 (delta 0), pack-reused 380 (from 1)
Receiving objects: 100% (389/389), 566.18 KiB | 490.00 KiB/s, done.
Resolving deltas: 100% (182/182), done.
Cloning into '/home/wayne/esp32/esp-idf/components/cmock/CMock/vendor/unity'…
remote: Enumerating objects: 7440, done.
remote: Counting objects: 100% (487/487), done.
remote: Compressing objects: 100% (284/284), done.
remote: Total 7440 (delta 288), reused 314 (delta 199), pack-reused 6953 (from 1)
Receiving objects: 100% (7440/7440), 7.01 MiB | 851.00 KiB/s, done.
Resolving deltas: 100% (4699/4699), done.
Submodule path 'vendor/c_exception': checked out '71b47be7c950f1bf5f7e5303779fa99a16224bb6'
Submodule path 'vendor/unity': checked out 'cf949f45ca6d172a177b00da21310607b97bc7a7'
Entering 'vendor/c_exception'
Entering 'vendor/unity'
Entering 'components/esp_coex/lib'
Entering 'components/esp_phy/lib'
Entering 'components/esp_wifi/lib'
Entering 'components/heap/tlsf'
Entering 'components/ieee802154/lib'
Entering 'components/json/cJSON'
Entering 'components/lwip/lwip'
Entering 'components/mbedtls/mbedtls'
Entering 'components/mqtt/esp-mqtt'
Entering 'components/openthread/lib'
Entering 'components/openthread/openthread'
Entering 'components/protobuf-c/protobuf-c'
Entering 'components/spiffs/spiffs'
Entering 'components/unity/unity'
五、安装工具链 (编译器等)
1.进入 IDF 目录。
cd ~/esp32/esp-idf
2.运行安装脚本
./install.sh
下面这一长串表示成功执行安装脚本

3.必须执行这条命令,让终端“认识” idf.py。
. ./export.sh





