Espressif ESP32-DevKitC 和 ESP-WROVER-KIT 入門 - FreeRTOS

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Espressif ESP32-DevKitC 和 ESP-WROVER-KIT 入門

重要

這是 FreeRTOS 使用者指南的封存版本,可與 FreeRTOS 版本 202012.00 搭配使用。如需本文件的最新版本,請參閱 FreeRTOS 使用者指南

遵循本教學課程,開始使用配備 ESP32-WROOM-32, ESP32-SOLO-132-WROOM-32、ESP32-SOLO-1 或 ESP-WROVER 模組的 Espressif ESP32-DevKitC,以及 ESP-WROVER-KIT-VB。若要從合作夥伴裝置目錄中的 AWS 合作夥伴購買,請使用以下連結:

FreeRTOS 支援這些版本的開發板。

如需這些主機板最新版本的詳細資訊,請參閱 Espressif 網站上的 ESP32-DevKitC V4 ESP-WROVER-KIT v4.1。

注意

目前,ESP32-WROVER-KIT 和 ESP DevKitC 的 FreeRTOS 連接埠不支援對稱多處理 (SMP) 功能。

概觀

本教學課程將指引您完成下列步驟:

  1. 將電路板連接至主機

  2. 在主機機器上安裝軟體,以開發和偵錯微型控制器主機板的內嵌應用程式

  3. 將 FreeRTOS 示範應用程式跨編譯至二進位映像

  4. 將應用程式二進位映像載入您的電路板,然後執行應用程式

  5. 透過序列連線與在電路板上執行的應用程式互動,以用於監控和偵錯

先決條件

在 Espressif 電路板上開始使用 FreeRTOS 之前,您必須設定 AWS 您的帳戶和許可。

註冊 AWS 帳戶

如果您沒有 AWS 帳戶,請完成下列步驟來建立一個。

註冊 AWS 帳戶
  1. 開啟 https://portal.aws.amazon.com/billing/signup

  2. 請遵循線上指示進行。

    註冊程序的一部分包括接聽電話或文字訊息,並在電話鍵盤上輸入驗證碼。

    當您註冊 時 AWS 帳戶,AWS 帳戶根使用者會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務,請將管理存取權指派給使用者,並且僅使用根使用者來執行需要根使用者存取權的任務

AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時登錄 https://aws.amazon.com/ 並選擇我的帳戶,以檢視您目前的帳戶活動並管理帳戶。

建立具有管理存取權的使用者

註冊 後 AWS 帳戶,請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center和建立管理使用者,以免將根使用者用於日常任務。

保護您的 AWS 帳戶根使用者
  1. 選擇根使用者並輸入 AWS 帳戶 您的電子郵件地址,以帳戶擁有者AWS Management Console身分登入 。在下一頁中,輸入您的密碼。

    如需使用根使用者登入的說明,請參閱 AWS 登入 使用者指南中的以根使用者身分登入

  2. 若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。

    如需說明,請參閱《IAM 使用者指南》中的為您的 AWS 帳戶 根使用者 (主控台) 啟用虛擬 MFA 裝置

建立具有管理存取權的使用者
  1. 啟用 IAM Identity Center。

    如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的啟用 AWS IAM Identity Center

  2. 在 IAM Identity Center 中,將管理存取權授予使用者。

    如需使用 IAM Identity Center 目錄 做為身分來源的教學課程,請參閱AWS IAM Identity Center 《 使用者指南》中的使用預設值設定使用者存取權 IAM Identity Center 目錄

以具有管理存取權的使用者身分登入
  • 若要使用您的 IAM Identity Center 使用者簽署,請使用建立 IAM Identity Center 使用者時傳送至您電子郵件地址的簽署 URL。

    如需使用 IAM Identity Center 使用者登入的說明,請參閱AWS 登入 《 使用者指南》中的登入 AWS 存取入口網站

指派存取權給其他使用者
  1. 在 IAM Identity Center 中,建立一個許可集來遵循套用最低權限的最佳實務。

    如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的建立許可集

  2. 將使用者指派至群組,然後對該群組指派單一登入存取權。

    如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的新增群組

若要提供存取權,請新增權限至您的使用者、群組或角色:

  • 中的使用者和群組 AWS IAM Identity Center:

    建立權限合集。請按照 AWS IAM Identity Center 使用者指南 中的 建立權限合集 說明進行操作。

  • 透過身分提供者在 IAM 中管理的使用者:

    建立聯合身分的角色。遵循「IAM 使用者指南」的為第三方身分提供者 (聯合) 建立角色中的指示。

  • IAM 使用者:

注意

FreeRTOS 202012.00 版本支援 ESP-IDF v3.3。如果您使用的是較新版本的 FreeRTOS,請遵循 IDFv4.2 的特定說明,網址為 ESP-IDF 4.2 版入門

ESP-IDF 3.3 版入門

本節說明如何在 Espressif 硬體上使用 ESP-IDF v3.3。若要使用 ESP-IDF 4.2 版,請參閱 ESP-IDF 4.2 版入門

設定 Espressif 硬體

如需設定 ESP32-DevKitC 開發板硬體的詳細資訊,請參閱 ESP32-DevKitC V4 入門指南

如需設定 ESP-WROVER-KIT 開發板硬體的相關資訊,請參閱 ESP-WROVER-KIT V4.1 入門指南

重要

當您到達 Espressif 指南的入門區段時,請停止,然後遵循以下步驟。

設定開發環境

若要與您的主機板通訊,您必須下載並安裝工具鏈。

設定工具鏈

注意

ESP-IDF v3.3 不支援最新版本的 ESP32 編譯器。如果您已安裝最新版本的 ESP32 編譯器,則應將其解除安裝,並使用工具鏈安裝中包含的相容版本編譯器。請參閱本節中的連結。若要檢查編譯器的版本,請執行下列命令。

xtensa-esp32-elf-gcc --version

若要設定工具鏈,請遵循主機機器作業系統的下列指示:

重要

當您達到後續步驟下的「取得 ESP-IDF」指示時,請停止,然後返回此頁面的指示。

