Pico3 – 使い方

概要

「Pico3 TypeC」を使用して、LTE通信を行い、SORACOMプラットフォーム(SORACOM BEAM)経由で 「AWS IoT」へと接続するまでをご説明します。

ソフトウェア構成

ESP32の開発環境は以下となります。

contentsvalue
Selected BoardESP32 Dev Module
PSRAMDisabled
Partition Schemedefault_16MB.csv
CPU Frequency80MHz
Flash ModeQIO
Flash Frequency40MHz
Flash Size4MB
Upload Speed921600
Core Debug LevelNone

前提条件

Visual Studio Code, GitHubのインストールが必要になります。
下記HPを参考にしてインストールをして下さい。
参考HP:【初心者向け】VSCodeとGithubの連携 for Windows ~連携操作からプッシュまで~ | BREEZE (breezegroup.co.jp)

サンプルコードのクローン

①「Git Bash」を開いてください。
②cdコマンドを使用し、ソースコードを保存したい任意のディレクトリへカレントディレクトリを移動してください。
 例:cd /c/Pico3/sample_code
③下記コマンドを実行してください。
 git clone https://github.com/Iefuji-Kohei/Pico_sample_code.git

以上で、サンプルコードのクローンが完了となります。

Pico3にサンプルコードを実装

①Pico3とPCをUSBケーブルで接続してください。
②「Visual Studio Code」を開いてください。
③画面下部の「→(PlatformIO:Upload)」をクリックしてください。
 ※PlatformIOを用いた場合

④Uploadが完了したら、画面下部の「コンセントマーク(PlatformIO:Serial Moniter)」をクリックしてください。


⑤IMSI:[*******************] がシリアルモニターに表示されますので、控えておいてください。

以上で、Pico3にサンプルコードを実装完了となります。

「AWS IoT」の設定

次に、AWS上にPico3を「モノ」として登録し、「ポリシー」に準じた権限を与えます。

「モノ」の作成

①AWSコンソール画面の左上「サービス」から「IoT」でソートし、「IoT Core」をクリックしてください。


②画面左メニューの中から、「管理」⇒「すべてのデバイス」⇒「モノ」をクリックしてください。


③画面右上の「モノを作成」をクリックしてください。


④「1つのモノを作成」を選択して、「次へ」をクリックしてください。


④任意の「モノの名前」を入力して、「次へ」をクリックしてください。


⑤「新しい証明書を自動生成(推奨)」を選択して、「次へ」をクリックしてください。


⑥ポリシーは後で作成しますので、「証明書にポリシーをアタッチ」画面では何も選択せずに、画面右下の「モノを作成」をクリックしてください。
⑦証明書発行画面が表示されるので、下記をダウンロードし、完了をクリックしてください。

・デバイス証明書
・パブリックキーファイル
・プライベートキーファイル
・AmazonルートCA1ファイル

以上で、モノの作成は完了です。

「ポリシー」の作成

①画面左メニューの中から、「管理」⇒「セキュリティ」⇒「ポリシー」をクリックしてください。


②画面右上の「ポリシーを作成」をクリックしてください。
③任意の「ポリシー名」を入力して、下記の「ポリシーステートメント」を追加し、画面右下の作成をクリックしてください。
・iot:Connect
・iot:Publish
・iot:Receive
・iot:Subscribe

以上で、ポリシーの作成は完了となります。

「モノ」に「ポリシー」をアタッチ

①画面左メニューの中から、「管理」⇒「セキュリティ」⇒「証明書」をクリックしてください。


②ダウンロードしたデバイス証明書ファイル (xxxxxxxxxx-certificate..pem.crt) のファイル名の先頭(xxxxxxxxxx の部分) をコピーして、
「証明書を見つける」 に貼り付けしてください。作成した証明書が表示されます。
③作成した証明書にチェックを入れ、「アクション」⇒「ポリシーをアタッチ」をクリックしてください。


④タブから作成したポリシー名を選択して、「ポリシーをアタッチ」をクリックしてください。

以上で、「モノ」に「ポリシー」をアタッチ完了となります。

