环境搭建

[English]


ESP32-S2 搭建环境时使用 idf.py set-target esp32-s2 指令时,显示 “Error: No such command ‘set-target’” 为什么?

  • 因为 esp-idf 是从 release/v4.2 版本开始适配 ESP32-S2 的,所以如果在之前的 esp-idf 版本上去搭建 ESP32-S2 环境会出现错误。例如使用指令 idf.py set-target esp32-s2 时,会报错 “Error: No such command ‘set-target’”。

  • 建议使用 esp-idf release/v4.2 及以后版本进行 ESP32-S2 的测试开发。更多请参考 ESP32-S2 入门指南


idf.py menuconfig 编译报 “Configuring incomplete, errors occured” 的错误信息如何解决呢?

查看 CMake 版本,使用 cmake --version 进行查看, 如果低于 3.10.0 版本,我们认为是低版本, 建议更新 cmake 版本:


Windows 下使用 ESP-IDF Tools 2.3 工具安装 master 版本的 esp-idf 出现错误:Installation has failed with exit code 2,是什么原因?

此报错跟网络环境有关,该网路环境下无法流畅的下载 github 仓库,导致电脑 SDK 下载失败。


Windows 下使用 esp-idf-tools-setup-2.3.exe 搭建环境,make menuconfig 出现如下错误:

-- Warning: Did not find file Compiler/-ASM Configure
-- Configuring incomplete, erros occurred!

出现此错误的原因是没有因为未找到编译工程,可以切换目录到 esp-idf/examples/get-started/hello_world 示例中进行测试验证。


Windows 下使用 esp-idf-tools-setup-2.2.exe 安装过程中,出现 python 工具异常:

Installation has failed with exit code 1
  1. 更新一下工具链:https://dl.espressif.com/dl/esp-idf-tools-setup-2.3.exe

  2. 并且删除 idf_tools.py 中过时的选项 “–no-site-packages”


Windows 下安装编译环境出现 Download failed: 安全频道支持出错

这是因为 Windows 系统已经默认不开启对 SSl3.0 的支持。

修改方法:在 控制面版 中找到 internet 选项,并在其打开的窗口中选择 高级,最后在 设置 中勾选 使用 SSL 3.0


Windows 下执行 export.bat,提示 CMake、gdbgui 版本错误:

C:\Users\xxxx\.espressif\tools\cmake\3.16.4\bin
The following Python requirements are not satisfied:
gdbgui>=0.13.2.0

这个问题是由于上游的 gdbgui 发生了更新,并且导致与低版本的 python 不兼容,目前的解决方法是:手动修改 esp-idf 根目录下的 requirements.txt,找到 gdbdui 那条,修改成:gdbgui==0.13.2.0


将版本从 v3.3 更新至最新版本后,使用 idf.menuconfig 及 idf.build 报错:

  • 按照 快速入门 重新搭建一下环境。

  • 把 hello_world 目录下的 build 和 sdkconfig 删除。


如果同时要开发 ESP32 和 ESP8266,该怎样设置 PATHIDF_PATH

  • PATH 是没有影响的,可以放在一起: export PATH=”$HOME/esp/xtensa-esp32-elf/bin:$HOME/esp/xtensa-lx106-elf/bin:$PATH”。

  • 对于 IDF_PATH,可以在工程的 Makefile 里强制指定:

    在基于 ESP32 的工程项目里使用:IDF_PATH = $(HOME)/esp/esp-idf;在基于 ESP8266 的工程项目里使用:IDF_PATH = $(HOME)/esp/ESP8266_RTOS_SDK


每一次切换项目时都需要重新调用 idf.py set-target 指令吗?

使用 idf.py build 编译项目时,target 的选择取决于:

  1. 如果编译目录已经生成,系统将使用上一次编译时使用的 target。该参数存储于编译目录中的 CMakeCache.txt 文件内。

  2. 如果还未生成编译目录,系统将检查 sdkconfig 文件,并使用其中定义的 target。

  3. 如果同时存在有编译目录和 sdkconfig 文件,且其中分别定义了不同的 target,系统将报错。但该情况一般不会发生,除非在未删除编译目录的情况下手动更改了 sdkconfig 文件。

  4. 如果 sdkconfig 文件或编译目录都不存在,可使用 IDF_TARGET 设置 target,作为 CMake 变量或环境变量。同样的,如果该变量设置的 target 和 sdkconfig 文件或编译目录中定义的 target 不一致时,系统也会报错。

  5. 最后,如果上述三种途径都未定义 target,系统将使用默认值。可在 sdkconfig.defaults 中设置默认的 target 值。

  6. 若未设定任何默认值,系统将使用 esp32 进行编译。

关于是否需要多次调用 idf.py set-target

  • 一旦某个项目配置完成并使用 target 编译过一次后,则无需再次调用 idf.py set-target 指令重设,直接切换到另一项目中即可。idf.py set-target 指令会将配置的 target 值存储于项目下的编译目录和 sdkconfig 文件中,并非存储于终端环境。因此,如果你切换并编译了另一项目,再次切回上一项目时,其 target 不会改变,仍为上一次为这个项目配置的值。

  • 若想使项目自动编译某一默认的 target 值,请将默认值添加至项目的 sdkconfig.defaults 文件(如 CONFIG_IDF_TARGET="esp32s2")。此后,如果项目中未存在 sdkconfig 文件和编译目录,idf.py build 将使用 sdkconfig.defaults 中定义的默认值进行编译。

  • idf.py set-target 指令定义的 target 值可覆盖 sdkconfig.defaults 中配置的值。