如果您遵循後續步驟下的「取得 ESP-IDF」指示,現在或之前,您應該從系統清除IDF_PATH環境變數,然後再繼續。如果您遵循「取得 ESP-IDF」指示,則會自動設定此環境變數。

安裝 CMake

需要 CMake 建置系統才能建置此裝置的 FreeRTOS 示範和測試應用程式。FreeRTOS 支援 3.13 版和更新版本。

您可以從 CMake.org 下載最新版的 CMake。同時提供來源和二進位發佈。

如需搭配 FreeRTOS 使用 CMake 的詳細資訊,請參閱 搭配 FreeRTOS 使用 CMake

建立序列連線

若要在您的主機與 ESP32-DevKitC 之間建立序列連線,您必須安裝 CP210x USB to UART Bridge VCP 驅動程式。您可以從 Silicon Labs 下載這些驅動程式。

若要在您的主機與 ESP32-WROVER-KIT 之間建立序列連線,您必須安裝一些 FTDI virtual COM 連接埠驅動程式。您可以從 FTDI 下載這些驅動程式。

如需詳細資訊,請參閱建立與 ESP32 的序列連線。在您建立序連接之後,請記下開發板連接的序列連接埠。您在建立示範時會需要它。

下載並設定 FreeRTOS

設定環境後,您可以從 GitHub 下載 FreeRTOS。如需說明,請參閱 GitHub 網站上的 README.md 檔案。

設定 FreeRTOS 示範應用程式

  1. 如果您正在執行 macOS 或 Linux,請開啟終端機提示。如果您正在執行 Windows,請開啟 mingw32.exeMinGW 是原生 Microsoft Windows 應用程式的最小開發環境。

  2. 若要確認您已安裝 Python 2.7.10 或更新版本,請執行

    python --version

    安裝的版本即會顯示。如果您沒有安裝 Python 2.7.10 或更新版本,您可以從 Python 網站安裝。

  3. 您需要 AWS Command Line Interface (AWS CLI) 來執行 AWS IoT 命令。如果您正在執行 Windows,請使用 在 AWS CLI mingw32 環境中easy_install awscli安裝 。

    如果您正在執行 macOS 或 Linux,請參閱安裝 AWS CLI

  4. AWS CLI 使用您的 AWS 存取金鑰 ID、私密存取金鑰和 AWS 區域執行aws configure和設定 。如需詳細資訊,請參閱設定 AWS CLI

  5. 使用下列命令來安裝適用於 Python (boto3) 的 AWS SDK:

    • 在 Windows 的 mingw32 環境中,執行

      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.json 並設定下列屬性:

afr_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 安全性)

執行組態指令碼
  1. 如果您正在執行 macOS 或 Linux,請開啟終端機提示。如果您正在執行 Windows,請開啟 mingw32.exe

  2. 導覽至 freertos/tools/aws_config_quick_start目錄並執行

    python SetupAWS.py setup

指令碼會執行以下操作:

  • 建立 IoT 實物、憑證及政策

  • 將 IoT 政策連接到憑證,並將憑證連接到 AWS IoT 實物

  • 使用 AWS IoT 端點、Wi-Fi SSID 和登入資料填入aws_clientcredential.h檔案

  • 格式化您的憑證與私密金鑰,並將其寫入 aws_clientcredential_keys.h 標頭檔案

    注意

    憑證為硬式編碼,僅供示範之用。生產層級應用程式必須將這些檔案存放在安全的位置。

如需 的詳細資訊SetupAWS.py,請參閱 README.md freertos/tools/aws_config_quick_start目錄中的 。

建置、刷新和執行 FreeRTOS 示範專案

您可以使用 CMake 來產生建置檔案、使用 Make 建置應用程式二進位,以及 Espressif 的 IDF 公用程式以刷新您的主機板。

在 Linux 和 MacOS 上建置 FreeRTOS (ESP-IDF 3.3 版)

如果您使用的是 Windows,請參閱 在 Windows 上建置 FreeRTOS (ESP-IDF 3.3 版)

使用 CMake 來產生建置檔案,然後使用 Make 來建置應用程式。

使用 CMake 來產生示範應用程式的建置檔案
  1. 將目錄變更為 FreeRTOS 下載目錄的根目錄。

  2. 使用下列命令來產生建置檔案。

    cmake -DVENDOR=espressif -DBOARD=esp32_wrover_kit -DCOMPILER=xtensa-esp32 -S . -B your-build-directory
    注意

    如果您想要建置應用程式以進行偵錯,請將 -DCMAKE_BUILD_TYPE=Debug 旗標新增到此命令。

    如果您想要產生測試應用程式建置檔案,請新增 -DAFR_ENABLE_TESTS=1 旗標。

    Espressif 提供的程式碼會使用輕量型 IP (LWIP) 堆疊做為預設網路堆疊。若要改用 FreeRTOS+TCP 網路堆疊,請將 –DAFR_ESP_FREERTOS_TCP旗標新增至 CMake 命令。

    若要為非供應商提供的程式碼新增 lwIP 相依性,請將以下幾行新增至自訂 Wi-Fi 元件CMakeLists.txt的 CMake 相依性檔案 。

    # Add a dependency on the bluetooth espressif component to the common component set(COMPONENT_REQUIRES lwip)
使用 Make 建置應用程式
  1. 將目錄變更為 build 目錄。

  2. 使用下列命令,透過 Make 建置應用程式。

    make all -j4
    注意

    每次在 aws_demos 專案與 aws_tests 專案之間切換時,您都必須使用 cmake 命令產生建置檔案。

在 Windows 上建置 FreeRTOS (ESP-IDF 3.3 版)

在 Windows 上,您必須指定用於 CMake 的建置產生器。若未指定,CMake 則會依預設使用 Visual Studio。Espressif 正式推薦 Ninja 建構系統,因為它適用於Windows、Linux 和 MacOS。您必須在原生 Windows 環境 (例如 cmd 或 PowerShell) 中執行 CMake 命令。不支援在虛擬 Linux 環境 (例如 MSYS2 或 WSL) 中執行 CMake 命令。

使用 CMake 來產生建置檔案,然後使用 Make 來建置應用程式。

