Windows 平台工具链的标准设置
概述
ESP-IDF 需要安装一些必备工具,才能围绕 ESP32-S3 构建固件,包括 Python、Git、交叉编译器、CMake 和 Ninja 编译工具等。
在本入门指南中,我们通过 命令提示符 进行有关操作。不过,您在安装 ESP-IDF 后还可以使用 Eclipse Plugin 或其他支持 CMake 的图形化工具 IDE。
备注
限定条件: - 请注意 ESP-IDF 和 ESP-IDF 工具的安装路径不能超过 90 个字符,安装路径过长可能会导致构建失败。 - Python 或 ESP-IDF 的安装路径中一定不能包含空格或括号。 - 除非操作系统配置为支持 Unicode UTF-8,否则 Python 或 ESP-IDF 的安装路径中也不能包括特殊字符(非 ASCII 码字符)
系统管理员可以通过如下方式将操作系统配置为支持 Unicode UTF-8:控制面板-更改日期、时间或数字格式-管理选项卡-更改系统地域-勾选选项 “Beta:使用 Unicode UTF-8 支持全球语言”-点击确定-重启电脑。
ESP-IDF 工具安装器
安装 ESP-IDF 必备工具最简易的方式是下载一个 ESP-IDF 工具安装器。
在线安装与离线安装的区别
在线安装程序非常小,可以安装 ESP-IDF 的所有版本。在安装过程中,安装程序只下载必要的依赖文件,包括 Git For Windows 安装器。在线安装程序会将下载的文件存储在缓存目录 %userprofile%/espressif
中。
离线安装程序不需要任何网络连接。安装程序中包含了所有需要的依赖文件,包括 Git For Windows 安装器。
安装内容
安装程序会安装以下组件:
安装程序允许将程序下载到现有的 ESP-IDF 目录。推荐将 ESP-IDF 下载到 %userprofile%\Desktop\esp-idf
目录下,其中 %userprofile%
代表家目录。
启动 ESP-IDF 环境
安装结束时,如果勾选了 Run ESP-IDF PowerShell Environment
或 Run ESP-IDF Command Prompt (cmd.exe)
,安装程序会在选定的提示符窗口启动 ESP-IDF。
Run ESP-IDF PowerShell Environment
:
Run ESP-IDF Command Prompt (cmd.exe)
:
使用命令提示符
在后续步骤中,我们将使用 Windows 的命令提示符进行操作。
ESP-IDF 工具安装器可在“开始”菜单中,创建一个打开 ESP-IDF 命令提示符窗口的快捷方式。本快捷方式可以打开 Windows 命令提示符(即 cmd.exe),并运行 export.bat
脚本以设置各环境变量(比如 PATH
,IDF_PATH
等)。此外,您可还以通过 Windows 命令提示符使用各种已经安装的工具。
注意,本快捷方式仅适用 ESP-IDF 工具安装器中指定的 ESP-IDF 路径。如果您的电脑上存在多个 ESP-IDF 路径(比如您需要不同版本的 ESP-IDF),您有以下两种解决方法:
为 ESP-IDF 工具安装器创建的快捷方式创建一个副本,并将新快捷方式的 ESP-IDF 工作路径指定为您希望使用的 ESP-IDF 路径。
或者,您可以运行
cmd.exe
,并切换至您希望使用的 ESP-IDF 目录,然后运行export.bat
。注意,这种方法要求PATH
中存在 Python 和 Git。如果您在使用时遇到有关“找不到 Python 或 Git”的错误信息,请使用第一种方法。
开始使用 ESP-IDF
现在您已经具备了使用 ESP-IDF 的所有条件,接下来将介绍如何开始您的第一个工程。
本指南将帮助您完成使用 ESP-IDF 的第一步。按照本指南,您将使用 ESP32-S3 创建第一个工程,并构建、烧录和监控设备输出。
备注
如果您还未安装 ESP-IDF,请参照 安装 中的步骤,获取使用本指南所需的所有软件。
开始创建工程
现在,您可以准备开发 ESP32-S3 应用程序了。您可以从 ESP-IDF 中 examples 目录下的 get-started/hello_world 工程开始。
重要
ESP-IDF 编译系统不支持 ESP-IDF 路径或其工程路径中带有空格。
将 get-started/hello_world 工程复制至您本地的 ~/esp
目录下:
cd %userprofile%\esp
xcopy /e /i %IDF_PATH%\examples\get-started\hello_world hello_world
备注
ESP-IDF 的 examples 目录下有一系列示例工程,您可以按照上述方法复制并运行其中的任何示例,也可以直接编译示例,无需进行复制。
连接设备
现在,请将您的 ESP32-S3 开发板连接到 PC,并查看开发板使用的串口。
在 Windows 操作系统中,串口名称通常以 COM
开头。
有关如何查看串口名称的详细信息,请见 与 ESP32-S3 创建串口连接。
备注
请记住串口名,您会在后续步骤中使用。
配置工程
请进入 hello_world
目录,设置 ESP32-S3 为目标芯片,然后运行工程配置工具 menuconfig
。
Windows
cd %userprofile%\esp\hello_world
idf.py set-target esp32s3
idf.py menuconfig
打开一个新工程后,应首先使用 idf.py set-target esp32s3
设置“目标”芯片。注意,此操作将清除并初始化项目之前的编译和配置(如有)。您也可以直接将“目标”配置为环境变量(此时可跳过该步骤)。更多信息,请见 选择目标芯片:set-target。
正确操作上述步骤后,系统将显示以下菜单:
您可以通过此菜单设置项目的具体变量,包括 Wi-Fi 网络名称、密码和处理器速度等。hello_world
示例项目会以默认配置运行,因此在这一项目中,可以跳过使用 menuconfig
进行项目配置这一步骤。
备注
您终端窗口中显示出的菜单颜色可能会与上图不同。您可以通过选项 --style
来改变外观。请运行 idf.py menuconfig --help
命令,获取更多信息。
如果您使用的是支持的开发板,可以通过板级支持包 (BSP) 来协助您的开发。更多信息,请见 其他提示。
编译工程
请使用以下命令,编译烧录工程:
idf.py build
运行以上命令可以编译应用程序和所有 ESP-IDF 组件,接着生成引导加载程序、分区表和应用程序二进制文件。
$ idf.py build
Running cmake in directory /path/to/hello_world/build
Executing "cmake -G Ninja --warn-uninitialized /path/to/hello_world"...
Warn about uninitialized values.
-- Found Git: /usr/bin/git (found version "2.17.0")
-- Building empty aws_iot component due to configuration
-- Component names: ...
-- Component paths: ...
... (more lines of build system output)
[527/527] Generating hello_world.bin
esptool.py v2.3.1
Project build complete. To flash, run this command:
../../../components/esptool_py/esptool/esptool.py -p (PORT) -b 921600 write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x10000 build/hello_world.bin build 0x1000 build/bootloader/bootloader.bin 0x8000 build/partition_table/partition-table.bin
or run 'idf.py -p PORT flash'
如果一切正常,编译完成后将生成 .bin 文件。
烧录到设备
请使用以下命令,将刚刚生成的二进制文件 (bootloader.bin、partition-table.bin 和 hello_world.bin) 烧录至您的 ESP32-S3 开发板:
idf.py -p PORT [-b BAUD] flash
请将 PORT 替换为 ESP32-S3 开发板的串口名称。
您还可以将 BAUD 替换为您希望的烧录波特率。默认波特率为 460800
。
更多有关 idf.py 参数的详情,请见 idf.py。
备注
勾选 flash
选项将自动编译并烧录工程,因此无需再运行 idf.py build
。
烧录过程中可能遇到的问题
如果在运行给定命令时出现如“连接失败”这样的错误,造成该错误的原因之一可能是运行 esptool.py
时出现错误。esptool.py
是构建系统调用的程序,用于重置芯片、与 ROM 引导加载器交互以及烧录固件的工具。可以按照以下步骤进行手动复位,轻松解决该问题。如果问题仍未解决,请参考 Troubleshooting. 获取更多信息。
esptool.py
通过使 USB 转串口转接器芯片(如 FTDI 或 CP210x)的 DTR 和 RTS 控制线生效来自动复位 ESP32-S3(请参考 与 ESP32-S3 创建串口连接 获取更多详细信息)。DTR 和 RTS 控制线又连接到 ESP32-S3 的 GPIO0
和 CHIP_PU
(EN) 管脚上,因此 DTR 和 RTS 的电压电平变化会使 ESP32-S3 进入固件下载模式。相关示例可查看 ESP32 DevKitC 开发板的 原理图。
一般来说,使用官方的 ESP-IDF 开发板不会出现问题。但是,esptool.py
在以下情况下不能自动重置硬件。
您的硬件没有连接到
GPIO0
和CIHP_PU
的 DTR 和 RTS 控制线。DTR 和 RTS 控制线的配置方式不同
根本没有这样的串行控制线路
根据您硬件的种类,也可以将您 ESP32-S3 开发板手动设置成固件下载模式(复位)。
对于 Espressif 的开发板,您可以参考对应开发板的入门指南或用户指南。例如,可以通过按住 Boot 按钮 (
GPIO0
) 再按住 EN 按钮(CHIP_PU
) 来手动复位 ESP-IDF 开发板。对于其他类型的硬件,可以尝试将
GPIO0
拉低。
常规操作
在烧录过程中,您会看到类似如下的输出日志:
...
esptool.py esp32s3 -p /dev/ttyUSB0 -b 460800 --before=default_reset --after=hard_reset write_flash --flash_mode dio --flash_freq 80m --flash_size 2MB 0x0 bootloader/bootloader.bin 0x10000 hello_world.bin 0x8000 partition_table/partition-table.bin
esptool.py v3.2-dev
Serial port /dev/ttyUSB0
Connecting....
Chip is ESP32-S3
Features: WiFi, BLE
Crystal is 40MHz
MAC: 7c:df:a1:e0:00:64
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Flash will be erased from 0x00000000 to 0x00004fff...
Flash will be erased from 0x00010000 to 0x00039fff...
Flash will be erased from 0x00008000 to 0x00008fff...
Compressed 18896 bytes to 11758...
Writing at 0x00000000... (100 %)
Wrote 18896 bytes (11758 compressed) at 0x00000000 in 0.5 seconds (effective 279.9 kbit/s)...
Hash of data verified.
Compressed 168208 bytes to 88178...
Writing at 0x00010000... (16 %)
Writing at 0x0001a80f... (33 %)
Writing at 0x000201f1... (50 %)
Writing at 0x00025dcf... (66 %)
Writing at 0x0002d0be... (83 %)
Writing at 0x00036c07... (100 %)
Wrote 168208 bytes (88178 compressed) at 0x00010000 in 2.4 seconds (effective 569.2 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 103...
Writing at 0x00008000... (100 %)
Wrote 3072 bytes (103 compressed) at 0x00008000 in 0.1 seconds (effective 478.9 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
Done
如果一切顺利,烧录完成后,开发板将会复位,应用程序 “hello_world” 开始运行。
如果您希望使用 Eclipse 或是 VS Code IDE,而非 idf.py
,请参考 Eclipse Plugin,以及 VSCode Extension。
监视输出
您可以使用 idf.py -p PORT monitor
命令,监视 “hello_world” 工程的运行情况。注意,不要忘记将 PORT 替换为您的串口名称。
运行该命令后,IDF 监视器 应用程序将启动::
$ idf.py -p <PORT> monitor
Running idf_monitor in directory [...]/esp/hello_world/build
Executing "python [...]/esp-idf/tools/idf_monitor.py -b 115200 [...]/esp/hello_world/build/hello_world.elf"...
--- idf_monitor on <PORT> 115200 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
ets Jun 8 2016 00:22:57
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
ets Jun 8 2016 00:22:57
...
此时,您就可以在启动日志和诊断日志之后,看到打印的 “Hello world!” 了。
...
Hello world!
Restarting in 10 seconds...
This is esp32s3 chip with 2 CPU core(s), This is esp32s3 chip with 2 CPU core(s), WiFi/BLE, silicon revision 0, 2MB external flash
Minimum free heap size: 390684 bytes
Restarting in 9 seconds...
Restarting in 8 seconds...
Restarting in 7 seconds...
您可使用快捷键 Ctrl+]
,退出 IDF 监视器。
备注
您也可以运行以下命令,一次性执行构建、烧录和监视过程:
idf.py -p PORT flash monitor
此外,
恭喜,您已完成 ESP32-S3 的入门学习!
现在,您可以尝试一些其他 examples,或者直接开发自己的应用程序。
重要
一些示例程序不支持 ESP32-S3,因为 ESP32-S3 中不包含所需的硬件。
在编译示例程序前请查看 README 文件中 Supported Targets
表格。如果表格中包含 ESP32-S3, 或者不存在这个表格,那么即表示 ESP32-S3 支持这个示例程序。
其他提示
权限问题 /dev/ttyUSB0
使用某些 Linux 版本向 ESP32-S3 烧录固件时,可能会出现 Failed to open port /dev/ttyUSB0
错误消息。此时可以将用户添加至 Linux Dialout 组。
兼容的 Python 版本
ESP-IDF 支持 Python 3.7 及以上版本,建议升级操作系统到最新版本从而更新 Python。也可选择从 sources 安装最新版 Python,或使用 Python 管理系统如 pyenv 对版本进行升级管理。
上手板级支持包
您可以使用 板级支持包 (BSP),协助您在开发板上的原型开发。仅需要调用几个函数,便可以完成对特定开发板的初始化。
一般来说,BSP 支持开发板上所有硬件组件。除了管脚定义和初始化功能外,BSP 还附带如传感器、显示器、音频编解码器等外部元件的驱动程序。
BSP 通过 IDF 组件管理器 发布,您可以前往 IDF 组件注册器 进行下载。
以下示例演示了如何将 ESP-BOX BSP 添加到项目中:
idf.py add-dependency esp-box
更多有关使用 BSP 的示例,请前往 BSP 示例文件夹。
相关文档
想要自定义安装流程的高阶用户可参照: