AmazonWebService(5)-ポート 443を使った証明書によるクライアント認証でMQTT接続

前回、Amazon FreeRTOSを使用して、AWSとデータの送受信しました。Amazon FreeRTOSは、RX65N Cloud Kitに書き込んで使用しました。前回は、ポート8883、ポート8443を使用しましたが、企業のファイアウォールや一部のホームルータは、デフォルトでは、HTTPS の標準ポート 443 以外のすべてのポートで、制限することが多いので、そのような環境では、正しく動作しません。その時に、ポート443を使用します。AWS IoT Core は、ポート443を使った証明書によるクライアント認証でMQTT接続をサポートしています。

それでは、試してみます。ルーターの8883ポートを制限して、RX65N Cloud Kitを動作させてみました。下記のようにエラーが発生しました。

このようにポートを制限されてしまったため、通信エラーになってしまいました。企業では、セキュリティのため、ポート制限をすることはよくあることです。そこで、HTTPS の標準ポート 443を使用します。それでは、ポート443に対応できるようにソースコードを修正していきたいと思います。

AmazonWebService(4)-Amazon FreeRTOS動作確認

前回まで、Amazon Web Service側の設定が完了したので、今回は、Amazon FreeRTOSを使用して、AWSとデータの送受信をしようと思います。Amazon FreeRTOSは、RX65N Cloud Kitに書き込んで使用します。それでは、まずは、Amazon FreeRTOSを用意します。下記のサイトからダウンロード可能です。

Amazon Web Services からダウンロードしたAmazon FreeRTOSは、Amazon FreeRTOS Qualification Program による検証されたものになります。また、
Amazon FreeRTOSは最新版ではありません。検証に使用したマイコンボードは、Renesas Starter Kit+ for RX65N-2MBになります。

GitHub(aws) からダウンロードしたAmazon FreeRTOSは、最新版のAmazon FreeRTOSになります。検証に使用したRXマイコン ボード以外のパッケージはありません。

GitHub(renesas-rx) からダウンロードしたAmazon FreeRTOSは、最新版のAmazon FreeRTOSではありません。検証に使用したRXマイコン ボード以外のパッケージもあります。RX65N Cloud Kitのパッケージもあります。

今回は、RX65N Cloud Kitを使用しようと思いますので、GitHub(renesas-rx) からダウンロードします。

それでは、まずはダウンロードしたファイルを統合開発環境(IDE)にインポートします。IDEは、e2studioを使用します。

C#言語(9)-グラフの表示

今回は、C#言語でグラフの表示をする機能を構築したいと思います。グラフの種類は散布図にしようと思います。それでは、構築していきたいと思います。まずは、新規プロジェクトを作成します。作成方法は下記のサイトを参考になると思います。

C#言語(1)-アプリケーションを作成してみる

次に、Chartをダイアログに配置します。ツールボックスの[データ]→[Chart]を選択してダイアログに配置します。

現在はグラフの種類が棒グラフになっているので、散布図に変更します。グラフのプロパティより[Series]を選択して、参照ボタンを押します。

Series コレクション エディタが表示されます。Chart Typeが「Column」に設定されているので、「Point」に変更します。変更したら、「OK」ボタンを押します。([データ]→[Name]に記載されているSeriesのNameは後ほど使用するので、覚えておいてください。)

これで、ダイアログの作成は完了したので、画面を表示した時の処理をコーディングしていきます。画面をダイアログのフレームをダブルクリックして、MainForm_Load関数を作成します。作成できたら下記のようにコーディングします。

private void MainForm_Load(object sender, EventArgs e)
{
    for (int i = 0; i < 100; i++)
    {
        chart1.Series["Series1"].Points.AddXY(i, i);
    }
}

それでは、ビルドしてデバッグ実行してみます。傾き1の比例グラフが書けました。今度は、時間てきな要素を追加していきます。先ほど、MainForm_Load関数追加したコードは削除しておきます。次にダイアログを下記のように変更します。