使用 CMake 來產生示範應用程式的建置檔案
  1. 將目錄變更為 FreeRTOS 下載目錄的根目錄。

  2. 使用下列命令來產生建置檔案。

    cmake -DVENDOR=espressif -DBOARD=esp32_wrover_kit -DCOMPILER=xtensa-esp32 -GNinja -S . -B build-directory
    注意

    如果您想要建置應用程式以進行偵錯,請將 -DCMAKE_BUILD_TYPE=Debug 旗標新增到此命令。

    如果您想要產生測試應用程式建置檔案,請新增 -DAFR_ENABLE_TESTS=1 旗標。

    Espressif 提供的程式碼會使用輕量型 IP (LWIP) 堆疊做為預設網路堆疊。若要改用 FreeRTOS+TCP 網路堆疊,請將 –DAFR_ESP_FREERTOS_TCP旗標新增至 CMake 命令。

    若要為非供應商提供的程式碼新增 lwIP 相依性,請將以下幾行新增至自訂 Wi-Fi 元件CMakeLists.txt的 CMake 相依性檔案 。

    # Add a dependency on the bluetooth espressif component to the common component set(COMPONENT_REQUIRES lwip)
建置應用程式
  1. 將目錄變更為 build 目錄。

  2. 叫用 Ninja 來建置應用程式。

    ninja

    或者,使用一般 CMake 界面來建置應用程式。

    cmake --build build-directory
    注意

    每次在 aws_demos 專案與 aws_tests 專案之間切換時,您都必須使用 cmake 命令產生建置檔案。

快閃並執行 FreeRTOS (ESP-IDF v3.3)

本節說明如何在 Espressif 硬體上使用 ESP-IDF v3.3。若要使用 ESP-IDF 4.2 版,請參閱 ESP-IDF 4.2 版入門

使用 Espressif 的 IDF 公用程式 (freertos/vendors/espressif/esp-idf/tools/idf.py) 刷新您的電路板、執行應用程式並查看日誌。

若要清除電路板的快閃記憶體,請前往 freertos目錄並使用下列命令。

./vendors/espressif/esp-idf/tools/idf.py erase_flash -B build-directory

若要將應用程式二進位檔刷新至您的主機板,請使用 make

make flash

您也可以使用 IDF 指令碼來刷新您的電路板:

./vendors/espressif/esp-idf/tools/idf.py flash -B build-directory

監控:

./vendors/espressif/esp-idf/tools/idf.py monitor -p /dev/ttyUSB1 -B build-directory
注意

您可以結合這些命令。例如:

./vendors/espressif/esp-idf/tools/idf.py erase_flash flash monitor -p /dev/ttyUSB1 -B build-directory

ESP-IDF 4.2 版入門

本節說明如何在 Espressif 硬體上使用 ESP-IDF v4.2。若要使用 ESP-IDF 3.3 版,請參閱 ESP-IDF 3.3 版入門

注意

本教學課程中的 Linux 命令要求您使用 Bash shell。

設定 Espressif 硬體

如需有關設定 ESP32-DevKitC 開發板硬體的資訊,請參閱 ESP32-DevKitC V4 入門指南

如需有關設定 ESP-WROVER-KIT 開發板硬體的資訊,請參閱 ESP-WROVER-KIT V4.1 入門指南。

重要

當您到達 Espressif 指南的入門區段時,請停止,然後返回此頁面的指示。

設定開發環境

若要與您的主機板通訊,您必須下載並安裝工具鏈。

設定工具鏈

若要設定工具鏈,請遵循主機機器作業系統的下列指示:

重要

當您達到後續步驟下的「取得 ESP-IDF」指示時,請停止,然後返回此頁面的指示。

完成安裝 (Linux/MacOS)

ESP-IDF Windows 安裝程式會安裝所有必要工具。Linux 和 MacOS 平台需要額外的步驟來完成安裝。

  1. 開啟命令列視窗

  2. 導覽至 FreeRTOS 下載目錄,然後執行下列指令碼,為您的平台下載並安裝 espressif 工具鏈。

    vendors/espressif/esp-idf/install.sh
  3. 使用下列命令,將 ESP-IDF 工具鏈工具新增至終端機的路徑。

    source vendors/espressif/esp-idf/export.sh

建立序列連線

若要在主機機器與 ESP32-DevKitC 之間建立序列連線,您必須安裝 CP210x USB 至 UART Bridge VCP 驅動程式。您可以從 Silicon Labs 下載這些驅動程式。

若要在主機機器與 ESP32-WROVER-KIT 之間建立序列連線,您必須安裝 FTDI 虛擬 COM 連接埠驅動程式。您可以從 FTDI 下載此驅動程式。

如需詳細資訊,請參閱建立與 ESP32 的序列連線。在您建立序連接之後,請記下開發板連接的序列連接埠。您在建立示範時會需要它。

下載並設定 FreeRTOS

設定環境後,您可以從 GitHub 下載 FreeRTOS。如需說明,請參閱 GitHub 網站上的 README.md 檔案。

設定 FreeRTOS 示範應用程式

  1. 如果您正在執行 macOS 或 Linux,請開啟終端機提示。如果您正在執行 Windows,請開啟 mingw32.exe。( MinGW 是原生 Microsoft Windows 應用程式的最小開發環境。)

  2. 若要確認您已安裝 Python3,請執行

    python --version

    安裝的版本即會顯示。如果您沒有安裝 Python 3.0.1 或更新版本,您可以從 Python 網站安裝。

  3. 您需要 AWS Command Line Interface (AWS CLI) 來執行 AWS IoT 命令。如果您正在執行 Windows,請使用 在 AWS CLI mingw32 環境中easy_install awscli安裝 。

    如果您正在執行 macOS 或 Linux,請參閱安裝 AWS CLI

  4. 執行

    aws configure

    並使用 AWS CLI 您的 AWS 存取金鑰 ID、私密存取金鑰和預設 AWS 區域來設定 。如需詳細資訊,請參閱設定 AWS CLI

  5. 使用下列命令來安裝適用於 Python (boto3) 的 AWS SDK:

    • 在 Windows 的 mingw32 環境中,執行

      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.json 並設定下列屬性:

afr_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 安全性)

