Amazon FreeRTOS Windows Simulator のセットアップメモ


 AWS IoTが提供しているAmazon FreeRTOSをWindows上のシミュレータで動かすためのセットアップメモです.

スタートガイドは以下のURLを参考にしていますが, 英語力が皆無なのでミスや間違いがあると思います. このような記事を投稿した経験もないので大変ひどい文章となっていますが, あらかじめご容赦ください.


スタートガイド: https://docs.aws.amazon.com/ja_jp/freertos/latest/userguide/getting_started_windows.html


### 追記(2019/9/19)
いつの間にかスタートガイドが日本語に翻訳されていました．
備忘録という形でこの記事は残しておきますが，新たにシミュレータを動かしたい方は上のリンクを参考にすることを強くオススメします．


# Amazon FreeRTOSとは
オープンソースの組込みシステム向けリアルタイムOSであるFreeRTOSをAWSが買収し, MITライセンスとしてAWS IoTのサービスとして提供しているRTOSである.

FreeRTOSの説明: http://www.picfun.com/RTOS/FreeRTOSframe.html

Amazon FreeRTOSの説明: https://aws.amazon.com/jp/freertos/


# Amazon FreeRTOSを入手する
AWSIoTでは, Windows上で動くシミュレータ版のFreeRTOSを入手できるので今回はそれを用いる際のセットアップを以下に述べていきます. 

# 環境設定
自分はWindows 10 Home で環境を構築しました.

Windows Simulatorをダウンロードする前に前提として以下の3つが必要です.

1. Visual Studio Community 2017
2. WinPCapの最新版
3. 有線イーサネット接続

# Amazon FreeRTOSのダウンロード
AWSIoTのソフトウェアのページから, Amazon FreeRTOSデバイスソフトウェアのページを開き, Windows Simulator版のFreeRTOSが入ったZIPファイルをダウンロードします.

解凍時にできるAmazonFreeRTOSを置いたディレクトリを BASE_FOLDER とスタートガイドでは扱っているので, このメモでもその呼称を用います.

### 注意
ダウンロードしたファイルは適当な場所で解凍すればよいですが, Windowsのパスの最大長が260文字であり, Amazon FreeRTOSファイル内で最長のパスは122文字であることから, 解凍時にできるAmazonFreeRTOSディレクトリへのパスが98文字未満となる必要があります.


# ネットワークインタフェースの確認
Visual Studio を用いて, BASE_FOLDER\AmazonFreeRTOS\demos\pc\windows\visual_studio\aws_demos.sln を立ち上げます.

立ち上げたらビルドメニューからビルドを行います. スタートガイドでは, エラー及び警告が表示されないとありますが, 自分の環境では警告がいくつか表示されました. セットアップ完了まで支障は見られなかったので無視して進めてよいと思われます.

プロジェクトを実行すると, 実行画面が出てきてネットワークインタフェースを表示します. 具体的には以下のような画面が出ます. 

```none:コマンドプロンプトの表示
0 0 [None] FreeRTOS_IPInit
1 0 [None] vTaskStartScheduler
1. rpcap://\Device\NPF_{AD01B877-A0C1-4F33-8256-EE1F4480B70D}
(Network adapter 'Intel(R) Ethernet Connection (4) I219-LM' on local host)
		
2. rpcap://\Device\NPF_{337F7AF9-2520-4667-8EFF-2B575A98B580}
(Network adapter 'Microsoft' on local host)
		
The interface that will be opened is set by "configNETWORK_INTERFACE_TO_USE" which should be defined in FreeRTOSConfig.h Attempting to open interface number 1.
```
 
Visual Studioのデバッガが `Cannot find or open the PDB file` と言ってきますが無視してよいとガイドに書いてあるので無視します. 

ネットワークイーサネットインタフェースの番号を確認できたら, 実行を停止して大丈夫です. 

### 該当するソースコードを編集
BASE_FOLDER\AmazonFreeRTOS\demos\pc\windows\common\config_files\FreeRTOSConfig.h を開いて, `configNETWORK_INTERFACE_TO_USE` に先ほど確認した番号をセットする.


# AWS IoTエンドポイントの確認
AWS IoTに接続するためには, FreeRTOSサンプルコード用のカスタムAWS IoTエンドポイントを指定する必要があります. 

AWS IoTコンソールをブラウザで立ち上げて, 設定のページを開きます. 

設定のページ内にあるテキストボックス内のエンドポイントをコピーして, BASE_FOLDER\AmazonFreeRTOS\demos\common\include にあるaws_clientcredential.h を開き, `clientcredentialMQTT_BROKER_ENDPOINT` にコピーしたエンドポイントをセットします.

# 資格情報の確認

### 証明書作成
 Amazon FreeRTOSを利用する際には, 証明書と秘密鍵をプロジェクトに追加する必要があります.

 まず, AWSIoTコンソールで証明書を作成します.

 手順はこちらを参照してください.
 https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/device-certs-create.html

### ポリシーの作成とアタッチ
スタートガイドにはありませんが, 証明書にポリシーをアタッチする必要があります. 
 
ポリシー作成には, このページを参考にしました.
https://github.com/aws/amazon-freertos/issues/20
https://mikan.github.io/2017/12/13/setup-amazon-freertos-on-stm32l4-discovery-kit-iot-node/

証明書を作成したら,  <BASE_FOLDER>\demos\common\devmode_key_provisioning\CertificateConfigurationTool にある CertificateConfigurator.html をブラウザで開きます.

ページを開くと, 証明書と秘密鍵をアップロードすることで, aws_clientcredential_keys.h をダウンロードできるのでそれを BASE_FOLDER\AmazonFreeRTOS\demos\common\include に上書き保存します. 

# サンプルの実行
Visual Studioでプロジェクトを再び開いて, プロジェクトをリビルドします. 

次に,ブラウザでAWS IoTコンソールを開き, テストのページを開きます.

MQTTクライアントの項に, トピックのサブスクリプションのテキストボックスがあるので, そこに `freertos/demos/echo` と入力し発行します.

プロジェクトを実行すると, ブラウザに大量のHello World が続々とやってくることが確認できるはずです.