「実行」ボタンをダブルクリックして、button1_Click関数を作成します。下記のようにコーディングします。

AmazonWebService(3)-IoT Core MCU ボードを登録

今回は、MCUボードを登録します。Amazon FreeRTOS コンソールで [Quick Connect (クイック接続)] ワークフローを使用すると、ポリシー、AWS IoT のモノ、およびキーと証明書が自動的に作成されますが、今回は1つ1つ登録していこうと思います。MCUボード登録をするために下記の2つの設定を行います。

  • AWS IoT ポリシーを作成
  • デバイス用の IoT モノ、プライベートキー、証明書を作成

それでは、AWS IoTポリシーの作成から行います。AWS IoT ポリシーの作成には下記の2つの情報が必要になります。

  • AWS のアカウントID
  • AWS アカウントの AWS リージョン

AWSのアカウントIDはマイアカウントから確認できます。画面右上のアカウント名を選択すると、メニューが開かれるのでマイアカウントを選択します。

アカウントIDが確認できます。

AmazonWebService(2)-IAM アクセス許可

前回、AWSにユーザーを追加しました。今回は、アクセス許可の設定を行います。AWS IoT および Amazon FreeRTOS に IAM ユーザーアカウントのアクセスを付与するには、IAM ユーザーアカウントに下記の2つのIAM ポリシーをアタッチします。

  • AmazonFreeRTOSFullAccess:
    関連付けられた ID にすべての Amazon FreeRTOS へのフルアクセスを許可します。
  • AWSIoTFullAccess:
    関連付けられた ID にすべての AWS IoT 設定およびメッセージングオペレーションへのフルアクセスを許可します。

それでは、アクセス許可の設定を行っていきます。下記のURLよりAWSマネージメントコンソールを開きます。

https://console.aws.amazon.com/console/

AWSマネージコンソールよりIAMを選択して、IAMを開きます。

AmazonWebService(1)-IAM ユーザ追加

近頃は、IoTという言葉も定着してきました。IoTは、Internet of Thingsの省略した言葉で、直訳すると「モノのインターネット」という意味です。今後、市場もどんどん大きくなっていくのではと予想されています。ということで、IoT機器を作成してみて、どのようなことができるか調査していこうと思います。

使用するマイコンは、Renesas RX65Nを使用します。使用するクラウドサービスは、Amazon Web Service(AWS)です。Renesasから、AWSに容易に接続できる開発キットとして、RX65N Cloud Kitが販売されています。まずはこちらを使用してみようと思います。

まずは、AWSの設定です。AWSのアカウントを取得(こちらがルートアカウントになります。)したら、まずはIAM(Identity and Access Management)を使用して、ユーザを追加します。下記のURLよりAWSマネージメントコンソールを開きます。

https://console.aws.amazon.com/console/

AWSマネージコンソールよりIAMを選択して、IAMを開きます。

C#言語(8)-XMODEMプロトコルによるデータ受信

前回は、XMODEMプロトコルを使用してデータを送信するアプリケーションを作成しました。今回は、XMODEMプロトコルを使用してデータを受信するアプリケーションを作成しようと思います。XMODEMプロトコルを使用してデータを送信するアプリケーションは下記のページを参照してください。

C#言語(7)-XMODEMプロトコルによる送信

XMODEMプロトコルに関しては、下記のページが参考になると思います。

https://ja.wikipedia.org/wiki/XMODEM

下記のようなダイアログを作成しました。

wincs_006.PNG

XMODEMプロトコルを使用してデータを送信するアプリケーションとほぼ見た目は変わりません。

ダイアログの作成方法は、下記のページを参照してください。

C#言語(1)-アプリケーションを作成してみる

シリアル通信に関しては、下記のページを参照してください。

C#言語(2)-RS232C通信(シリアル通信)