執行組態指令碼
  1. 如果您正在執行 macOS 或 Linux,請開啟終端機提示。如果您正在執行 Windows,請開啟 mingw32.exe 檔案。

  2. 導覽至 freertos/tools/aws_config_quick_start目錄並執行

    python SetupAWS.py setup

指令碼會執行以下操作:

  • 建立 IoT 實物、憑證及政策

  • 將 IoT 政策連接到憑證,並將憑證連接到 AWS IoT 實物

  • 使用 AWS IoT 端點、Wi-Fi SSID 和登入資料填入aws_clientcredential.h檔案

  • 格式化您的憑證與私密金鑰,並將其寫入 aws_clientcredential_keys.h 標頭檔案

    注意

    憑證為硬式編碼,僅供示範之用。生產層級應用程式必須將這些檔案存放在安全的位置。

如需 的詳細資訊SetupAWS.py,請參閱 README.md freertos/tools/aws_config_quick_start目錄中的 。

使用 idf.py 指令碼建置、刷新和執行 FreeRTOS 示範專案

您可以使用 Espressif 的 IDF 公用程式來產生建置檔案、建置應用程式二進位檔,以及刷新您的主機板。

在 Windows、Linux 和 MacOS (ESP-IDF v4.2) 上建置和刷新 FreeRTOS MacOS

使用 idf.py指令碼建置專案,並將二進位檔刷入您的裝置。

注意

有些設定可能需要搭配 使用連接埠選項"-p port-name"idf.py來指定正確的連接埠,如下列範例所示。

idf.py -p /dev/cu.usbserial-00101301B flash
建置和刷新專案
  1. 導覽至 FreeRTOS 下載目錄的根目錄。

  2. 在命令列視窗中,輸入下列命令,將 ESP-IDF 工具新增至終端機的 PATH。

    Windows

    vendors\espressif\esp-idf\export.bat

    Linux/MacOS

    source vendors/espressif/esp-idf/export.sh
  3. build目錄中設定 cmake,並使用下列命令建置韌體映像。

    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 檔案。

  4. 使用以下命令清除開發板的快閃記憶體。

    idf.py erase_flash
  5. 使用idf.py指令碼將應用程式二進位檔刷新到您的主機板。

    idf.py flash
  6. 使用下列命令來監控主機板序列埠的輸出。

    idf.py monitor
注意

您可以在下列範例中結合這些命令,例如 。

idf.py erase_flash flash monitor
注意

對於某些主機機器設定,您必須在刷新電路板時指定連接埠,如下列範例所示。

idf.py erase_flash flash monitor -p /dev/ttyUSB1

使用 CMake 建置和 Flash FreeRTOS

除了 IDF 開發套件提供的idf.py指令碼來建置和執行程式碼之外,您也可以使用 CMake 建置專案。目前,它支援 Unix Makefiles 或 Ninja 組建系統。

建置和刷新專案
  1. 在命令列視窗中,導覽至 FreeRTOS 下載目錄的根目錄。

  2. 執行下列指令碼,將 ESP-IDF 工具新增至 shell 的 PATH。

    Windows

    vendors\espressif\esp-idf\export.bat

    Linux/MacOS

    source vendors/espressif/esp-idf/export.sh
  3. 輸入下列命令來產生建置檔案。

    使用 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

    使用 Ninja

    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
  4. 清除快閃記憶體,然後刷新電路板。

    使用 Unix Makefiles

    make -C ./YOUR_BUILD_DIRECTORY erase_flash
    make -C ./YOUR_BUILD_DIRECTORY flash

    使用 Ninja

    ninja -C ./YOUR_BUILD_DIRECTORY erase_flash
    ninja -C ./YOUR_BUILD_DIRECTORY flash

監控雲端的 MQTT 訊息

您可以在 AWS IoT 主控台中使用 MQTT 用戶端來監控裝置傳送至 AWS 雲端的訊息。

使用 MQTT 用戶端訂閱 AWS IoT MQTT 主題
  1. 導覽至 AWS IoT 主控台

  2. 在導覽窗格中,選擇 Test (測試) 以開啟 MQTT 用戶端。

  3. 訂閱主題中輸入 your-thing-name/example/topic,然後選擇訂閱主題

執行低功耗藍牙示範

FreeRTOS 支援低功耗藍牙連線。

若要跨低功耗藍牙執行 FreeRTOS 示範專案,您必須在 iOS 或 Android 行動裝置上執行 FreeRTOS 低功耗藍牙行動開發套件示範應用程式。

設定 FreeRTOS 低功耗藍牙行動開發套件示範應用程式
  1. 遵循適用於 FreeRTOS 藍牙裝置的 Mobile SDKs 中的指示,在主機電腦上下載並安裝適用於行動平台的 SDK。

  2. 遵循 FreeRTOS 低功耗藍牙行動開發套件示範應用程式中的指示,在您的行動裝置上設定示範行動應用程式。

如需有關如何在您的主機板上執行透過低功耗藍牙的 MQTT 示範,請參閱透過低功耗藍牙的 MQTT 示範應用程式

如需有關如何在您的主機板上執行 Wi-Fi 佈建示範的指示,請參閱 Wi-Fi 佈建示範應用程式

在 ESP32 的 CMake 專案中使用 FreeRTOS

如果您想要在自己的 CMake 專案中使用 FreeRTOS,您可以將它設定為子目錄,並與應用程式一起建置。首先,從 GitHub 取得 FreeRTOS 的副本。您也可以使用下列命令將其設定為 Git 子模組,以便未來更容易更新。

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 建置您的應用程式。

ESP-IDF v3.3
cmake_minimum_required(VERSION 3.13) project(freertos_examples) add_executable(my_app src/main.c) # Tell IDF build to link against this target. 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::mqtt)
ESP-IDF v4.2
cmake_minimum_required(VERSION 3.13) project(freertos_examples) # Pull in ESP-IDF defined CMake build infrastructure logic to configure the project, discover all the components, etc set(esp_idf_dir "${CMAKE_CURRENT_LIST_DIR}/freertos/vendors/espressif/esp-idf") include(${esp_idf_dir}/tools/cmake/idf.cmake) # Tell IDF build to link against this target. set(IDF_PROJECT_EXECUTABLE my_app) get_filename_component( IDF_EXECUTABLE_SRCS "src/main.c" ABSOLUTE )

