Renesas RX72N Envision KitでAWSに"Hello World"を送信する

# 環境準備
Renesas RX72N Envision KitでAWSに"Hello World"を送信してAWS側で送信されたメッセージを確認してみました。
今回はAWS IoT Coreで必要な設定を済ませてから、Renesasの統合開発環境e² studioでMQTTデモプログラムを作成/起動します。
準備した環境は以下の通りです。

1. RX72N Envision Kit (評価ボード)
2. e² studio 2021-07 (統合開発環境)
3. GCC for Renesas 8.3.0.202102-GNURX Windows (RXマイコン用コンパイラ)

# AWS IoT Coreの設定
まずはAWS IoT CoreでRX72N Envision Kitを登録して、AWSにRX72N Envision Kitが接続できるようにします。
AWSにログインして、AWSマネジメントコンソールを開きます。
その後、「すべてのサービス」->「IoT」->「IoT Core」をクリックしてAWS IoT Coreの設定画面を開きます。
![aws_mqtt_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354472/87cd68b1-32fb-6e67-c7a8-8ad3ba9ec380.png)
## ポリシーの作成
AWSと通信するための接続許可等を定義するポリシーを作成します。
「安全性」->「ポリシー」->「作成」をクリックして、ポリシーの作成画面を開きます。
![aws_mqtt_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354472/89c8a1ff-cad1-e512-fe66-7f192cfa984a.png)
ポリシーの名前を入力したら「アドバンストモード」をクリックして、下記のコードをエディタ画面に貼り付けます。

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Connect",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Publish",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Subscribe",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Receive",
      "Resource": "*"
    }
  ]
}
```

コードを貼り付けたら以下のようになります。
![aws_mqtt_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354472/8b3a115d-2877-cd97-d9f3-e931b0a52435.png)
貼り付けたら「作成」をクリックして、ポリシーの作成を完了します。
## モノの作成
次にRX72N Envision KitをAWSに登録します。
「管理」->「モノ」->「モノを作成」をクリックして、モノの作成画面を開きます。
![aws_mqtt_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354472/d64c44f7-472c-1bd0-6694-746c3cd4972e.png)
「1つのモノを作成」にチェックを入れたら「次へ」をクリックします。
次の画面で「モノの名前」を入力して更に「次へ」をクリックします。
(ほかにも色々設定できますが、特に設定は行わず、このまま進めます)
更に次の画面で「新しい証明書を自動生成 (推奨)」にチェックを入れて「次へ」をクリックします。
アタッチするポリシーを選択する画面で、作成したポリシーを選択して「モノを作成」をクリックします。
「証明書とキーをダウンロード」で「証明書」、「プライベートキー」、「パブリックキー」をダウンロードしておきます。
(ここでダウンロードする「証明書」、「プライベートキー」は後で使用します)

# Renesas e² studioの起動およびプログラムの作成
AWS IoT Coreの設定が完了したら次にe² studioを起動して、"Hello World"を送信するプログラムを作成します。
## FreeRTOSプロジェクトの作成
e² studioを起動したら、「ファイル」から「新規」->「Renesas C/C++ Project」->「Renesas RX」をクリックします。
![e2studio_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354472/3e93ebf7-888e-45eb-2e6a-30fd6b0ec7d3.png)
「GCC for Renesas RX C/C++ Executable Project」を選択して「次へ」をクリックします。
(今回はGCCコンパイラを使用するので、こちらを選択します)
![e2studio_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354472/f96a744f-975e-8561-7221-6695b201c31e.png)
プロジェクトの名前を入力したら「次へ」をクリックします。
次の画面で、以下のようにFreeRTOS (with IoT libraries) + RX72N Envision Kitを使用するプロジェクトに設定します。
(RX72N Envision Kitはボードに実装されたE2 Liteをデバッグに使用するので、E2 Liteを選択しておきます)
(FreeRTOSは2021/08時点で最新版であるv202002.00-rx-1.0.5を使用します)
![e2studio_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354472/307658c7-a359-48e2-bf16-c456e95f2a89.png)
設定が完了したら、「終了」をクリックしてFreeRTOSプロジェクトを作成します。
## AWS接続情報の設定
プロジェクトの作成が完了したら、プロジェクトにAWS接続情報を設定します。
「application_code」->「demos」->「include」から「aws_clientcredential.h」をダブルクリックで開きます。
![e2studio_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354472/de19e010-43a3-b3a8-a2f7-6c369ecd0a64.png)
「clientcredentialMQTT_BROKER_ENDPOINT」にエンドポイント名を入力します。
(エンドポイント名はIoT Coreの「設定」->「デバイスデータエンドポイント」から確認することができます)
![aws_mqtt_9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354472/b6e88623-02d5-7481-3aad-e7813dbaa1c5.png)
「clientcredentialIOT_THING_NAME」に作成したモノの名前を入力します。
次に「証明書」と「プライベートキー」の情報をプロジェクトに設定します。
以下の場所に格納されている「CertificateConfigurator.html」をダブルクリックで開きます。
C:\Users\%username%\.eclipse\com.renesas.platform_download\RTOS\afr-v202002.00-rx-1.0.5\tools\certificate_configuration
ブラウザが開くので、「Certificate PEM file」にAWSからダウンロードした「証明書」を指定しています。
「Private Key PEM file」にAWSからダウンロードした「プライベートキー」を指定します。
「Generate and save aws_clientcredential_keys.h」をクリックしてヘッダーファイルを適当な場所に保存します。
![e2studio_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354472/c71c9b65-9ba2-8fdb-29d0-0051eb402a07.png)
ダウンロードしたヘッダーファイルをe² studio上の「application_code」->「demos」->「include」フォルダにドラッグアンドドロップしてコピーします。
## FreeRTOSプロジェクトのビルドおよび起動
まずRX72N Envision KitのECN1コネクタとPCをUSBケーブルを介して接続して、Ethernetケーブルを介して使用しているルーターにRX72N Envision Kitを接続しておきます。
(ルーターのDHCP機能を有効にしておいてください、正常にプログラムがビルドできません)
e² studio上部のトンカチマークをクリックして、FreeRTOSプロジェクトをビルドします。
ビルドログでエラーメッセージが表示されなければビルド完了です。
その後、同じくe² studio上部の虫マーク横の下三角マークをクリックして、「デバッグの構成」をクリックします。
下記のように、メインクロック/EXTAL周波数、接続タイプ、エミュレータからの電源供給のデバッグ設定を変更します。
![e2studio_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354472/f8f80d1b-d41c-864c-2224-aa57afa67d2d.png)
設定が完了したら画面下部のデバッグをクリックして、プログラムのダウンロード/デバッグを開始します。
デバッグ開始後、下記の画面でプログラムが停止するので、e² studio上部のRestartボタンを1回押して、main関数内でプログラムが停止するのを確認します。

# AWS IoT Coreで送信されたメッセージの確認
AWS側でRX72N Envision Kitが送信した"Hello World"メッセージを確認できるように設定を行います。
IoT Core左側のメニューから「テスト」をクリックします。
![aws_mqtt_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354472/e6cfff8e-78c4-792b-cf69-798aa577dfc0.png)
トピックのフィルターに「#」を入力して「サブスクライブ」をクリックします。
(「#」はワイルドカードでこの設定ではすべてのトピックを表示することを意味します)
![aws_mqtt_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354472/b08ef18c-3778-d216-41b1-e0d711accac7.png)
e² studio上部の再開ボタンを押してプログラムを実行します。
メッセージの送信が開始されるので、以下のようにAWS側でメッセージを受信していることを確認します。
![aws_mqtt_8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354472/becb0ceb-37a9-06b9-d444-4265ac25b992.png)

# さいごに
RX72N Envision Kitを使用してAWSに"Hello World"メッセージを送信するまでの手順を紹介しました。
今回は紹介しませんでしたが、TeraTermを使用すればFreeRTOSの実行ログを確認しながらデバッグを行えるので便利です。
![e2studio_9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354472/a925b392-f60b-e00e-2d24-6b77ca280423.png)