本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Espressif ESP32-DevKitC 和 ESP-WROVER-KIT 入门
要按照本教程入门配备 ESP32-WROOM-32、ESP32-SOLO-1 或 ESP-WROVER 模块的 Espressif ESP32-DevKitC 和 ESP-WROVER-KIT-VB。从我们的合作伙伴处购买AWS合作伙伴设备目录,使用以下链接:
FreeRTOS 支持这些版本的开发主板。
有关最新版本的更多信息,请参阅Esp32-DevKitC V4
目前,ESP32-WROVER-KIT 和 ESP DevKitC 的 FreeRTOS 端口不支持对称多处理 (SMP) 功能。
概览
该教程将指导您完成以下步骤:
-
将主板连接到主机。
-
在主机上安装软件来开发和调试微控制器主板的嵌入式应用程序。
-
将 FreeRTOS 演示应用程序交叉编译为二进制映像。
-
将应用程序二进制映像加载到您的主板上,然后运行该应用程序。
-
跨串行连接与主板上运行的应用程序进行交互,以便进行监视和调试。
先决条件
在 Espressif 主板上开始使用 FreeRTOS 之前,必须先设置您的AWS帐户和权限。要创建账户,请参阅创建并激活AWS账户
添加AWS Identity and Access Management(IAM) 用户转到您的账户,请参阅IAM 用户指南. 要向 IAM 用户账户授予访问权限AWS IoT和 FreeRTOS,将以下 IAM 策略附加到您的 IAM 用户账户:
-
AmazonFreeRTOSFullAccess
允许对 IAM 用户的所有 FreeRTOS 资源 (freertos: *) 进行完全访问。
-
AWSIoTFullAccess
允许对所有 IAM 用户的完全访问权限AWS IoT资源(iot:*)。
要将 AmazonFreeRTOSFullAccess 策略附加到 IAM 用户
-
导航到 IAM 控制台
。 -
在导航窗格中,选择 Users(用户)。
-
在搜索文本框中输入您的用户名,然后从列表中选择该名称。
-
选择 Add permissions(添加权限)。
-
选择 Attach existing policies directly(直接附上现有策略)。
-
在搜索框中,输入AmazonFreeRTOSFullAccess,从列表中选择它,然后选择。后续:审核。
-
选择 Add permissions(添加权限)。
要附加 AWSIoTFullAccess 针对 IAM 用户的策略
-
导航到 IAM 控制台
。 -
在导航窗格中,选择 Users(用户)。
-
在搜索文本框中输入您的用户名,然后从列表中选择该名称。
-
选择 Add permissions(添加权限)。
-
选择 Attach existing policies directly(直接附上现有策略)。
-
在搜索框中,输入AWSIoTFullAccess,从列表中选择它,然后选择。后续:审核。
-
选择 Add permissions(添加权限)。
有关 IAM 和用户账户的更多信息,请参阅IAM 用户指南.
有关策略的更多信息,请参阅。IAM 中的权限和策略.
开始使用 ESP-IDF v4.2
本教程中的 Linux 命令要您使用 Bash shell。
-
设置乐鑫硬件。
有关设置 ESP32-DevKitC 开发主板硬件的信息,请参阅ESP32-devKitc V4 入门指南
. 有关设置 ESP-WROVER-KIT 开发主板硬件的信息,请参阅ESP-WROVER-KIT V4.1 入门指南
. 重要 当您到达时开始使用停止,然后返回到此页面上的说明。
-
设置开发环境。
要与您的主板进行通信,必须下载并安装工具链。要对于您的主机操作系统,请按照以下说明操作:
重要 当您阅读到下的 “Get ESP-IDF” 说明时后续步骤下,停止,然后返回到此页面上的说明。
-
完成安装(Linux /macOS)。
ESP-IDF Windows 安装程序安装所有必要的工具。Linux 和 macOS 平台需要额外的步骤才能完成安装。请在您后续操作以下步骤下载并配置 FreeRTOS.
-
打开一个命令行窗口。
-
导航到 FreeRTOS 下载目录,然后运行以下脚本为您的平台下载并安装 espressif 工具链。
vendors/espressif/esp-idf/install.sh
-
使用以下命令将 ESP\-IDF 工具链工具添加到终端的路径中。
source vendors/espressif/esp-idf/export.sh
-
-
建立串行连接。
要在您的主机和 ESP32-DevKitC 之间建立串行连接,必须安装 CP210x USB to UART Bridge VCP 驱动程序。您可以从 Silicon Labs
下载这些驱动程序。 要在您的主机和 ESP32-WROVER-KIT 之间建立串行连接,必须安装 FTDI 虚拟 COM 端口驱动程序。你可以从下载此驱动程序FTDI
. 有关更多信息,请参阅使用 ESP32 建立串行连接
。建立串行连接后,记下主板连接的串行端口。在构建演示时需要用到它。
下载并配置 FreeRTOS
设置环境后,您可以从以下任一项下载 FreeRTOS:
FreeRTOS 控制台
(选择正确的配置和硬件平台例如,与你的设备匹配”连接到AWS IoT-ESP32-DevKitC“。)
在本教程中,FreeRTOS 配置文件位于
. (例如,如果freertos
/vendors/espressif/boards/board-name
/aws_demos/config_files/FreeRTOSConfig.hAFR_BOARD espressif.esp32_devkitc
被选中,配置文件位于
。) freertos
/vendors/espressif/boards/esp32/aws_demos/config_files/FreeRTOSConfig.h
配置 FreeRTOS 演示应用程序
-
如果运行的是 macOS 或 Linux,请打开终端提示符。如果你正在运行 Windows,请打开 “ESP-IDF 4.x CMD” 应用程序(如果在安装 ESP-IDF 工具链时包含此选项),否则打开 “命令提示符” 应用程序。
-
要验证您已安装 Python3,请运行。
python --version
此时显示已安装的版本。如果未安装 Python 3.0.1 或更高版本,则可以从Python
网站。 -
您需要AWS运行的命令行界面 (CLI)AWS IoT命令。如果运行的是 Windows,请使用
easy_install awscli
安装命令AWS“命令” 或 “ESP-IDF 4.x CMD” 应用程序中的 CLI。如果运行的是 macOS 或 Linux,请参阅。安装AWSCLI.
-
Run(运行)
aws configure
然后配置AWS用你的 CLIAWS访问密钥 ID、私有访问密钥和默认值AWS区域。有关更多信息,请参阅 。配置AWSCLI.
-
使用以下命令安装AWS适用于 Python (Boto3) 的软件开发工具包:
-
在 Windows 上,在 “命令” 或 “ESP-IDF 4.x CMD” 应用程序中,运行
easy_install boto3
-
在 macOS 或 Linux 上,运行
pip install tornado nose --user
然后运行
pip install boto3 --user
FreeRTOS 包括
SetupAWS.py
可以更轻松地设置您的 Espressif 主板以连接到的脚本。AWS IoT. 要配置此脚本,请打开
并设置以下属性:freertos
/tools/aws_config_quick_start/configure.jsonafr_source_dir
-
计算机上的
目录的完整路径。确保您使用正斜杠来指定此路径。freertos
thing_name
-
要分配给代表您的主板的 AWS IoT 事物的名称。
wifi_ssid
-
Wi-Fi 网络的 SSID。
wifi_password
-
Wi-Fi 网络的密码。
wifi_security
-
Wi-Fi 网络的安全类型。
有效的安全类型有:
-
eWiFiSecurityOpen
(开放,不安全) -
eWiFiSecurityWEP
(WEP 安全性) -
eWiFiSecurityWPA
(WPA 安全性) -
eWiFiSecurityWPA2
(WPA2 安全性)
-
-
-
运行配置脚本。
-
如果运行的是 macOS 或 Linux,请打开终端提示符。如果你正在运行 Windows,请打开 “ESP-IDF 4.x CMD” 或 “命令” 应用程序。
-
导航到
目录然后运行freertos
/tools/aws_config_quick_startpython SetupAWS.py setup
该脚本执行以下操作:
-
创建 IoT 事物、证书和策略。
-
将 IoT 策略附加到证书,将证书附加到AWS IoT事物。
-
填充
aws_clientcredential.h
用你的文件AWS IoT终端节点、Wi-Fi SSID 和凭证。 -
要格式化您的证书和私有密钥,然后将其写入
aws_clientcredential_keys.h
头文件。
注意 仅出于演示目的对证书进行了硬编码。生产级应用程序应将这些文件存储在安全位置。
有关 的更多信息
SetupAWS.py
,请参阅README.md
中的
目录。freertos
/tools/aws_config_quick_start -
-
在云上监控 MQTT 消息
在运行 FreeRTOS 演示项目之前,您可以在AWS IoT控制台监控您的设备发送到的消息AWS云。
使用 AWS IoT MQTT 客户端订阅 MQTT 主题
-
导航到 AWS IoT 控制台
。 -
在导航窗格中,选择。测试,然后选择MQTT 测试客户端.
-
在 Subscription topic (订阅主题)中,输入
,然后选择 Subscribe to topic (订阅主题)。your-thing-name
/example/topic
当演示项目在你的设备上成功运行时,你会看到 “Hello World!” 已多次发送到您订阅的主题。
使用 idf.py 脚本构建、刷写和运行 FreeRTOS 演示项目
你可以使用乐鑫的 IDF 实用程序 (idf.py
) 来构建项目并将二进制文件闪存到设备上。
某些设置可能要求您使用端口选项"-p port-name"
和idf.py
以指定正确的端口,如下例中所示。
idf.py -p /dev/cu.usbserial-00101301B flash
在 Windows、Linux 和 macOS 上构建和闪存 FreeRTOS(ESP-IDF v4.2)
-
导航到 FreeRTOS 下载目录的根目录。
-
在命令行窗口中,输入以下命令以将 ESP-IDF 工具添加到终端的 PATH。
- Windows(“命令” 应用程序)
-
vendors\espressif\esp-idf\export.bat
- Windows(“ESP-IDF 4.x CMD” 应用程序)
-
(打开应用程序时已完成此操作。)
- Linux/macOS
-
source vendors/espressif/esp-idf/export.sh
-
在中配置 cmake
build
然后使用以下命令构建固件映像。idf.py -DVENDOR=espressif -DBOARD=esp32_wrover_kit -DCOMPILER=xtensa-esp32 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 文件。
-
使用以下命令擦除开发板的闪存。
idf.py erase_flash
-
使用
idf.py
将应用程序二进制文件刷写到您的主板。idf.py flash
-
使用以下命令监控主板串行端口的输出。
idf.py monitor
注意 您可以合并这些命令,例如以下示例所示。
idf.py erase_flash flash monitor
对于某些主机设置,您必须在刷新板时指定端口,例如以下示例中的。
idf.py erase_flash flash monitor -p /dev/ttyUSB1
使用 CMake 构建和闪存 FreeRTOS
除了idf.py
IDF SDK 提供的用于构建和运行代码的脚本,你也可以使用 CMake 构建项目。目前,它支持 Unix Makefiles 或 Ninja 构建系统。
构建和刷写项目
-
在命令行窗口中,导航到 FreeRTOS 下载目录的根目录。
-
运行以下脚本将 ESP-IDF 工具添加到命令行管理程序的 PATH 中。
- Windows
-
vendors\espressif\esp-idf\export.bat
- Linux/macOS
-
source vendors/espressif/esp-idf/export.sh
-
输入以下命令以生成构建文件。
- 使用 Unix Makefiles
-
cmake -DVENDOR=espressif -DBOARD=esp32_wrover_kit -DCOMPILER=xtensa-esp32 -S . -B ./YOUR_BUILD_DIRECTORY -DAFR_ENABLE_ALL_MODULES=1 -DAFR_ENABLE_TESTS=0
- 与忍者一起
-
cmake -DVENDOR=espressif -DBOARD=esp32_wrover_kit -DCOMPILER=xtensa-esp32 -S . -B ./YOUR_BUILD_DIRECTORY -DAFR_ENABLE_ALL_MODULES=1 -DAFR_ENABLE_TESTS=0 -GNinja
-
构建 项目。
- 使用 Unix Makefiles
-
make -C ./YOUR_BUILD_DIRECTORY -j8
- 与忍者一起
-
ninja -C ./YOUR_BUILD_DIRECTORY -j8
-
擦掉闪光灯然后闪光板。
- 使用 Unix Makefiles
-
make -C ./YOUR_BUILD_DIRECTORY erase_flash
make -C ./YOUR_BUILD_DIRECTORY flash
- 与忍者一起
-
ninja -C ./YOUR_BUILD_DIRECTORY erase_flash
ninja -C ./YOUR_BUILD_DIRECTORY flash
运行低功耗蓝牙演示
FreeRTOS 支持低功耗蓝牙库连接性。
要跨低功耗蓝牙运行 FreeRTOS 演示项目,您必须在 iOS 或 Android 移动设备上运行 FreeRTOS 低功耗蓝牙移动开发工具包演示应用程序。
要设置 FreeRTOS 低功耗蓝牙移动开发工具包演示应用程序
-
按照 适用于 FreeRTOS 的移动开发工具包 中的说明,在您的主机上下载并安装适用于移动平台的开发工具包。
-
按照 低功耗蓝 FreeRTOS 移动开发工具包演示应用程序 中的说明,在您的移动设备上设置演示移动应用程序。
有关如何在主板上运行低功耗蓝牙 MQTT 演示的说明,请参阅低功耗蓝牙 MQTT.
有关如何在主板上运行 Wi-Fi 预配置演示的说明,请参阅Wi-Fi 预置.
在适用于 ESP32 的 CMake 项目中使用 FreeRTOS
如果您想在您自己的 CMake 项目中使用 FreeRTOS,可以将它设置为子目录并与应用程序一起构建。首先,从哪里获取 FreeRTOS 的副本GitHub
git submodule add -b release https://github.com/aws/amazon-freertos.git freertos
如果已发布更高版本,则可以使用以下命令更新本地副本。
# Pull the latest changes from the remote tracking branch. git submodule update --remote -- freertos
# Commit the submodule change because it is pointing to a different revision now. git add freertos
git commit -m "Update FreeRTOS to a new release"
如果您的项目具有以下目录结构:
- freertos (the copy that you obtained from GitHub or the AWS IoT console) - src - main.c (your application code) - CMakeLists.txt
然后以下是顶级的示例CMakeLists.txt
文件,可用于与 FreeRTOS 一起构建应用程序。
cmake_minimum_required(VERSION 3.13) project(freertos_examples) # Tell IDF build to link against this target. set(IDF_EXECUTABLE_SRCS "<complete_path>/src/main.c") set(IDF_PROJECT_EXECUTABLE my_app) # Add FreeRTOS as a subdirectory. AFR_BOARD tells which board to target. set(AFR_BOARD espressif.esp32_devkitc CACHE INTERNAL "") add_subdirectory(freertos) # Link against the mqtt library so that we can use it. Dependencies are transitively # linked. target_link_libraries(my_app PRIVATE AFR::core_mqtt)
要构建项目,请运行以下 CMake 命令。确保 ESP32 编译器位于 PATH 环境变量中。
cmake -S . -B build-directory -DCMAKE_TOOLCHAIN_FILE=freertos/tools/cmake/toolchains/xtensa-esp32.cmake -GNinja
cmake --build build-directory
要将应用程序刷写到您的主板,请运行以下命令。
cmake --build build-directory --target flash
使用 FreeRTOS 中的组件
在运行 CMake 后,您可以在摘要输出中找到所有可用的组件。它应与以下示例类似。
====================Configuration for FreeRTOS==================== Version: 202107.00 Git version: 202107.00-g79ad6defb Target microcontroller: vendor: Espressif board: ESP32-DevKitC description: Development board produced by Espressif that comes in two variants either with ESP-WROOM-32 or ESP32-WROVER module family: ESP32 data ram size: 520KB program memory size: 4MB Host platform: OS: Linux-4.15.0-66-generic Toolchain: xtensa-esp32 Toolchain path: /opt/xtensa-esp32-elf CMake generator: Ninja FreeRTOS modules: Modules to build: backoff_algorithm, common, common_io, core_http, core_http_demo_dependencies, core_json, core_mqtt, core_mqtt_agent, core_mqtt_agent_demo_dependencies, core_mqtt_demo_dependencies, crypto, defender, dev_mode_key_ provisioning, device_defender, device_defender_demo_ dependencies, device_shadow, device_shadow_demo_dependencies, freertos_cli_plus_uart, freertos_plus_cli, greengrass, http_demo_helpers, https, jobs, jobs_demo_dependencies, kernel, logging, mqtt, mqtt_agent_interface, mqtt_demo_ helpers, mqtt_subscription_manager, ota, ota_demo_ dependencies, ota_demo_version, pkcs11, pkcs11_helpers, pkcs11_implementation, pkcs11_utils, platform, secure_sockets, serializer, shadow, tls, transport_interface_secure_sockets, wifi Enabled by user: common_io, core_http_demo_dependencies, core_json, core_mqtt_agent_demo_dependencies, core_mqtt_demo_ dependencies, defender, device_defender, device_defender_demo_ dependencies, device_shadow, device_shadow_demo_dependencies, freertos_cli_plus_uart, freertos_plus_cli, greengrass, https, jobs, jobs_demo_dependencies, logging, ota_demo_dependencies, pkcs11, pkcs11_helpers, pkcs11_implementation, pkcs11_utils, platform, secure_sockets, shadow, wifi Enabled by dependency: backoff_algorithm, common, core_http, core_mqtt, core_mqtt_agent, crypto, demo_base, dev_mode_key_provisioning, freertos, http_demo_helpers, kernel, mqtt, mqtt_agent_ interface, mqtt_demo_helpers, mqtt_subscription_manager, ota, ota_demo_version, pkcs11_mbedtls, serializer, tls, transport_interface_secure_sockets, utils 3rdparty dependencies: jsmn, mbedtls, pkcs11, tinycbor Available demos: demo_cli_uart, demo_core_http, demo_core_mqtt, demo_core_mqtt_ agent, demo_device_defender, demo_device_shadow, demo_greengrass_connectivity, demo_jobs, demo_ota_core_http, demo_ota_core_mqtt, demo_tcp Available tests: =========================================================================
您可以从中引用任何组件Modules to build
列表。要将它们链接到你的应用程序中,请将AFR::
例如,在名称前面的命名空间,AFR::core_mqtt
、AFR::ota
,等等。
使用 ESP-IDF 添加自定义组件
使用 ESP-IDF 时,您可以添加更多组件。例如,假定您想添加一个名为 example_component
的组件,并且您的项目如下所示:
- freertos - components - example_component - include - example_component.h - src - example_component.c - CMakeLists.txt - src - main.c - CMakeLists.txt
以下是的示例:CMakeLists.txt
用于组件的文件。
add_library(
example_component
src/example_component.c
) target_include_directories(example_component
PUBLIC include)
然后,在顶层CMakeLists.txt
文件中,通过在后面插入以下行即可添加组件:add_subdirectory(freertos)
.
add_subdirectory(
component/example_component
)
然后,修改target_link_libraries
以包括你的组件。
target_link_libraries(my_app PRIVATE AFR::core_mqtt PRIVATE
example_component
)
默认情况下,此组件现在将自动链接到您的应用程序代码。现在,您可以包含其标头文件并调用它定义的函数。
覆盖 FreeRTOS 的配置
目前,未提供明确定义的方法来重新定义 FreeRTOS 源树外部的配置。默认情况下,CMake 将在
和 freertos
/vendors/espressif/boards/esp32/aws_demos/config_files/
目录中进行查找。但是,可以使用解决方法来告知编译器首先搜索其他目录。例如,您可以为 FreeRTOS 配置添加其他文件夹。freertos
/demos/include/
- freertos - freertos-configs - aws_clientcredential.h - aws_clientcredential_keys.h - iot_mqtt_agent_config.h - iot_config.h - components - src - CMakeLists.txt
freertos-configs
下的文件是从
和 freertos
/vendors/espressif/boards/esp32/aws_demos/config_files/
目录复制的。然后,在你的顶级freertos
/demos/include/CMakeLists.txt
文件,之前添加此行add_subdirectory(freertos)
以便编译器首先搜索此目录。
include_directories(BEFORE freertos-configs)
为 ESP-IDF 提供您自己的 sdkconfig
如果要提供您自己的 sdkconfig.default
,您可以从命令行设置 CMake 变量 IDF_SDKCONFIG_DEFAULTS
:
cmake -S . -B build-directory -DIDF_SDKCONFIG_DEFAULTS=path_to_your_sdkconfig_defaults -DCMAKE_TOOLCHAIN_FILE=freertos/tools/cmake/toolchains/xtensa-esp32.cmake -GNinja
如果您没有为自己指定位置sdkconfig.default
文件,FreeRTOS 使用位于的默认文件
.freertos
/vendors/espressif/boards/esp32/aws_demos/sdkconfig.defaults
有关更多信息,请参阅 。项目配置
摘要
如果您的项目具有一个名为 example_component
的组件,并且您要覆盖某些配置,以下是顶级 CMakeLists.txt
文件的完整示例。
cmake_minimum_required(VERSION 3.13) project(freertos_examples) set(IDF_PROJECT_EXECUTABLE my_app) set(IDF_EXECUTABLE_SRCS "src/main.c") # Tell IDF build to link against this target. set(IDF_PROJECT_EXECUTABLE my_app) # Add some extra components. IDF_EXTRA_COMPONENT_DIRS is a variable used by ESP-IDF # to collect extra components. get_filename_component( EXTRA_COMPONENT_DIRS "components/example_component" ABSOLUTE ) list(APPEND IDF_EXTRA_COMPONENT_DIRS ${EXTRA_COMPONENT_DIRS}) # Override the configurations for FreeRTOS. include_directories(BEFORE freertos-configs) # Add FreeRTOS as a subdirectory. AFR_BOARD tells which board to target. set(AFR_BOARD espressif.esp32_devkitc CACHE INTERNAL "") add_subdirectory(freertos) # Link against the mqtt library so that we can use it. Dependencies are transitively # linked. target_link_libraries(my_app PRIVATE AFR::core_mqtt)
问题排查
-
如果您运行的是 macOS,而该操作系统不会识别您的 ESP-WROVER-KIT,请确保您未安装 D2XX 驱动程序。要卸载它们,请按照适用于 macOS X 的 FTDI 驱动程序安装指南
中的说明操作。 -
ESP-IDF 提供的监控实用程序(使用 make Monitor 调用)可帮助您解码地址。因此,如果应用程序停止运行,它可以帮助您获取一些有意义的回溯跟踪信息。有关更多信息,请参阅 。自动地址解码
在乐鑫网站上。 -
还可以启用 GDBstub 来通过 gdb 通信,无需任何特殊 JTAG 硬件。有关更多信息,请参阅 。使用 GDBSTUB 启动 GDB
在乐鑫网站上。 -
有关设置基于 OpenOCD 的环境的信息(如果需要基于 JTAG 硬件的调试),请参阅JTAG 调试
在乐鑫网站上。 -
如果
pyserial
无法使用安装pip
在 macOS 上,从pyserial 网站. -
如果主板连续重置,请尝试通过在终端上输入以下命令来擦除闪存。
make erase_flash
-
如果您在运行
idf_monitor.py
时看到错误,请使用 Python 2.7。 -
FreeRTOS 中必需的库包含在 ESP-IDF 中,因此无需从外部下载它们。如果
IDF_PATH
环境变量已设置,我们建议您在生成 FreeRTOS 之前清除它。 -
在 Windows 上,生成项目可能需要 3-4 分钟。为了缩短构建时间,您可以使用
-j4
打开 make 命令。make flash monitor -j4
-
如果您的设备无法连接到 AWS IoT,请打开
aws_clientcredential.h
文件并验证该文件中的配置变量已正确定义。clientcredentialMQTT_BROKER_ENDPOINT[]
应类似于1234567890123-ats.iot.us-east-1.amazonaws.com
。 -
如果您遵循在适用于 ESP32 的 CMake 项目中使用 FreeRTOS中的步骤,并且您看到来自链接器的未定义的引用错误,则通常是由于缺少关联的库或演示所致。要添加它们,请使用标准 CMake 函数
target_link_libraries
更新CMakeLists.txt
文件(在根目录下) 。 -
ESP-IDF v4.2 支持使用xtensa\-esp32\-elf\-gcc\-gcc 8\ .2\ .0\。工具链。如果您使用的是较早版本的 Xtensa 工具链,请下载所需的版本。
-
如果你看到类似下面的错误日志,关于 ESP-IDF v4.2 没有满足的 python 依赖关系:
The following Python requirements are not satisfied: click>=5.0 pyserial>=3.0 future>=0.15.2 pyparsing>=2.0.3,<2.4.0 pyelftools>=0.22 gdbgui==0.13.2.0 pygdbmi<=0.9.0.2 reedsolo>=1.5.3,<=1.5.4 bitstring>=3.1.6 ecdsa>=0.16.0 Please follow the instructions found in the "Set up the tools" section of ESP-IDF Getting Started Guide
使用以下 Python 命令在你的平台上安装 python 依赖项:
root/vendors/espressif/esp-idf/requirements.txt
有关更多故障排除信息,请参问题排查入门.
调试
在 Espressif ESP32-DevKitC 和 ESP-WROVER-KIT 上调试代码(ESP-IDF v4.2)
本节介绍如何使用 ESP-IDF v4.2 调试乐鑫硬件。您需要 JTAG 到 USB 电缆。我们使用 USB 到 MPSSE 电缆(例如,FTDI C232HM-DDHSL-0
- ESP-DevKitC JTAG 设置
-
对于 FTDI C232HM-DDHSL-0 电缆,以下是与 ESP32 DevkitC 的连接。
| C232HM-DDHSL-0 Wire Color | ESP32 GPIO Pin | JTAG Signal Name | | ------------------------- | -------------- | ---------------- | | Brown (pin 5) | IO14 | TMS | | Yellow (pin 3) | IO12 | TDI | | Black (pin 10) | GND | GND | | Orange (pin 2) | IO13 | TCK | | Green (pin 4) | IO15 | TDO |
- ESP-WROVER-KIT JTAG 设置
-
对于 FTDI C232HM-DDHSL-0 电缆,以下是与 ESP32-WROVER-KIT 的连接。
| C232HM-DDHSL-0 Wire Color | ESP32 GPIO Pin | JTAG Signal Name | | ------------------------- | -------------- | ---------------- | | Brown (pin 5) | IO14 | TMS | | Yellow (pin 3) | IO12 | TDI | | Orange (pin 2) | IO13 | TCK | | Green (pin 4) | IO15 | TDO |
这些表源自 FTDI C232HM-DDHSL-0 数据表
。有关更多信息,请参阅数据手册中的 “C232HM MPSSE 电缆连接和机械详细信息” 部分。 要在 ESP-WROVER-KIT 上启用 JTAG,请将跳线放在 TMS、TDO、TDI、TCK 和 S_TDI 针脚上,如此处所示。
- 在 Windows 上进行调试(ESP-IDF v4.2)
-
在 Windows 上设置调试
-
将 FTDI C232HM-DDHSL-0 的 USB 一端连接到您的计算机,另一端的操作如在 Espressif ESP32-DevKitC 和 ESP-WROVER-KIT 上调试代码(ESP-IDF v4.2)中所述。FTDI C232HM-DDHSL-0 设备应显示在设备管理器下的通用串行总线控制器中。
-
在通用串行总线设备列表下,右键单击C232HM-DDHSL-0设备,然后选择属性.
注意 该设备可能被列为 USB Serial Port (USB 串行端口)。
要查看设备的属性,请在属性窗口中,选择详细信息选项卡。如果未列出设备,请安装适用于 FTDI C232HM-DDHSL-0 的 Windows 驱动程序
. -
在 Details (详细信息) 选项卡上,选择 Property (属性),然后选择 Hardware IDs (硬件 ID)。您应看到如下内容:值字段中返回的子位置类型。
FTDIBUS\COMPORT&VID_0403&PID_6014
在此示例中,供应商 ID 为 0403,产品 ID 为 6014。
验证这些 ID与
projects/espressif/esp32/make/aws_demos/esp32_devkitj_v1.cfg
中的 ID 匹配。ID 在以开头的行中指定。ftdi_vid_pid
后跟供应商 ID 和产品 ID。ftdi_vid_pid 0x0403 0x6014
-
将文件解压缩到
C:\
并将C:\openocd-esp32\bin
添加到系统路径。 -
OpenOCD 需要 libusb,默认情况下未在 Windows 上安装。要安装 libusb:
-
下载 zadig.exe
。 -
运行
zadig.exe
。在 Options (选项) 菜单中,选择 List All Devices (列出所有设备)。 -
从下拉菜单中,选择C232HM-DDHSL-0.
-
在绿色箭头右侧的目标驱动程序字段中,选择 WinUSB。
-
对于目标驱动程序字段下方的列表,请选择箭头,然后选择安装驱动. 选择 Replace Driver (替换驱动程序)。
-
-
打开命令提示符窗口,导航到 FreeRTOS 下载目录的根目录,然后运行以下命令。
idf.py openocd
保持此命令提示符窗口处于打开状态。
-
打开一个新的命令提示符窗口,导航到 FreeRTOS 下载目录的根目录并运行。
idf.py flash monitor
-
打开另一个命令提示符窗口,导航到 FreeRTOS 下载目录的根目录,然后等到演示开始在您的主板上运行。如果确实如此,请运行
idf.py gdb
程序应在
main
函数中停止。注意 ESP32 支持最多两个断点。
-
- 在 macOS 上进行调试(ESP-IDF v4.2)
-
-
下载 OpenOCD
。 -
提取下载的 .tar 文件,并将
.bash_profile
中的路径设置为OCD_INSTALL_DIR/openocd-esp32/bin
。 -
使用以下命令安装:
libusb
在 macOS 上。brew install libusb
-
使用以下命令卸载串行端口驱动程序。
sudo kextunload -b com.FTDI.driver.FTDIUSBSerialDriver
-
使用以下命令卸载串行端口驱动程序。
sudo kextunload -b com.FTDI.driver.FTDIUSBSerialDriver
-
如果您在高于 10.9 的 macOS 版本上运行,请使用以下命令卸载 Apple FTDI 驱动程序。
sudo kextunload -b com.apple.driver.AppleUSBFTDI
-
使用以下命令获取 FTDI 电缆的产品 ID 和供应商 ID。它会列出连接的 USB 设备。
system_profiler SPUSBDataType
来自的输出
system_profiler
它应与以下内容类似。DEVICE: Product ID: product-ID Vendor ID: vendor-ID (Future Technology Devices International Limited)
-
打开
projects/espressif/esp32/make/aws_demos/esp32_devkitj_v1.cfg
文件。设备的供应商 ID 和产品 ID 在以ftdi_vid_pid
开头的行中指定。更改 ID 以匹配上一步骤system_profiler
输出中的 ID。 -
打开终端窗口,导航到 FreeRTOS 下载目录的根目录,然后使用以下命令运行 OpenOCD。
idf.py openocd
保持此终端窗口处于打开状态
-
打开一个新终端,使用以下命令来加载 FTDI 串行端口驱动程序。
sudo kextload -b com.FTDI.driver.FTDIUSBSerialDriver
-
导航到 FreeRTOS 下载目录的根目录并运行
idf.py flash monitor
-
打开另一个新终端,导航到 FreeRTOS 下载目录的根目录并运行。
idf.py gdb
程序应在
main
停止。
- 在 Linux 上进行调试(ESP-IDF v4.2)
-
-
下载 OpenOCD
。提取 tarball 并按照自述文件中的安装说明操作。 -
使用以下命令在 Linux 上安装 libusb。
sudo apt-get install libusb-1.0
-
打开终端并输入 ls -l /dev/ttyUSB* 来列出连接到您计算机的所有 USB 设备。这可以帮助您检查操作系统是否识别主板上的 USB 端口。将会看到类似下面的输出。
$ls -l /dev/ttyUSB* crw-rw---- 1 root dialout 188, 0 Jul 10 19:04 /dev/ttyUSB0 crw-rw---- 1 root dialout 188, 1 Jul 10 19:04 /dev/ttyUSB1
-
注销,然后登录并重新对主板加电,使更改生效。在终端提示符下,列出 USB 设备。确保组所有者已从更改为
dialout
到plugdev
.$ls -l /dev/ttyUSB* crw-rw---- 1 root plugdev 188, 0 Jul 10 19:04 /dev/ttyUSB0 crw-rw---- 1 root plugdev 188, 1 Jul 10 19:04 /dev/ttyUSB1
较小编号的
/dev/ttyUSBn
接口用于 JTAG 通信。另一个接口路由到 ESP32 的串行端口 (UART),用于将代码上传到 ESP32 的闪存。 -
在终端窗口中,导航到 FreeRTOS 下载目录的根目录,然后使用以下命令运行 OpenOCD。
idf.py openocd
-
打开另一个终端,导航到 FreeRTOS 下载目录的根目录,然后运行以下命令。
idf.py flash monitor
-
打开另一个终端,导航到 FreeRTOS 下载目录的根目录,然后运行以下命令:
idf.py gdb
程序应在
main()
中停止。
-