若要建置專案,請執行以下 CMake 命令。確保 ESP32 編譯器位於 PATH 環境變數中。

cmake -S . -B build-directory -DCMAKE_TOOLCHAIN_FILE=freertos/tools/cmake/toolchains/xtensa-esp32.cmake -GNinja
cmake --build build

若要將應用程式刷新到您的主機板,請執行下列命令。

cmake --build build-directory --target flash

使用 FreeRTOS 中的元件

執行 CMake 之後,您可以在摘要輸出中找到所有可用的元件。它看起來應該類似下列範例。

====================Configuration for FreeRTOS==================== Version: 201910.00 Git version: 201910.00-388-gcb3612cb7 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: ble, ble_hal, ble_wifi_provisioning, common, crypto, defender, dev_mode_key_provisioning, freertos_plus_tcp, greengrass, https, kernel, mqtt, ota, pkcs11, pkcs11_implementation, platform, secure_sockets, serializer, shadow, tls, wifi Enabled by user: ble, ble_hal, ble_wifi_provisioning, defender, greengrass, https, mqtt, ota, pkcs11, pkcs11_implementation, platform, secure_sockets, shadow, wifi Enabled by dependency: common, crypto, demo_base, dev_mode_key_provisioning, freertos, freertos_plus_tcp, kernel, pkcs11_mbedtls, secure_sockets_freertos_plus_tcp, serializer, tls, utils 3rdparty dependencies: http_parser, jsmn, mbedtls, pkcs11, tinycbor Available demos: demo_ble, demo_ble_numeric_comparison, demo_defender, demo_greengrass_connectivity, demo_https, demo_mqtt, demo_ota, demo_shadow, demo_tcp, demo_wifi_provisioning Available tests: =========================================================================

您可以從Modules to build清單中參考任何元件。若要將它們連結到您的應用程式,請將AFR::命名空間放在名稱前面,例如 AFR::mqttAFR::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 檔案範例。

ESP-IDF v3.3
# include paths of this components. set(COMPONENT_ADD_INCLUDEDIRS include) # source files of this components. set(COMPONENT_SRCDIRS src) # Alternatively, use COMPONENT_SRCS to specify source files explicitly # set(COMPONENT_SRCS src/example_component.c) # add this components, this will define a CMake library target. register_component()
ESP-IDF v4.2
# Use idf_component_register to add this component, this will define a CMake library target. # Specify component sources in SRCS. # Specify component include directories in INCLUDE_DIRS. idf_component_register(SRCS "src/foo.c" INCLUDE_DIRS "include") # Standard CMake function can be used to specify dependencies. ${COMPONENT_TARGET} is defined # from esp-idf when you call register_component, by default it's idf_component_<folder_name>. target_link_libraries(${COMPONENT_TARGET} PRIVATE AFR::mqtt)

您還可以使用標準 CMake 函數 target_link_libraries 指定相依性。請注意,元件的目標名稱存放在 ESP-IDF 所定義的變數 COMPONENT_TARGET 中。

ESP-IDF v3.3
# add this component, this will define a CMake library target. register_component() # standard CMake function can be used to specify dependencies. ${COMPONENT_TARGET} is defined # from esp-idf when you call register_component, by default it's idf_component_<folder_name>. target_link_libraries(${COMPONENT_TARGET} PRIVATE AFR::mqtt)
ESP-IDF v4.2
# add this component, this will define a CMake library target. idf_component_register(SRCS "src/foo.c" INCLUDE_DIRS "include") # standard CMake function can be used to specify dependencies. ${COMPONENT_TARGET} is defined # from esp-idf when you call register_component, by default it's idf_component_<folder_name>. target_link_libraries(${COMPONENT_TARGET} PRIVATE AFR::mqtt)

對於 ESP 元件,這可透過設定兩個變數 COMPONENT_REQUIRES和 來完成COMPONENT_PRIV_REQUIRES。請參閱 ESP-IDF 程式設計指南 v4.2 中的建置系統 (CMake)

ESP-IDF v3.3
# If the dependencies are from ESP-IDF, use these 2 variables. Note these need to be # set before calling register_component(). set(COMPONENT_REQUIRES log) set(COMPONENT_PRIV_REQUIRES lwip)
ESP-IDF v4.2
# If the dependencies are from ESP-IDF, use these 2 variables (REQUIRES, PRIV_REQUIRES) # in the idf_component_register call: (Refer here for information on the # idf_component_register function: https://docs.espressif.com/projects/esp-idf/en/v4.2/esp32/api-guides/build-system.html#cmake-component-register) idf_component_register(SRCS "src/foo.c" INCLUDE_DIRS "include" REQUIRES log PRIV_REQUIRES lwip)

然後,在頂層 CMakeLists.txt 檔案中,告訴 ESP-IDF 在哪裡可以找到這些元件。在 之前的任何位置新增以下行add_subdirectory(freertos)

ESP-IDF v3.3
# 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})
ESP-IDF v4.2
# 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 ) idf_build_component(${EXTRA_COMPONENT_DIRS})

根據預設,此元件現在會自動連結至您的應用程式碼。你應該能夠包含它的標頭檔案,並呼叫其定義的函數。

覆寫 FreeRTOS 的組態

目前沒有明確定義的方法來重新定義 FreeRTOS 來源樹狀目錄以外的組態。依預設,CMake 將尋找 freertos/vendors/espressif/boards/esp32/aws_demos/config_files/freertos/demos/include/ 目錄。不過,您可以使用因應措施,告訴編譯器首先搜尋其他目錄。例如,您可以為 FreeRTOS 組態新增另一個資料夾。

- 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

Summary

如果你有一個專案具有名為 example_component 的元件,而且你想要覆寫一些組態,則以下是頂層 CMakeLists.txt 檔案的完整範例。