ファイルの参照方法に関しては、下記のページを参照してください。

C#言語(6)-CSVファイルの読み込みと書き込み

参照ボタンを押すと、受信したデータを書き込むファイルを選択するダイアログを表示、受信したデータを書き込むファイルを選択した後に、実行ボタンを押すとファイルの受信を開始します。

それでは、ソースコードを見ていきます。

C#言語(7)-XMODEMプロトコルによるデータ送信

今回は、XMODEMプロトコルを使用してデータを送信するアプリケーションを作成しようと思います。転送効率はあまりよくありません。そのため、データ容量の大きいものを送信することには不向きですが。マイコンのFWのようにそこまで大きくないデータ容量であれば、十分使えます。マイコンのFWを書き込む目的でXMODEMプロトコルを使ってみようと思いました。

XMODEMプロトコルに関しては、下記のページが参考になると思います。

https://ja.wikipedia.org/wiki/XMODEM

下記のようなダイアログを作成しました。

ダイアログの作成方法は、下記のページを参照してください。

C#言語(1)-アプリケーションを作成してみる

シリアル通信に関しては、下記のページを参照してください。

C#言語(2)-RS232C通信(シリアル通信)

ファイルの参照方法に関しては、下記のページを参照してください。

C#言語(6)-CSVファイルの読み込みと書き込み

参照ボタンを押すと、送信したいファイルを選択するダイアログを表示、送信したいファイルを選択した後に、実行ボタンを押すとファイルの送信を開始します。今回、受信側はTeraTermを使用しています。また別の機会に受信側のアプリケーションも作成しようと考えています。

それでは、ソースコードを見ていきます。

Python(6)-TCP通信を使用したファイルへの書き込み

今回は、TCP通信を使用してサーバー側のファイルを書き換えてみようと思います。TCP通信に関しては下記を参照してください。

Python(4)-TCP通信

今回も、ダイアログ無しです。IPとポートも直接コード内に書き込んでおきます。また、書き換えを行うファイルも直接コード内に書き込んであります。

TCPサーバーのアプリケーションは、接続が完了すると、クライアント側に「[*] Connection」と文字列を送信して、受信待ちになります。クライアント側からデータが送られてくると、送られてきたファイルを蓄積します。データの受信が完了すると、指定したファイルに書き込みます。

TCPクライアントのアプリケーションは、接続が完了すると、受信待ちになります。サーバー側から「[*] Connection」と文字列を受信すると、送られてきた文字列を表示します。表示が完了したら指定したファイルのデータを送信します。

下記の例は、TCP_Client.exeをTCP_Server.exeで書き換えたものになります。
書き換え前は、TCP_Client.exeを実行すると、クライアントダイアログが表示されます。

書き換え後は、TCP_Client.exeを実行すると、TCPリスナーダイアログが表示されます。

サーバー側のソースコードは下記のようになります。

Python(5)-TCP通信を使用したコマンドラインインタプリタ

今回は、前回作成したTCP通信を使用してサーバー側をコマンドラインで
制御してみようと思います。Pythonで構築したTCP通信ついては下記のページを紹介しています。

Python(4)-TCP通信

前回と同様で、ダイアログ無しです。IPとポートも直接コード内に書き込んでおきます。

TCPサーバーのアプリケーションは、接続が完了すると、クライアント側に「[*] Connection」と文字列を送信して、受信待ちになります。クライアント側からコマンドが送られてくると、送られてきた情報をコマンドラインインタプリタに処理させます。処理した内容を返信します。

TCPクライアントのアプリケーションは、接続が完了すると、受信待ちになります。サーバー側から文字列が送られてくると、送られてきた文字を受信して表示します。表示が完了したら今度は文字を送信できます。

下記の例は、クライアント側がdirコマンドを送信した際の動作になります。

サーバー側の画面では、下記のように表示されています。

サーバー側のソースコードは下記のようになります。