

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Espressif ESP32-DevKitC と ESP-WROVER-KIT の開始方法
<a name="getting_started_espressif"></a>

**重要**  <a name="deprecation-message"></a>
このリファレンス統合は、非推奨の Amazon-FreeRTOS リポジトリでホストされています。新しいプロジェクトを作成するときは、[ここから始める](freertos-getting-started-modular.md)ことをお勧めします。現在非推奨の Amazon-FreeRTOS リポジトリをベースにした既存の FreeRTOS プロジェクトが既にある場合は、「[Amazon FreeRTOS Github リポジトリ移行ガイド](github-repo-migration.md)」を参照してください。

**注記**  
独自の Espressif IDF プロジェクト内で FreeRTOS モジュラーライブラリとデモを統合する方法の詳細については、[ESP32-C3 プラットフォーム向けの注目のリファレンス統合](https://www.freertos.org/featured-freertos-iot-integration-targeting-an-espressif-esp32-c3-risc-v-mcu/)を参照してください。

このチュートリアルでは、ESP32-WROOM-32、ESP32-SOLO-1、または ESP-WROVER モジュールおよび ESP-WROVER-KIT-VB を搭載した Espressif ESP32-DevKitC の使用を開始するための手順について説明します。Partner AWS Device カタログでパートナーから購入するには、次のリンクを使用します。
+ [ESP32-WROOM-32 DevKitC](https://devices.amazonaws.com/detail/a3G0L00000AANtjUAH/ESP32-DevKitC)
+ [ESP32-SOLO-1](https://devices.amazonaws.com/detail/a3G0h0000076lSMEAY)
+ [ESP32-WROVER-KIT](https://devices.amazonaws.com/detail/a3G0L00000AANtlUAH/ESP-WROVER-KIT)

開発ボードのこれらのバージョンが FreeRTOS でサポートされています。

これらのボードの最新バージョンの詳細については、Espressif ウェブサイトの「[ESP32-DevKitC V4](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/hw-reference/modules-and-boards.html#esp32-devkitc-v4)」または「[ESP-WROVER-KIT v4.1](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/hw-reference/modules-and-boards.html#esp-wrover-kit-v4-1)」を参照してください。

**注記**  
現在、ESP32-WROVER-KIT および ESP DevKitC の FreeRTOS ポートは、対称型マルチプロセッシング (SMP) 機能をサポートしていません。

## 概要
<a name="getting_started_espressif-overview"></a>

このチュートリアルでは次のステップを説明します。

1. ボードをホストマシンに接続します。

1. マイクロコントローラーボード用の組み込みアプリケーションを開発およびデバッグするためのソフトウェアをホストマシンにインストールします。

1. FreeRTOS デモアプリケーションをバイナリイメージにクロスコンパイルします。

1. アプリケーションバイナリイメージをボードにロードし、アプリケーションを実行します。

1. モニタリングおよびデバッグの目的で、シリアル接続経由でボード上で実行されているアプリケーションに接続します。

## 前提条件
<a name="setup-espressif-prereqs"></a>

Espressif ボードで FreeRTOS の使用を開始する前に、 AWS アカウントとアクセス許可を設定する必要があります。

### にサインアップする AWS アカウント
<a name="sign-up-for-aws"></a>

がない場合は AWS アカウント、次の手順を実行して作成します。

**にサインアップするには AWS アカウント**

1. [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup) を開きます。

1. オンラインの手順に従います。

   サインアップ手順の一環として、電話またはテキストメッセージを受け取り、電話キーパッドで検証コードを入力します。

   にサインアップすると AWS アカウント、 *AWS アカウントのルートユーザー* が作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティベストプラクティスとして、ユーザーに管理アクセス権を割り当て、[ルートユーザーアクセスが必要なタスク](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)の実行にはルートユーザーのみを使用するようにしてください。

AWS サインアッププロセスが完了すると、 から確認メールが送信されます。[https://aws.amazon.com/](https://aws.amazon.com/) の **[マイアカウント]** をクリックして、いつでもアカウントの現在のアクティビティを表示し、アカウントを管理することができます。

### 管理アクセスを持つユーザーを作成する
<a name="create-an-admin"></a>

にサインアップしたら AWS アカウント、日常的なタスクにルートユーザーを使用しないように AWS アカウントのルートユーザー、 のセキュリティを確保し AWS IAM アイデンティティセンター、 を有効にして管理ユーザーを作成します。

**を保護する AWS アカウントのルートユーザー**

1.  **ルートユーザー**を選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者[AWS マネジメントコンソール](https://console.aws.amazon.com/)として にサインインします。次のページでパスワードを入力します。

   ルートユーザーを使用してサインインする方法については、「*AWS サインイン ユーザーガイド*」の「[ルートユーザーとしてサインインする](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)」を参照してください。

1. ルートユーザーの多要素認証 (MFA) を有効にします。

   手順については、*IAM* [ユーザーガイドの AWS アカウント 「ルートユーザー (コンソール) の仮想 MFA デバイス](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)を有効にする」を参照してください。

**管理アクセスを持つユーザーを作成する**

1. IAM アイデンティティセンターを有効にします。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[AWS IAM アイデンティティセンターの有効化](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)」を参照してください。

1. IAM アイデンティティセンターで、ユーザーに管理アクセスを付与します。

   を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリアルについては、「 *AWS IAM アイデンティティセンター ユーザーガイド*」の[「デフォルトを使用してユーザーアクセスを設定する IAM アイデンティティセンターディレクトリ](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)」を参照してください。

**管理アクセス権を持つユーザーとしてサインインする**
+ IAM アイデンティティセンターのユーザーとしてサインインするには、IAM アイデンティティセンターのユーザーの作成時に E メールアドレスに送信されたサインイン URL を使用します。

  IAM Identity Center ユーザーを使用してサインインする方法については、*AWS サインイン 「 ユーザーガイド*[」の AWS 「 アクセスポータルにサインイン](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)する」を参照してください。

**追加のユーザーにアクセス権を割り当てる**

1. IAM アイデンティティセンターで、最小特権のアクセス許可を適用するというベストプラクティスに従ったアクセス許可セットを作成します。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[アクセス許可セットを作成する](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)」を参照してください。

1. グループにユーザーを割り当て、そのグループにシングルサインオンアクセス権を割り当てます。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[グループを追加する](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)」を参照してください。

アクセスを提供するには、ユーザー、グループ、またはロールにアクセス許可を追加します。
+ 以下のユーザーとグループ AWS IAM アイデンティティセンター:

  アクセス許可セットを作成します。「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[アクセス許可セットを作成する](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)」の手順に従ってください。
+ IAM 内で、ID プロバイダーによって管理されているユーザー:

  ID フェデレーションのロールを作成します。詳細については *IAM ユーザーガイド* の [サードパーティー ID プロバイダー (フェデレーション) 用のロールを作成する](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html) を参照してください。
+ IAM ユーザー:
  + ユーザーが担当できるロールを作成します。手順については *IAM ユーザーガイド* の [IAM ユーザーのロールの作成](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html) を参照してください。
  + (お奨めできない方法) ポリシーをユーザーに直接アタッチするか、ユーザーをユーザーグループに追加します。*IAM ユーザーガイド* の [ユーザー (コンソール) へのアクセス許可の追加](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) の指示に従います。

## はじめに
<a name="setup-espressif-idf42"></a>

**注記**  
このチュートリアルの Linux コマンドでは、Bash シェルを使用する必要があります。

1. **Espressif ハードウェアを設定します。**
   + ESP32-DevKitC 開発ボードハードウェアの設定の詳細については、[ESP32-DevKitC V4 入門ガイド](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/hw-reference/esp32/get-started-devkitc.html)を参照してください。
   + ESP-WROVER-KIT 開発ボードハードウェアの設定の詳細については、[ESP-WROVER-KIT V4.1 入門ガイド](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/hw-reference/esp32/get-started-wrover-kit.html)を参照してください。
**重要**  
Espressif ガイドの**開始方法**セクションに到達したらそこで止まり、このページの手順に戻ります。

1. [GitHub](https://github.com/aws/amazon-freertos) から Amazon FreeRTOS をダウンロードします。(手順については、[README.md](https://github.com/aws/amazon-freertos/blob/main/README.md) ファイルを参照してください。)

1. **開発環境をセットアップします。**

   ボードと通信するには、ツールチェーンをインストールする必要があります。Espressif には、ボード用のソフトウェアを開発するための ESP-IDF が用意されています。ESP-IDF には独自のバージョンの FreeRTOS カーネルがコンポーネントとして統合されているため、Amazon FreeRTOS には、FreeRTOS カーネルが除去された、カスタムバージョンの ESP-IDF v4.2 が含まれています。これにより、コンパイル時にファイルが重複する問題が修正されます。Amazon FreeRTOS に含まれているカスタムバージョンの ESP-IDF v4.2 を使用するには、ホストマシンのオペレーティングシステムに応じて以下の手順を実行します。

   **Windows**

   1. ESP-IDF の Windows 用の[汎用オンラインインストーラ](https://dl.espressif.com/dl/esp-idf/?idf=4.2)をダウンロードします。

   1. **汎用オンラインインストーラ**を実行します。

   1. **ESP-IDF をダウンロードまたは使用する**手順に進んだら、**[既存の ESP-IDF ディレクトリを使用]** を選択し、**[既存の ESP-IDF ディレクトリを選択]** を `{{freertos}}/vendors/espressif/esp-idf` に設定します。

   1. インストールを完了します。

   **macOS**

   1. 「[Standard Setup of Toolchain prerequisites (ESP-IDF v4.2) for macOS](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/get-started/macos-setup.html)」の手順を実行します。
**重要**  
**次のステップ**の下にある「ESP-IDF の取得」の手順に到達したらそこで止まり、このページの手順に戻ります。

   1. コマンドラインウィンドウを開きます。

   1. FreeRTOS ダウンロードディレクトリに移動し、次のスクリプトを実行して、お使いのプラットフォーム用の espressif ツールチェーンをダウンロードしてインストールします。

      ```
      vendors/espressif/esp-idf/install.sh
      ```

   1. 次のコマンドを使用して、ESP-IDF ツールチェーンツールをターミナルのパスに追加します。

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

   **Linux**

   1. 「[Standard Setup of Toolchain prerequisites (ESP-IDF v4.2) for Linux](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/get-started/linux-setup.html)」の手順を実行します。
**重要**  
**次のステップ**の下にある「ESP-IDF の取得」の手順に到達したらそこで止まり、このページの手順に戻ります。

   1. コマンドラインウィンドウを開きます。

   1. FreeRTOS ダウンロードディレクトリに移動し、次のスクリプトを実行して、お使いのプラットフォーム用の espressif ツールチェーンをダウンロードしてインストールします。

      ```
      vendors/espressif/esp-idf/install.sh
      ```

   1. 次のコマンドを使用して、ESP-IDF ツールチェーンツールをターミナルのパスに追加します。

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

1. **シリアル接続を確立します。**

   1. ホストマシンと ESP32-DevKitC の間にシリアル接続を確立するには、CP210x USB を UART Bridge VCP ドライバーにインストールする必要があります。これらのドライバーは [Silicon Labs](https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers) からダウンロードできます。

      ホストマシンと ESP32-WROVER-KIT の間にシリアル接続を確立するには、FTDI 仮想 COM ポートドライバーをインストールする必要があります。このドライバーは [FTDI](https://www.ftdichip.com/Drivers/VCP.htm) からダウンロードできます。

   1. [ESP32 でシリアル接続を確立する](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/get-started/establish-serial-connection.html)ステップを実行します。

   1. シリアル接続を確立したら、ボードとの接続用のシリアルポートをメモしておきます。デモをフラッシュするにはこれが必要です。

### FreeRTOS デモアプリケーションを設定する
<a name="configure-demos-espressif-idf42"></a>

このチュートリアルでは、FreeRTOS 設定ファイルは `{{freertos}}/vendors/espressif/boards/{{board-name}}/aws_demos/config_files/FreeRTOSConfig.h` にあります。(例えば、`AFR_BOARD espressif.esp32_devkitc` を選択した場合、設定ファイルは `{{freertos}}/vendors/espressif/boards/esp32/aws_demos/config_files/FreeRTOSConfig.h` にあります。) 

1. macOS または Linux を実行している場合、ターミナルプロンプトを開きます。Windows を実行している場合は、「ESP-IDF 4.x CMD」アプリ (ESP-IDF ツールチェーンのインストール時にこのオプションを含めた場合) または「コマンドプロンプト」アプリ (オプションを含めなかった場合) を開きます。

1. Python3 がインストールされていることを確認するには、以下を実行します。

   ```
   python --version
   ```

   インストールされているバージョンが表示されます。Python 3.0.1 以降がインストールされていない場合は、[Python](https://www.python.org/downloads/) ウェブサイトからインストールできます。

1.  AWS IoT コマンドを実行するには AWS 、 コマンドラインインターフェイス (CLI) が必要です。Windows を実行している場合は、 `easy_install awscli` コマンドを使用して AWS 、「Command」または「ESP-IDF 4.x CMD」アプリに CLI をインストールします。

   macOS または Linux を実行している場合は、「 [AWS CLI のインストール](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)」を参照してください。

1. 実行

   ```
   aws configure
   ```

   アクセスキー ID AWS 、シークレット AWS アクセスキー、デフォルト AWS リージョンを使用して CLI を設定します。詳細については、[AWS CLI の設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)を参照してください。

1. 次のコマンドを使用して AWS SDK for Python (boto3) をインストールします。
   + Windows の場合、「コマンド」または「ESP-IDF 4.x CMD」アプリで、以下を実行します。

     ```
     pip install boto3 --user
     ```
**注記**  
詳細については、[Boto3 ドキュメント](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)を参照してください。
   + macOS または Linux の場合、以下を実行します。

     ```
     pip install tornado nose --user
     ```

     続いて以下を実行します。

     ```
     pip install boto3 --user
     ```

   FreeRTOS には、 AWS IoTに接続するための Espressif ボードのセットアップを容易にする `SetupAWS.py` スクリプトが含まれています。このスクリプトを設定するには、`{{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. 設定スクリプトを実行します。

   1. macOS または Linux を実行している場合、ターミナルプロンプトを開きます。Windows を実行している場合は、「ESP-IDF 4.x CMD」アプリまたは「コマンド」アプリを開きます。

   1. `{{freertos}}/tools/aws_config_quick_start` ディレクトリに移動して、以下を実行します。

      ```
      python SetupAWS.py setup
      ```

       スクリプトは、次を実行します。
      + IoT のモノ、証明書およびポリシーを作成します。
      + 証明書に IoT ポリシーを、 AWS IoT のモノに証明書をアタッチします。
      + `aws_clientcredential.h` エンドポイント、Wi-Fi SSID、および認証情報を AWS IoT ファイルに追加します。
      + 証明書とプライベートキーをフォーマットして `aws_clientcredential_keys.h` ヘッダーファイルに書き込みます。
**注記**  
証明書はデモ目的でのみハードコードされています。本番稼動レベルのアプリケーションでは、これらのファイルを安全な場所に保存する必要があります。

      `SetupAWS.py` の詳細については、`{{freertos}}/tools/aws_config_quick_start` ディレクトリにある「`README.md`」を参照してください。

### クラウドの MQTT メッセージのモニタリング
<a name="gsg-espressif-monitor-mqtt"></a>

FreeRTOS デモプロジェクトを実行する前に、 AWS IoT コンソールで MQTT クライアントを設定して、デバイスが AWS クラウドに送信するメッセージをモニタリングできます。

**MQTT クライアントで AWS IoT MQTT トピックをサブスクライブするには**

1. [AWS IoT コンソール](https://console.aws.amazon.com/iotv2/)に移動します。

1. ナビゲーションペインで、**[テスト]** を選択し、次に **[MQTT テストクライアント]** を選択します。

1. **[Subscription topic]** (トピックのサブスクリプション) で `{{your-thing-name}}/example/topic` と入力し、**[Subscribe to topic]** (トピックへのサブスクライブ) を選択します。

デバイス上でデモプロジェクトが正常に実行されると、「Hello World\!」が 購読しているトピックに複数回送信されたことを確認できます。

### idf.py スクリプトを使用して FreeRTOS デモプロジェクトを構築、フラッシュ、実行する
<a name="build-and-run-example-espressif-idf42"></a>

Espressif の IDF ユーティリティ (`idf.py`) 使用してプロジェクトを構築し、バイナリをデバイスにフラッシュすることができます。

**注記**  
一部のセットアップでは、次の例のように、`idf.py` でポートオプション `"-p port-name"` を使用して正しいポートを指定する必要があります。  

```
idf.py -p /dev/cu.usbserial-00101301B flash
```

**Windows、Linux、macOS で FreeRTOS を構築してフラッシュする (ESP-IDF v4.2)**

1. FreeRTOS ダウンロードディレクトリのルートに移動します。

1. コマンドラインウィンドウで、次のコマンドを入力し、ESP-IDF ツールをターミナルのパスに追加します。  
**Windows (「コマンド」アプリ)**  

   ```
   vendors\espressif\esp-idf\export.bat
   ```  
**Windows (「ESP-IDF 4.x CMD」アプリ)**  
(これはアプリを開いた時点で既に完了しています。)  
**Linux/macOS**  

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

1. 次のコマンドを使用して `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 ファイルが生成されます。

1. 次のコマンドを使用して、開発ボードのフラッシュメモリを消去します。

   ```
   idf.py erase_flash
   ```

1. `idf.py` スクリプトを使用して、アプリケーションバイナリをボードにフラッシュします。

   ```
   idf.py flash
   ```

1. 次のコマンドを使用して、ボードのシリアルポートからの出力をモニタリングします。

   ```
   idf.py monitor
   ```
**注記**  
以下の例のように、これらのコマンドを組み合わせることができます。  

   ```
   idf.py erase_flash flash monitor
   ```

   特定のホストマシンのセットアップでは、次の例のように、ボードをフラッシュするときにポートを指定する必要があります。

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

### CMake で FreeRTOS を構築してフラッシュする
<a name="flash-espressif-cmake-idf42"></a>

コードを構築して実行するために IDF SDK によって提供される `idf.py` スクリプトに加えて、CMake を使用してプロジェクトを構築することもできます。現在、Unix Makefiles または Ninja ビルドシステムのいずれかがサポートされています。

**プロジェクトを構築してフラッシュするには**

1. コマンドラインウィンドウで、FreeRTOS ダウンロードディレクトリのルートに移動します。

1. 次のスクリプトを実行して、ESP-IDF ツールをシェルのパスに追加します。  
**Windows**  

   ```
   vendors\espressif\esp-idf\export.bat
   ```  
**Linux/macOS**  

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

1. 次のコマンドを入力して、ビルドファイルを生成します。  
**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
   ```

1. プロジェクトをビルドします。  
**Unix Makefiles を使用**  

   ```
   make -C ./YOUR_BUILD_DIRECTORY -j8 
   ```  
**Ninja を使用**  

   ```
   ninja -C ./YOUR_BUILD_DIRECTORY -j8
   ```

1. フラッシュを消去してから、ボードをフラッシュします。  
**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
   ```

## Bluetooth Low Energy デモを実行する
<a name="espressif-run-ble"></a>

FreeRTOS は [Bluetooth Low Energy ライブラリ](freertos-ble-library.md) 接続をサポートしています。

Bluetooth Low Energy で FreeRTOS デモプロジェクトを実行するには、iOS または Android のモバイルデバイスで FreeRTOS Bluetooth Low Energy Mobile SDK デモアプリケーションを実行する必要があります。

**FreeRTOS Bluetooth Low Energy Mobile SDK デモアプリケーションをセットアップするには**

1. モバイルプラットフォーム用の SDK をホストコンピュータにダウンロードしてインストールするには、「[FreeRTOS Bluetooth デバイス用の Mobile SDK](freertos-ble-mobile.md)」の手順に従います。

1. モバイルデバイスにデモモバイルアプリケーションをセットアップするには、「[FreeRTOS Bluetooth Low Energy Mobile SDK デモアプリケーション](ble-demo.md#ble-sdk-app)」の手順に慕います。

ボードで MQTT over Bluetooth Low Energy デモを実行する方法については、[MQTT over Bluetooth Low Energy](ble-demo.md#ble-demo-mqtt)を参照してください。

ボードで Wi-Fi プロビジョニングデモを実行する方法については、[Wi-Fi プロビジョニング](ble-demo.md#ble-demo-wifi)を参照してください。

## ESP32 用の独自の CMake プロジェクトで FreeRTOS を使用する
<a name="getting_started_espressif_cmake_project"></a>

独自の CMake プロジェクトで FreeRTOS を使用したい場合は、それをサブディレクトリとして設定し、アプリケーションと一緒に構築することができます。まず、[GitHub](https://github.com/aws/amazon-freertos) から 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
```

以下に、FreeRTOS を使用してアプリケーションを構築するために使用できる最上位 `CMakeLists.txt` ファイルの例を示します。

```
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 のコンポーネントを使用する
<a name="getting_started_espressif_cmake_project_components"></a>

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 を使用したカスタムコンポーネントの追加
<a name="getting_started_espressif_cmake_project_espidf"></a>

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 の設定を上書きする
<a name="getting_started_espressif_cmake_project_override"></a>

現在、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 を提供する
<a name="getting_started_espressif_providing_sdkconfig"></a>

独自の `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` にあるデフォルトのファイルが使用されます。

詳細については、「Espressif *API Reference*」の「[Project Configuration](https://docs.espressif.com/projects/esp-idf/en/v4.2-beta1/esp32s2/api-reference/kconfig.html)」を参照してください。コンパイルが正常に完了した後に問題が発生する場合は、そのページの「[Deprecated options and their replacements](https://docs.espressif.com/projects/esp-idf/en/v4.2-beta1/esp32s2/api-reference/kconfig.html#deprecated-options-and-their-replacements)」のセクションを参照してください。

### 概要
<a name="getting_started_espressif_cmake_project_summary"></a>

`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)
```

## トラブルシューティング
<a name="getting_started_espressif_troubleshooting"></a>
+ macOS を使用していてオペレーティングシステムが ESP-WROVER-KIT を認識しない場合は、D2XX ドライバーがインストールされていないことを確認してください。ドライバーをアンインストールするには、[FTDI Drivers Installation Guide for macOS X](http://www.ftdichip.com/Support/Documents/AppNotes/AN_134_FTDI_Drivers_Installation_Guide_for_MAC_OSX.pdf) の手順に従います。
+ ESP-IDF によって提供された (および make monitor を使用して呼び出された) モニタユーティリティを使用して、アドレスをデコードできます。そのため、アプリケーションが停止した場合に意味のあるバックトレースを取得するのに役立ちます。詳細については、Espressif ウェブサイトの[自動アドレスデコーディング](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/api-guides/tools/idf-monitor.html#automatic-address-decoding)を参照してください。
+ GDBstub を gdb との通信用に有効にすることができます。特別な JTAG ハードウェアは必要ありません。詳細については、Espressif ウェブサイトの [GDBStub を使用して GDB を起動する](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/api-guides/tools/idf-monitor.html#launching-gdb-with-gdbstub)を参照してください。
+ JTAG ハードウェアベースのデバッグが必要な場合に OpenOCD ベースの環境をセットアップする方法の詳細については、Espressif ウェブサイトの [JTAG のデバッグ](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/jtag-debugging/index.html)を参照してください。
+ macOS で `pip` を使用して `pyserial` をインストールできない場合、[pyserial ウェブサイト](https://pypi.org/simple/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 を使用する](#getting_started_espressif_cmake_project)」の手順を実行していて、リンカーから未定義の参照エラーが返された場合は、通常、依存ライブラリまたはデモがないことを示します。これらを追加するには、標準の 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
  ```

トラブルシューティングの詳細については、「[トラブルシューティングの開始方法](gsg-troubleshooting.md)」を参照してください。

## デバッグ
<a name="getting_started_espressif_debugging"></a>

### Espressif ESP32-DevKitC および ESP-WROVER-KIT のデバッグコード (ESP-IDF v4.2)
<a name="debugging-espressif-idf42"></a>

このセクションでは、ESP-IDF v4.2 を使用して Espressif ハードウェアをデバッグする方法について説明します。JTAG to USB ケーブルが必要です。USB to MPSSE ケーブルを使用します (例: [FTDI C232HM-DDHSL-0](http://www.ftdichip.com/Products/Cables/USBMPSSE.htm))。

**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 データシート](https://www.ftdichip.com/Support/Documents/DataSheets/Cables/DS_C232HM_MPSSE_CABLE.pdf)から開発されました。詳細については、データシートの「C232HM MPSSE Cable Connection and Mechanical Details」セクションを参照してください。  
ESP-WROVER-KIT で JTAG を有効にするには、次に示すように TMS、TDO、TDI、TCK、S\_TDI のピンにジャンパーを配置します。  

![ジャンパーの配置](http://docs.aws.amazon.com/ja_jp/freertos/latest/userguide/images/JP8-jumpers.png)


**Windows でのデバッグ (ESP-IDF v4.2)**  

**Windows でのデバッグをセットアップするには**

1. FTDI C232HM-DDHSL-0 の USB 側をコンピュータに接続し、他方の側を [Espressif ESP32-DevKitC および ESP-WROVER-KIT のデバッグコード (ESP-IDF v4.2)](#debugging-espressif-idf42) の説明に従って接続します。FTDI C232HM-DDHSL-0 デバイスは、**[Universal Serial Bus Controllers]** (ユニバーサルシリアルバスコントローラー) の **[Device Manager]** (デバイスマネージャー) に表示されます。

1. ユニバーサルシリアルバスデバイスのリストで、**[C232HM-DDHSL-0]** デバイスを右クリックし、**[Properties]** (プロパティ) を選択します。
**注記**  
このデバイスは、**[USB Serial Port]** (USB シリアルポート) として表示される場合があります。

   プロパティウィンドウで **[Details]** (詳細) タブを選択して、デバイスのプロパティを表示します。デバイスが表示されない場合は、[Windows driver for FTDI C232HM-DDHSL-0](http://www.ftdichip.com/Drivers/D2XX.htm) をインストールします。

1. **[Details]** (詳細) タブで、**[Property]** (プロパティ) を選択し、**[Hardware IDs]** (ハードウェア ID) を選択します。**[Value]** (値) フィールドに、次のような内容が表示されます。

   ```
   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
   ```

1. [OpenOCD for Windows](https://github.com/espressif/openocd-esp32/releases) をダウンロードします。

1. ファイルを `C:\` に解凍して、システムパスに `C:\openocd-esp32\bin` を追加します。

1. OpenOCD には libusb が必要です。これは、Windows にデフォルトではインストールされません。libusb をインストールするには次のステップを実行します。

   1. [zadig.exe](https://zadig.akeo.ie) をダウンロードします。

   1. `zadig.exe` を実行します。**[Options]** (オプション) メニューから、**[List All Devices]** (すべてのデバイスをリストする) を選択します。

   1. ドロップダウンメニューから **[C232HM-DDHSL-0]** を選択します。

   1. ターゲットドライバーフィールドの緑の矢印の右側で **[WinUSB]** を選択します。

   1. ターゲットドライバーフィールドの下のリストで、矢印を選択して **[Install Driver]** (ドライバーのインストール) を選択します。**[Replace Driver]** (ドライバーの置換) を選択します。

1. コマンドプロンプトを開き、FreeRTOS ダウンロードディレクトリのルートに移動し、次のコマンドを実行します。

   ```
   idf.py openocd
   ```

   このコマンドプロンプトを開いたままにしておきます。

1. 新しいコマンドプロンプトを開き、FreeRTOS ダウンロードディレクトリのルートに移動して以下を実行します。

   ```
   idf.py flash monitor
   ```

1. 別のコマンドプロンプトを開き、FreeRTOS ダウンロードディレクトリのルートに移動し、ボードでデモの実行が開始されるまで待ちます。このときに、以下を実行します。

   ```
   idf.py gdb
   ```

   このプログラムは `main` 関数で停止する必要があります。
**注記**  
ESP32 では、最大 2 個のブレークポイントがサポートされています。

**macOS (ESP-IDF v4.2) でのデバッグ**  

1. [FTDI driver for macOS](http://www.ftdichip.com/Drivers/VCP.htm) をダウンロードします。

1. [OpenOCD](https://github.com/espressif/openocd-esp32/releases) をダウンロードします。

1. ダウンロードした .tar ファイルを抽出して、`.bash_profile` のパスを `OCD_INSTALL_DIR/openocd-esp32/bin` に設定します。

1. 次のコマンドを使用して macOS に `libusb` をインストールします。

   ```
   brew install libusb
   ```

1. 次のコマンドを使用してシリアルポートドライバーをアンロードします。

   ```
   sudo kextunload -b com.FTDI.driver.FTDIUSBSerialDriver
   ```

1. 次のコマンドを使用してシリアルポートドライバーをアンロードします。

   ```
   sudo kextunload -b com.FTDI.driver.FTDIUSBSerialDriver
   ```

1. macOS 10.9 以降のバージョンを実行している場合は、次のコマンドを使用して Apple の FTDI ドライバーをアンロードします。

   ```
   sudo kextunload -b com.apple.driver.AppleUSBFTDI
   ```

1. 次のコマンドを使用して FTDI ケーブルの製品 ID とベンダー ID を取得します。アタッチされた USB デバイスが表示されます。

   ```
   system_profiler SPUSBDataType
   ```

   `system_profiler` からの出力は次のようになります。

   ```
      DEVICE:
   
      Product ID: product-ID
      Vendor ID: vendor-ID (Future Technology Devices International Limited)
   ```

1. `projects/espressif/esp32/make/aws_demos/esp32_devkitj_v1.cfg` ファイルを開きます。デバイスのベンダー ID および製品 ID は `ftdi_vid_pid` で始まる行で指定されています。前のステップの `system_profiler` 出力の ID に一致するように ID を変更します。

1. ターミナルウィンドウを開き、FreeRTOS ダウンロードディレクトリのルートに移動して、以下のコマンドを使用して OpenOCD を実行します。

   ```
   idf.py openocd
   ```

   ターミナルウィンドウは開いたままにします。

1. 新しいターミナルを開き、次のコマンドを使用して FTDI シリアルポートドライバーをロードします。

   ```
   sudo kextload -b com.FTDI.driver.FTDIUSBSerialDriver
   ```

1. FreeRTOS ダウンロードディレクトリのルートに移動し、以下を実行します。

   ```
   idf.py flash monitor
   ```

1. 別の新しいターミナルを開き、FreeRTOS のダウンロードディレクトリのルートに移動し、以下を実行します。

   ```
   idf.py gdb
   ```

   `main` でこのプログラムを停止する必要があります。

**Linux でのデバッグ (ESP-IDF v4.2)**  

1. [OpenOCD](https://github.com/espressif/openocd-esp32/releases) をダウンロードします。tarball を抽出し、readme ファイルのインストール手順に従ってください。

1. 次のコマンドを使用して Linux に libusb をインストールします。

   ```
   sudo apt-get install libusb-1.0
   ```

1. ターミナルを開いて **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
   ```

1. サインオフしてからサインインし、ボードの電源を入れ直して変更を有効にします。ターミナルプロンプトで、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 通信に使用されます。もう 1 つのインターフェイスは ESP32 のシリアルポート (UART) にルーティングされ、コードを ESP32 のフラッシュメモリにアップロードするために使用されます。

1. ターミナルウィンドウで FreeRTOS ダウンロードディレクトリのルートに移動して、以下のコマンドを使用して OpenOCD を実行します。

   ```
   idf.py openocd 
   ```

1. 別のターミナルを開き、FreeRTOS ダウンロードディレクトリのルートに移動し、以下のコマンドを実行します。

   ```
   idf.py flash monitor 
   ```

1. 別のターミナルを開き、FreeRTOS ダウンロードディレクトリのルートに移動し、以下のコマンドを実行します。

   ```
   idf.py gdb
   ```

   `main()` でこのプログラムを停止する必要があります。