ESP-IDF v3.3
cmake_minimum_required(VERSION 3.13) project(freertos_examples) add_executable(my_app 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::mqtt)
ESP-IDF v4.2
cmake_minimum_required(VERSION 3.13) project(freertos_examples) # Pull in ESP-IDF defined CMake build infrastructure logic to configure the project, discover all the components, etc set(esp_idf_dir "${CMAKE_CURRENT_LIST_DIR}/freertos/vendors/espressif/esp-idf") include(${esp_idf_dir}/tools/cmake/idf.cmake) # Tell IDF build to link against this target. set(IDF_PROJECT_EXECUTABLE my_app) get_filename_component( IDF_EXECUTABLE_SRCS "src/main.c" ABSOLUTE ) # Add some extra components. IDF_EXTRA_COMPONENT_DIRS is an variable used by ESP-IDF # to collect extra components. get_filename_component( EXTRA_COMPONENT_DIRS "components/foo" ABSOLUTE ) idf_build_component(${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::mqtt)

如需使用 CMake 建置系統的詳細資訊,請參閱 Espressif API 指南中的建置系統

故障診斷

  • 如果您正在執行 macOS 且作業系統無法辨識 ESP-WROVER-KIT,請確定您未安裝 D2XX 驅動程式。若要解除安裝這些驅動程式,請遵循 FTDI Drivers Installation Guide for macOS X 中的說明。

  • ESP-IDF 提供的監控公用程式 (並使用 make monitor 叫用) 可協助您解碼地址。因此,它可協助您在應用程式停止運作時取得一些有意義的回溯。如需詳細資訊,請參閱 Espressif 網站上的自動地址解碼

  • 您也可以啟用 GDBstub 與 gdb 通訊,而不需要任何特殊的 JTAG 硬體。如需詳細資訊,請參閱 Espressif 網站上的使用 GDBStub 啟動 GDB

  • 如需在需要 JTAG 硬體型偵錯時設定 OpenOCD 型環境的相關資訊,請參閱 Espressif 網站上的 JTAG Debugging

  • 如果pyserial無法在 macOS pip 上使用 安裝 ,請從 pyserial 網站下載。

  • 如果電路板持續重設,請嘗試在終端機上輸入下列命令來清除快閃記憶體。

    make erase_flash
  • 如果您在執行 idf_monitor.py 時看到錯誤,請使用 Python 2.7。

  • 從 ESP-IDF 取得的必要程式庫包含在 FreeRTOS 中,因此不需要從外部下載。如果已設定IDF_PATH環境變數,建議您在建置 FreeRTOS 之前將其清除。

  • 在 Windows 上,系統可能需要 3-4 分鐘來建置專案。您可以在 make 命令上使用 -j4 參數,以縮短建置時間:

    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 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 v3.3) 上的偵錯程式碼

本節說明如何使用 ESP-IDF v3.3 偵錯 Espressif 硬體。若要使用 ESP-IDF 4.2 版進行偵錯,請參閱 Espressif ESP32-DevKitC 和 ESP-WROVER-KIT (ESP-IDF v4.2) 上的偵錯程式碼

您需要 JTAG 對 USB 纜線。我們會使用 USB 對 MPSSE 纜線 (例如 FTDI C232HM-DDHSL-0)。

ESP-DevKitC JTAG 設定

對於 FTDI C232HM-DDHSL-0 纜線,這些是 ESP32 DevkitC 的連線。

C232HM-DDHSL-0 電線顏色 ESP32 GPIO Pin JTAG 訊號名稱

棕色 (pin 5)

IO14

TMS

黃色 (pin 3)

IO12

TDI

黑色 (pin 10)

GND

GND

橘色 (pin 2)

IO13

TCK

綠色 (pin 4)

IO15

TDO

ESP-WROVER-KIT JTAG 設定

對於 FTDI C232HM-DDHSL-0 纜線,這些是 ESP32-WROVER-KIT 的連線。

C232HM-DDHSL-0 電線顏色 ESP32 GPIO Pin JTAG 訊號名稱

棕色 (pin 5)

IO14

TMS

黃色 (pin 3)

IO12

TDI

橘色 (pin 2)

IO13

TCK

綠色 (pin 4)

IO15

TDO

這些資料表是從 FTDI C232HM-DDHSL-0 datasheet 開發而來。如需詳細資訊,請參閱資料表中的「C232HM MPSSE 纜線連接和機械詳細資訊」一節。

若要在 ESP-WROVER-KIT 上啟用 JTAG,請在 TMS、TDO、TDI、TCK 和 S_TDI 接腳上放置跳線,如下所示。

跳接器置放

在 Windows 上偵錯 (ESP-IDF v3.3)

在 Windows 中進行除錯設定
  1. 將 FTDI C232HM-DDHSL-0 的 USB 一端接到您的電腦,而另一端則按Espressif ESP32-DevKitC 和 ESP-WROVER-KIT (ESP-IDF v3.3) 上的偵錯程式碼中所述進行。FTDI C232HM-DDHSL-0 裝置應該會出現在 Universal Serial Bus Controllers (通用序列匯流排控制器) 下方的 Device Manager (裝置管理員) 中。

  2. 在通用序列匯流排裝置清單下,請以滑鼠右鍵按一下 C232HM-DDHSL-0 裝置,然後選擇 Properties (屬性)

    注意

    裝置可能會列為 USB Serial Port (USB 序列連接埠)

    在屬性視窗中,選擇 Details (詳細資訊) 標籤,以查看裝置的屬性。如果未列出裝置,請安裝 FTDI C232HM-DDHSL-0 的 Windows 驅動程式

  3. 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。IDs 是在以 開頭的行中指定,ftdi_vid_pid後面接著廠商 ID 和產品 ID。

    ftdi_vid_pid 0x0403 0x6014
  4. 下載 OpenOCD for Windows

  5. 將檔案解壓縮至 C:\,並新增 C:\openocd-esp32\bin 到您的系統路徑。

  6. OpenOCD 需要 libusb,但預設不會在 Windows 中安裝。

    安裝 libusb

    1. 請下載 zadig.exe

    2. 執行 zadig.exe。從 Options (選項) 功能表中,選擇 List All Devices (列出所有裝置)

    3. 從下拉式選單中,選擇 C232HM-DDHSL-0

    4. 在目標驅動程式欄位中,選擇綠色箭頭右側的 WinUSB (WinUSB)

    5. 從目標驅動程式欄位下的下拉式清單中,選擇箭頭,然後選擇安裝驅動程式。選擇 Replace Driver (取代驅動程式)

  7. 開啟命令提示字元,導覽至 projects/espressif/esp32/make/aws_demos並執行下列命令。

    對於 ESP32-WROOM-32 和 ESP32-WROVER

    openocd.exe -f esp32_devkitj_v1.cfg -f esp-wroom-32.cfg

    對於 ESP32-SOLO-1

    openocd.exe -f esp32_devkitj_v1.cfg -f esp-solo-1.cfg

    將此命令提示保持開啟。

  8. 開啟新的命令提示,然後導覽至您的 msys32 目錄,並執行 mingw32.exe

  9. 在 mingw32 終端機中,導覽至 projects/espressif/esp32/make/aws_demos並執行

    make flash monitor
  10. 開啟另一個 mingw32 終端機,導覽至 projects/espressif/esp32/make/aws_demos,並等待您主機板上的示範開始執行。示範開始執行時,執行 xtensa-esp32-elf-gdb -x gdbinit build/aws_demos.elf。程式應該會在 main 函數中停止。