「SORACOM BEAM」の設定

対応するSIM回線を「AWS IoT」へ接続できるように設定を行います。

SIMグループの作成

①SORACOMコンソール画面左上の「メニュー」⇒「SIMグループ」をクリックしてください。


②「SIMグループ」ページの「追加」をクリックしてください。

③任意の「グループ名」を入力して、「グループ作成」をクリックしてください。

④「SORACOM Beam設定」を選択して、「設定を追加する」をクリックしてください。

⑤「設定を追加する」タブ内の「MQTTエントリポイント」を選択してください。
 SORACOM Beam-MQTTの設定画面が開きます。

⑥「転送先」の「ホスト名」に作成した「AWS IoT」のエンドポイントを入力してください。

(※)「AWS IoT」画面左メニュー下部にある「設定」をクリックすると、エンドポイントが表示されます。

⑦同じく「転送先」の「ポート番号」に「8883」を入力してください。
⑧「証明書」を選択して、「認証情報を追加」をクリックしてください。

⑨「認証情報ID」に任意の名前を入力してください。

⑩「秘密鍵(KEY)」にダウンロードしたプライベートキーファイル(****-private.pem.key)をコピー&ペーストしてください。
⑪「証明書(CERT)」にダウンロードしたデバイス証明書(***-certificate.pem.crt)をコピー&ペースト(※)テキストエディタで開いてコピーしてください。
⑫「CA証明局」にダウンロードしたAmazonルートCA1ファイル(AmazonRootCA1.pem)をコピー&ペーストしてください。
⑬「登録」をクリックしてください。


⑭「保存」をクリックしてください。

以上で、SIMグループの作成は完了となります。

使用SIMをSIMグループに登録

①SORACOMコンソール画面左上の「メニュー」⇒「SIM管理」をクリックしてください。


②使用するSIMのチェックボックスをクリックして、「操作」⇒「所属グループ変更」をクリックしてください。
(※)「5.Pico3にサンプルコードを実装」で控えた「IMSI」を検索ボックスに入れると使用SIMのみが表示されます。
③「新しい所属グループ」タブで、作成したSIMグループを選択して「グループ変更」をクリックしてください。


以上で、使用SIMをSIMグループに登録完了となります。

動作確認

Pico3の起動とシリアルターミナルの起動

①Pico3とPCをUSBケーブルで接続してください。
②「Visual Studio Code」を開いて、画面下部の「コンセントマーク(PlatfomIO:Serial Moniter)」をクリックしてください。
③「Subscribe Start」が表示されたら、Pico3がサブスクライブ(受信待ち)状態に遷移完了となります。

AWSからMQTTサーバーに対して、サブスクライブ(受信状態に)する

①AWSコンソール画面の左上「サービス」から「AWS IoT」をクリックしてください。
②画面左メニューから「テスト」⇒「MQTTテストクライアント」をクリックしてください。


③「トピックをサブスクライブする」を選択して、「トピックのフィルター」に「pico/sample/pub」を入力してください。
④「追加設定」⇒「サービスの品質」⇒「サービスの品質1」を選択して、「サブスクライブ」をクリックしてください。

以上で、トピック「pico/sample/pub」に対してパブリッシュされたデータを確認することができます。

AWSからMQTTサーバーに対して、メッセージをパブリッシュ(送信)する

①「トピックに公開する」を選択して、「トピック名」に「pico/sample/sub」を入力してください。
②「追加設定」⇒「サービスの品質」⇒「サービスの品質1」を選択して、「発行」をクリックしてください。
以上で、トピック「pico/sample/sub」に対して、下記メッセージがパブリッシュされます。
{
    "message": "AWS IoT コンソールからの挨拶"
}

Pico3でAWSからのパブリッシュ情報が受信できたか確認する

「Visual Studio Code」のシリアルモニターに下記が表示されていれば、パブリッシュを無事受信できています。

Subscribe Payload["{  "message": "AWS IoT コンソールからの挨拶"}"]

Pico3からのパブリッシュ(返事)をAWSで確認する。

