AWS FreeRTOS + ESP32 〜チュートリアル②FreeRTOSの使用開始 (ESP-IDF v3.3)〜

# FreeRTOS の使用開始

FreeRTOS の開始方法チュートリアルは、ホストマシンで FreeRTOS をダウンロードして設定してから、認定マイクロコントローラボード。

FreeRTOS の開始方法チュートリアルは、ホストマシンで FreeRTOS をダウンロードして設定してから、認定マイクロコントローラボード。

このチュートリアルでは、AWS IoT と AWS IoT コンソールについて理解していることを前提としています。そうでない場合は、先に進む前に AWS IoT の使用開始のチュートリアルを完了することをお勧めします。


トピック:

・FreeRTOS デモアプリケーション

・最初のステップ

・ボード固有の入門ガイド(Espressif ESP32-DevKitC and the ESP-WROVER-KIT)

# FreeRTOS デモアプリケーション

このチュートリアルのデモアプリケーションは、CoreMQTT 相互認証デモです。freertos/demos/coreMQTT/mqtt_demo_mutual_auth.cファイルを開きます。の使用CoremQTT ライブラリをに接続するにはAWSクラウドを使用して、ホストされている MQTT トピックに定期的にメッセージを発行します。 AWS IoTMQTT ブローカー。

一度に実行できるのは 1 つの FreeRTOS デモアプリケーションのみです。FreeRTOS デモプロジェクトをビルドすると、最初のデモがfreertos/vendors/vendor/boards/board/aws_demos/config_files/aws_demo_config.hヘッダーファイルは、実行されるアプリケーションです。このチュートリアルでは、いずれのデモも有効または無効にする必要はありません。CoreMQTT 相互認証デモはデフォルトで有効になっています。

FreeRTOSに付属するデモアプリケーションの詳細については、FreeRTOS デモ。

# 最初のステップ

FreeRTOS の使用を開始するにはAWS IoT必要なもの、必要なものAWSアカウントで、にアクセスするアクセス許可を持つ IAM ユーザーAWS IoTと FreeRTOS クラウドサービスを利用できます。また FreeRTOS をダウンロードし、で動作するようにボードの FreeRTOS デモプロジェクトを設定する必要があります。AWS IoT。以下のセクションでは、これらの要件について説明します。

`注記`
ESP32-DevKitC、ESP-WROVER-KIT、または ESP32-WROOM-32SE を使用している場合は、これらの最初のステップをスキップして「Espressif ESP32-DevKitC と ESP-WROVER-KIT の開始方法」に進みます。

# Espressif ESP32-DevKitC と ESP-WROVER-KIT の開始方法

このチュートリアルでは、ESP32-WROOM-32、ESP32-SOLO-1、または ESP-WROVER モジュール、および ESP-WROVER-KIT-VB を搭載した Espressif ESP32-DevKitC の使用を開始してください。当社のパートナーから購入するには、AWSパートナーデバイスカタログには、次のリンクを使用します。

・ESP32-WROOM-32 DevKitC IT

・ESP32-SOLO-1

・ESP32-WROVER-KIT

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

これらのボードの最新バージョンの詳細については、ESP32-DevKitC V4またはESP-WROVER-KIT」を Espressif ウェブサイトでご覧ください。

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

# Espressif ESP32-DevKitC と ESP-WROVER-KIT の開始方法

このチュートリアルでは、ESP32-WROOM-32、ESP32-SOLO-1、または ESP-WROVER モジュール、および ESP-WROVER-KIT-VB を搭載した Espressif ESP32-DevKitC の使用を開始してください。当社のパートナーから購入するには、AWSパートナーデバイスカタログには、次のリンクを使用します。

・ESP32-WROOM-32 DevKitC IT

・ESP32-SOLO-1

・ESP32-WROVER-KIT

開発ボードのこれらのバージョンが FreeRTOS でサポートされています。
これらのボードの最新バージョンの詳細については、ESP32-DevKitC V4またはESP-WROVER-KIT」を Espressif ウェブサイトでご覧ください。

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


## Overview

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

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

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

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

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

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


## Prerequisites

Espressif ボードで FreeRTOS を使い始める前に、AWSアカウントとアクセス許可が必要です。

アカウントを作成するには、以下を参照してください。の作成とアクティブ化を行うAWSアカウント。