注意

ESP32 支援最多兩個中斷點。

在 macOS 上偵錯 (ESP-IDF v3.3)

  1. 下載適用於 macOS 的 FTDI 驅動程式

  2. 下載 OpenOCD

  3. 解壓縮已下載的 .tar 檔案,並將路徑設在 .bash_profileOCD_INSTALL_DIR/openocd-esp32/bin 中。

  4. 使用下列命令在 macOS libusb上安裝 。

    brew install libusb
  5. 使用下列命令卸載序列連接埠驅動程式。

    sudo kextunload -b com.FTDI.driver.FTDIUSBSerialDriver
  6. 如果您執行的 macOS 版本高於 10.9,請使用下列命令來卸載 Apple FTDI 驅動程式。

    sudo kextunload -b com.apple.driver.AppleUSBFTDI
  7. 使用下列命令來取得 FTDI 纜線的產品 ID 和廠商 ID。它列出連接的 USB 裝置。

    system_profiler SPUSBDataType

    的輸出system_profiler應如下所示。

    DEVICE: Product ID: product-ID Vendor ID: vendor-ID (Future Technology Devices International Limited)
  8. 開啟 projects/espressif/esp32/make/aws_demos/esp32_devkitj_v1.cfg 檔案。裝置的廠商 ID 和產品 ID 是指定在開頭為 ftdi_vid_pid 的一行中。變更 ID 以符合來自前一個步驟中 system_profiler 輸出的 ID。

  9. 開啟終端機視窗,導覽至 projects/espressif/esp32/make/aws_demos,然後使用下列命令來執行 OpenOCD:

    對於 ESP32-WROOM-32 and ESP32-WROVER:

    openocd -f esp32_devkitj_v1.cfg -f esp-wroom-32.cfg

    對於 ESP32-SOLO-1:

    openocd -f esp32_devkitj_v1.cfg -f esp-solo-1.cfg
  10. 開啟新的終端機,並使用下列命令載入 FTDI 序列連接埠驅動程式。

    sudo kextload -b com.FTDI.driver.FTDIUSBSerialDriver
  11. 導覽至 projects/espressif/esp32/make/aws_demos,然後執行下列命令。

    make flash monitor
  12. 開啟另一個新的終端機,導覽至 projects/espressif/esp32/make/aws_demos,然後執行下列命令。

    xtensa-esp32-elf-gdb -x gdbinit build/aws_demos.elf

    程式應該會在 main() 停止。

Linux 上的偵錯 (ESP-IDF v3.3)

  1. 下載 OpenOCD。解壓縮 tarball 並遵循讀我檔中的安裝指示。

  2. 使用下列命令在 Linux 上安裝 libusb。

    sudo apt-get install libusb-1.0
  3. 開啟終端機,並輸入 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
  4. 登出再登入,並重新啟動電路板的電源,以讓變更生效。在終端機提示中,列出 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 的快閃記憶體。

  5. 在終端機視窗中,導覽至 projects/espressif/esp32/make/aws_demos,然後使用下列命令來執行 OpenOCD:

    對於 ESP32-WROOM-32 and ESP32-WROVER:

    openocd -f esp32_devkitj_v1.cfg -f esp-wroom-32.cfg

    對於 ESP32-SOLO-1:

    openocd -f esp32_devkitj_v1.cfg -f esp-solo-1.cfg
  6. 開啟另一個終端機,導覽至 projects/espressif/esp32/make/aws_demos,然後執行下列命令。

    make flash monitor
  7. 開啟另一個終端機,導覽至 projects/espressif/esp32/make/aws_demos,並執行下列命令:

    xtensa-esp32-elf-gdb -x gdbinit build/aws_demos.elf

    程式應該會在 main() 中停止。

Espressif ESP32-DevKitC 和 ESP-WROVER-KIT (ESP-IDF v4.2) 上的偵錯程式碼

本節說明如何使用 ESP-IDF v4.2 偵錯 Espressif 硬體。若要使用 ESP-IDF v3.3 進行偵錯,請參閱 Espressif ESP32-DevKitC 和 ESP-WROVER-KIT (ESP-IDF v3.3) 上的偵錯程式碼

您需要 JTAG 對 USB 纜線。我們會使用 USB 對 MPSSE 纜線 (例如 FTDI C232HM-DDHSL-0)。

ESP-DevKitC JTAG 設定

對於 FTDI C232HM-DDHSL-0 纜線,這些是 ESP32 DevkitC 的連線。

C232HM-DDHSL-0 電線顏色 ESP32 GPIO Pin JTAG 訊號名稱

棕色 (pin 5)

IO14

TMS

黃色 (pin 3)

IO12

TDI

黑色 (pin 10)

GND

GND

橘色 (pin 2)

IO13

TCK

綠色 (pin 4)

IO15

TDO

ESP-WROVER-KIT JTAG 設定

對於 FTDI C232HM-DDHSL-0 纜線,這些是 ESP32-WROVER-KIT 的連線。

C232HM-DDHSL-0 電線顏色 ESP32 GPIO Pin JTAG 訊號名稱