「MQTTテストクライアント」の画面下部「サブスクリプション」に下記データが表示されていれば、無事Pico3からのパブリッシュをAWS側で受信できています。
{
    "message": "Pico3からの挨拶"
}

以上でPico3とAWSとのやり取りができるようになります。

使用例(AWSからのデータに応じてPico3のLED状態を変更させる)

AWSからのデータに応じてLANのLEDを点灯させる機能を実装します。
仕様としては以下になります。

・AWSからのデータが「RED」なら、LANの赤LEDを点灯させる。
・AWSからのデータが「GREEN」なら、LANの緑LEDを点灯させる。
・AWSからのデータがそれ以外なら、LANのLEDを消灯させる。

上記仕様に基づいてmain.cppとbg770.cppを修正します。

文字列をサブスクライブする場合

①BG770が初期化コマンドシーケンス状態から、サブスクライブ状態に移行した時のLED点灯状態を、緑から消灯に変更します。

②void loop()に以下のコードを追記して、AWSへパブリッシュするコードを削除してください。
 Subscribe_payloadの内容によってLEDの状態を変化させます。

/*AWSからのデータが「RED」なら、LANの赤LEDを光らす。*/
if (Subscribe_payload.equals("RED")){
  LAN_RED_ON();
  LAN_GREEN_OFF();
}

/*AWSからのデータが「GREEN」なら、LANの緑LEDを光らす。*/
if (Subscribe_payload.equals("GREEN")){
  LAN_RED_OFF();
  LAN_GREEN_ON();
}

/*AWSからのデータが「RED」「GREEN」以外なら、LANのLEDを消す*/
if (!Subscribe_payload.equals("RED") && !Subscribe_payload.equals("GREEN")){
  LAN_RED_OFF();
  LAN_GREEN_OFF();
}

③RxData_Analize関数に以下のコードを追記してください。
 ペイロード部分から文頭と文末の”(ダブルクォーテーション)を排除します。
 返却値が "RxData_split[BG770_SUB_PAYLOAD_INDEX - 1]" から "payload" に変更されていますの注意してください。

/*ペイロード部分からダブルクォーテーションを排除*/
String payload = (RxData_split[BG770_SUB_PAYLOAD_INDEX - 1].substring(1,RxData_split[BG770_SUB_PAYLOAD_INDEX - 1].length()-1));

④AWSより「RED」,「GREEN」、その他のデータを送信し、仕様通りに点灯しますか確認してください。

JSON形式でサブスクライブする場合

①JSON形式でサブスクライブする場合、JSONライブラリをインストールする必要があります。
 platformIOのホームでLibrarysを選択してください。

②検索欄にて「json」を検索し、Arduinojsonを選択してください。

③add to projectを選択してください。

④Pico3\Pico_sample_codeを選択し、addをクリックすることでPico3_sample_codeにJSONライブラリを追加することが出来ます。

⑤main.cppは文字列をサブスクライブする場合の②と同様にしてください。

⑥bg770.cpp内のRxData_Analize関数に以下のコードを追記してください。
 AWSから受け取ったjsonデータの解析を行い、"message"キーのデータを返却します。
 返却値が "RxData_split[BG770_SUB_PAYLOAD_INDEX - 1]" から "payload" に変更されていますの注意してください。 

/*jsonドキュメントの作成*/
DynamicJsonDocument doc(200);

/*ペイロード部分からダブルクォーテーションを排除し、jsonデータ解析*/
DeserializationError error = deserializeJson(doc, RxData_split[BG770_SUB_PAYLOAD_INDEX - 1].substring(1, RxData_split[BG770_SUB_PAYLOAD_INDEX - 1].length()-1));

/*エラー解析*/
if (error) {
  Serial.print(F("JSON parsing failed. Error code: "));
  Serial.println(error.c_str());
  return "";
}

/*"message"キーの値をStringクラスのpayloadに格納*/
String payload = doc["message"].as<String>();
return payload;

⑦AWSより{"message": "RED"}、{"message": "GREEN"}、その他のデータを送信し、仕様通りに点灯しますか確認してください。

TOP