を追加するにはAWS Identity and Access Management(IAM) ユーザーをアカウントに追加するには、『IAM ユーザーガイド。IAM ユーザーアカウントにへのアクセス権を IAM ユーザーアカウントに付与するにはAWS IoTおよび FreeRTOS をインストールするには、以下の IAM ポリシーを IAM ユーザーアカウントにアタッチします。

`AmazonFreeRTOSFullAccess`

IAM ユーザーのすべての FreeRTOS リソース (feertos: *) へのフルアクセスを許可します。

`AWSIoTFullAccess`

IAM ユーザーのすべてのユーザーに対するフルアクセスを許可します。AWS IoTリソース (IoT: *)。

**AmazonFreeRTOSFullAccess ポリシーを IAM ユーザーにアタッチするには**

に移動します。IAM コンソール。

ナビゲーションペインで **[ユーザー] **を選択します。

検索テキストボックスにユーザー名を入力し、リストから選択します。

**[Add permissions]** を選択します。

**[Attach existing policies directly]** を選択します。

検索ボックスに「」と入力します。`AmazonFreeRTOSFullAccess`を選択し、リストから選択してから、を選択します。**次へ: 確認.**

**[Add permissions] **を選択します。

**AWSIoTFullAccess ポリシーを IAM ユーザーにアタッチするには**

に移動します。IAM コンソール。

ナビゲーションペインで **[ユーザー]** を選択します。

検索テキストボックスにユーザー名を入力し、リストから選択します。

**[Add permissions]** を選択します。

**[Attach existing policies directly]** を選択します。

検索ボックスに「」と入力します。`AWSIoTFullAccess`を選択し、リストから選択してから、を選択します。次へ: 確認.

**[Add permissions]** を選択します。

IAM アカウントとユーザーアカウントの詳細については、「」を参照してください。IAM ユーザーガイド。

ポリシーの詳細については、「」を参照してください。IAM のアクセス許可とポリシー。

`注記`
**FreeRTOS 202012.00リリースでは、ESP-IDF v3.3に対応している。それ以降のバージョンの FreeRTOS をお使いの場合は、IDFv4.2 に固有の指示に従ってください。ESP-IDF v4.2の使用を開始する。**

**↑ここ重要**

# ESP-IDF v3.3を使い始める

このセクションでは、Espressif ハードウェアでの ESP-IDF v3.3 の使用方法について説明します。ESP-IDF v4.2 を使用するには、ESP-IDF v4.2の使用を開始する。

## Espressif ハードウェアの設定

### 開発環境をセットアップする

ボードと通信するには、ツールチェーンをダウンロードしてインストールする必要があります。

#### ツールチェーンの設定

`注記`
ESP-IDF v3.3 では、ESP32 コンパイラの最新バージョンがサポートされていません。ESP32 コンパイラの最新バージョンを既にインストールしている場合は、アンインストールし、ツールチェーンのインストールに含まれている互換性のあるバージョンのコンパイラを使用する必要があります。このセクションにあるリンクを参照してください。コンパイラのバージョンを確認するには、次のコマンドを実行します。

```

xtensa-esp32-elf-gcc --version

```

ツールチェーンを設定するには、ホストマシンのオペレーティングシステム用の次の手順に従います。