棕色 (pin 5)

IO14

TMS

黃色 (pin 3)

IO12

TDI

橘色 (pin 2)

IO13

TCK

綠色 (pin 4)

IO15

TDO

這些資料表是從 FTDI C232HM-DDHSL-0 datasheet 開發而來。如需詳細資訊,請參閱資料表中的「C232HM MPSSE 纜線連接和機械詳細資訊」一節。

若要在 ESP-WROVER-KIT 上啟用 JTAG,請在 TMS、TDO、TDI、TCK 和 S_TDI 接腳上放置跳線,如下所示。

跳接器置放

在 Windows 上偵錯 (ESP-IDF v4.2)

在 Windows 中進行除錯設定
  1. 將 FTDI C232HM-DDHSL-0 的 USB 一端接到您的電腦,而另一端則按Espressif ESP32-DevKitC 和 ESP-WROVER-KIT (ESP-IDF v4.2) 上的偵錯程式碼中所述進行。FTDI C232HM-DDHSL-0 裝置應該會出現在 Universal Serial Bus Controllers (通用序列匯流排控制器) 下方的 Device Manager (裝置管理員) 中。

  2. 在通用序列匯流排裝置清單下,請以滑鼠右鍵按一下 C232HM-DDHSL-0 裝置,然後選擇 Properties (屬性)

    注意

    裝置可能會列為 USB Serial Port (USB 序列連接埠)

    在屬性視窗中,選擇 Details (詳細資訊) 標籤,以查看裝置的屬性。如果未列出裝置,請安裝 FTDI C232HM-DDHSL-0 的 Windows 驅動程式

  3. 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。IDs 是在以 開頭的行中指定,ftdi_vid_pid後面接著廠商 ID 和產品 ID。

    ftdi_vid_pid 0x0403 0x6014
  4. 下載 OpenOCD for Windows

  5. 將檔案解壓縮至 C:\,並新增 C:\openocd-esp32\bin 到您的系統路徑。

  6. OpenOCD 需要 libusb,但預設不會在 Windows 中安裝。

    安裝 libusb

    1. 請下載 zadig.exe

    2. 執行 zadig.exe。從 Options (選項) 功能表中,選擇 List All Devices (列出所有裝置)

    3. 從下拉式選單中,選擇 C232HM-DDHSL-0

    4. 在目標驅動程式欄位中,選擇綠色箭頭右側的 WinUSB (WinUSB)

    5. 從目標驅動程式欄位下的下拉式清單中,選擇箭頭,然後選擇安裝驅動程式。選擇 Replace Driver (取代驅動程式)

  7. 開啟命令提示字元,導覽至 FreeRTOS 下載目錄的根目錄,然後執行下列命令。

    idf.py openocd

    將此命令提示保持開啟。

  8. 開啟新的命令提示字元,導覽至 FreeRTOS 下載目錄的根目錄,然後執行

    idf.py flash monitor
  9. 開啟另一個命令提示字元,導覽至 FreeRTOS 下載目錄的根目錄,並等待示範開始在您的電路板上執行。執行時,請執行

    idf.py gdb

    程式應該會在 main 函數中停止。

注意

ESP32 支援最多兩個中斷點。

在 macOS 上偵錯 (ESP-IDF v4.2)

  1. 下載適用於 macOS 的 FTDI 驅動程式

  2. 下載 OpenOCD

  3. 解壓縮已下載的 .tar 檔案,並將路徑設在 .bash_profileOCD_INSTALL_DIR/openocd-esp32/bin 中。

  4. 使用下列命令在 macOS libusb上安裝 。

    brew install libusb
  5. 使用下列命令卸載序列連接埠驅動程式。

    sudo kextunload -b com.FTDI.driver.FTDIUSBSerialDriver
  6. 如果您執行的 macOS 版本高於 10.9,請使用下列命令來卸載 Apple FTDI 驅動程式。

    sudo kextunload -b com.apple.driver.AppleUSBFTDI
  7. 使用下列命令來取得 FTDI 纜線的產品 ID 和廠商 ID。它列出連接的 USB 裝置。

    system_profiler SPUSBDataType

    的輸出system_profiler應如下所示。

    DEVICE: Product ID: product-ID Vendor ID: vendor-ID (Future Technology Devices International Limited)
  8. 開啟 projects/espressif/esp32/make/aws_demos/esp32_devkitj_v1.cfg 檔案。裝置的廠商 ID 和產品 ID 是指定在開頭為 ftdi_vid_pid 的一行中。變更 ID 以符合來自前一個步驟中 system_profiler 輸出的 ID。

  9. 開啟終端機視窗,導覽至 FreeRTOS 下載目錄的根目錄,然後使用下列命令來執行 OpenOCD。

    idf.py openocd

    保持此終端機視窗開啟。

  10. 開啟新的終端機,並使用下列命令載入 FTDI 序列連接埠驅動程式。

    sudo kextload -b com.FTDI.driver.FTDIUSBSerialDriver
  11. 導覽至 FreeRTOS 下載目錄的根目錄,然後執行

    idf.py flash monitor
  12. 開啟另一個新的終端機,導覽至 FreeRTOS 下載目錄的根目錄,然後執行

    idf.py gdb

    程式應該會在 main 停止。

Linux 上的偵錯 (ESP-IDF v4.2)

  1. 下載 OpenOCD。解壓縮 tarball 並遵循讀我檔中的安裝指示。

  2. 使用下列命令在 Linux 上安裝 libusb。

    sudo apt-get install libusb-1.0
  3. 開啟終端機,並輸入 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
  4. 登出再登入,並重新啟動電路板的電源,以讓變更生效。在終端機提示中,列出 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 的快閃記憶體。

  5. 在終端機視窗中,導覽至 FreeRTOS 下載目錄的根目錄,然後使用下列命令來執行 OpenOCD。

    idf.py openocd
  6. 開啟另一個終端機,導覽至 FreeRTOS 下載目錄的根目錄,然後執行下列命令。

    idf.py flash monitor
  7. 開啟另一個終端機,導覽 FreeRTOS 下載目錄的根目錄,然後執行下列命令:

    idf.py gdb

    程式應該會在 main() 中停止。