[Windows用ツールチェーンの標準セットアップ（ESP-IDF v3.3）](https://docs.espressif.com/projects/esp-idf/en/v3.3/get-started-cmake/windows-setup.html)

[macOS用のツールチェーンの標準セットアップ（ESP-IDF v3.3）](https://docs.espressif.com/projects/esp-idf/en/v3.3/get-started-cmake/macos-setup.html)

[Linux用のツールチェーンの標準セットアップ（ESP-IDF v3.3）](https://docs.espressif.com/projects/esp-idf/en/v3.3/get-started-cmake/linux-setup.html)

**重要**
**[ESP-IDF を取得] の手順に到達したら次のステップ停止してから、このページの手順に戻ります。
[ESP-IDF を取得] の手順に従った場合次のステップ、ちょうど今、または以前の機会に、あなたはクリアする必要がありますIDF_PATH続行する前に、環境変数を設定します。この環境変数は、Get ESP-IDF の取得の手順に従った場合に自動的に設定されます。**

## CMake をインストールする

CMake ビルドシステムは、このデバイスの FreeRTOS デモとテストアプリケーションをビルドするために必要です。FreeRTOS はバージョン 3.13 以降をサポートしています。

CMake.org から CMake の最新バージョンをダウンロードできます。ソースとバイナリ配布のいずれも利用可能です。

FreeRTOS で CMake の使用に関する詳細については、「」を参照してください。FreeRTOS で CMake を使用する。

## シリアル接続の確立

ホストマシンと ESP32-DevKitC の間にシリアル接続を確立するには、**CP210x USB を UART Bridge VCP ドライバーにインストールする必要があります。**これらのドライバーは Silicon Labs からダウンロードできます。

ホストマシンと ESP32-WROVER-KIT の間にシリアル接続を確立するには、一部の FTDI 仮想 COM ポートドライバーをインストールする必要があります。これらのドライバーは FTDI からダウンロードできます。

詳細については、「ESP32 とのシリアル接続を確立する」を参照してください。シリアル接続を確立したら、ボードとの接続用のシリアルポートをメモしておきます。デモを構築する際に必要になります。


### FreeRTOS をダウンロードして設定する

環境をセットアップすると、FreeRTOS をダウンロードできるようになります。GitHub、またはFreeRTOS コンソール手順については、以下を参照してください。README.mdファイルを GitHub ウェブサイトでご覧ください。

## FreeRTOS デモアプリケーションを設定する

1. macOS または Linux を実行している場合、ターミナルプロンプトを開きます。Windows を実行している場合は、を開きます。mingw32.exe。MinGWは、ネイティブ Microsoft Windows アプリケーション用の最小限の開発環境です。

2. Python 2.7.10 以降がインストールされていることを確認するには、

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

3. が必要です｡AWS Command Line Interface(AWS CLIMac でAWS IoTコマンド。Windows を実行している場合は、を使用します。easy_install awscliをインストールするにはAWS CLImingw32 環境で。

macOS または Linux を実行している場合は、「」を参照してください。をインストールするAWS CLI。

4. `Runaws configure`を
設定するにはAWS CLIあなたのAWSアクセスキー ID、シークレットアクセスキー、AWSリージョン。詳細については、「AWS CLI の設定」を参照してください。

5. 次のコマンドを使用して、AWSSDK for Python (boto3):

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 v3.3）**
Windows を使用している場合は、」WindowsでFreeRTOSをビルドする (ESP-IDF v3.3)。

CMake を使用してビルドファイルを生成してから、Make を使用してアプリケーションをビルドします。

**CMake を使用してデモアプリケーションのビルドファイルを生成するには**

1.ディレクトリを FreeRTOS ダウンロードディレクトリのルートに変更します。
2.ビルドファイルを生成するには、次のコマンドを使用します。

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

**Make を使用してアプリケーションをビルドするには**

1.ディレクトリを build ディレクトリに変更します。
2.Make を使用してアプリケーションをビルドするには、次のコマンドを使用します。

```
make all -j4
```

`注記`

aws_demos プロジェクトと aws_tests プロジェクトを切り替えるたびに、cmake コマンドでビルドファイルを生成する必要があります。

### WindowsでFreeRTOSをビルドする (ESP-IDF v3.3)

Windowsでは、CMake 用のビルドジェネレーターを指定する必要があります。それ以外の場合、CMake はデフォルトで Visual Studio に設定されます。Ninja ビルドシステムは Windows、Linux、および MacOS で機能するため、Expressif では Ninja ビルドシステムが公式に推奨されます。CMake コマンドは、cmd あるいは PowerShell などのネイティブの Windows 環境で実行する必要があります。MSYS2 や WSL などの仮想 Linux 環境で CMake コマンドを実行することはサポートされていません。

CMake を使用してビルドファイルを生成してから、Make を使用してアプリケーションをビルドします。

**CMake を使用してデモアプリケーションのビルドファイルを生成するには**
1.ディレクトリを FreeRTOS ダウンロードディレクトリのルートに変更します。
2.ビルドファイルを生成するには、次のコマンドを使用します。

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

**アプリケーションを構築するには**

```
ninja
```
または、一般的な CMake インターフェイスを使用してアプリケーションをビルドします。


```
cmake --build build-directory
```
`注記`
`aws_demos `プロジェクトと `aws_tests `プロジェクトを切り替えるたびに、cmake コマンドでビルドファイルを生成する必要があります。

**フラッシュして実行FreeRTOS (ESP-IDF v3.3)**

このセクションでは、Espressif ハードウェアでの ESP-IDF v3.3 の使用方法について説明します。ESP-IDF v4.2 を使用するには、ESP-IDF v4.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
```