M5Stack(ESP32マイコン)とAWSを繋ぐテスト
最近ESP32マイコンが色々な用途につかえそうで面白そうだなーと思っています。Interface 2018年9月の特集は、色々な応用例も書かれていて中々良かったです。
Interface(インターフェース) 2018年 09 月号
- 出版社/メーカー: CQ出版
- 発売日: 2018/07/25
- メディア: 雑誌
- この商品を含むブログを見る
とりあえず、本に書かれていたESP32マイコンとAWSを繋いでみるってところをやって見ました。本に書かれている内容や、ネットにも多く公開されている内容そのままなのですが、いつもの通り実際やってみると細かくつまづいたりしたのと、デバイスとしてM5Stackを使ったりしたので、自分へのメモとして書いておきたいと思います。
ESP32マイコン側の環境設定
ESP32マイコンの開発環境としては、以下2通りを試しました。
- M5Stack
- ESPr Developer 32
M5Stackは、ESP32マイコンに加えてディスプレイやセンサまで全部入りの今話題のデバイスです。M5Stackでの環境設定は、以前実施した以下内容でOKでした。
- 出版社/メーカー: スイッチサイエンス
- メディア: おもちゃ&ホビー
- この商品を含むブログを見る
単純にESP32マイコン単体の開発環境が欲しい場合は、ESPr Developer 32がUSBに繋げて、そのままArduino IDEで開発ができるので、良さそうでした。スイッチサイエンスさんで購入できます。
- 出版社/メーカー: スイッチサイエンス(Switch Science)
- メディア: おもちゃ&ホビー
- この商品を含むブログを見る
秋月さんでも同じようなデバイスが安い価格で買えますが、スイッチサイエンスさんの方が電源周りの回路にお金をかけている分安定しているらしいです(自分で検証はしていません)。
ESPr Developer 32は、以下のようにPCに繋ぎます。環境設定はM5Stackとほぼ同じですが、Arduino IDEのボード周りの環境設定が異なります(ESP32 Dev Moduleにする必要があります)。具体的には、以下のように設定しました。
なお、Arduino IDE共通の話ですが、Arduinoの設定を以下のように設定すると詳しくログが見れるので、デバッグが捗ります。通常エラーで原因が分からず詰まった時は設定してみましょう(全然知らなかったです)。
「ツール -> Core Debug Level -> Verbose」
AWSの準備
AWS側の設定です。AWSの「IoT Core」で操作を行います。ブラウザはGoogle Chromeを使った方が良さそうでした。AWSのIoT Coreの概要やできることに関しては、以下記事参照下さい。
要は、AWSの「IoT Core」を使ってAWSにセキュアにデータを送れて、後はAWSの機能でデータを使って色々できるってことみたいです(AWS初心者なので、勘違いしてたらすみません)。
AWSアカウントの取得
以下のアドレスから新規アカウントを登録します(既に持っている人は次に進んでください。)
以下画面の「IoT デバイスを接続」をクリックして「IoT Core」の画面に遷移します。
ポリシーの登録
「安全性」->「ポリシー」を選択して「作成」をクリック
アドバンスドモードに切り替えて、以下のようにステートメントを追加します。
ステートメントのコードは以下
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*" } ] }
モノの登録
証明書作成してダウンロードします。
証明書を全てダウンロードします。Root CAに関しては、CAダウンロード先のリンクに、複数の証明書があるのですが、一番上の「VeriSign Class 3 Public Primary G5 root CA certificate」でOKでした。
証明書に先ほどのポリシーをアタッチしておきましょう。
ESP32マイコン側の設定
AWS IoTと通信するためのMQTTライブラリを入れます。「スケッチ」-> 「ライブラリをインクルード」-> 「ライブラリの管理」からライブラリマネージャーを開いて、以下のように「PubSubClient」で検索します。複数出てきますが、以下の赤枠のものをインストールしましょう。
また、ここでパケットサイズを増やしておく必要があります(詳細は本記事末尾の参考サイトの記事等を参照下さい)。
PubSubClient.h
というファイルを編集します。私の場合は以下の場所にありました。
~/Documents/Arduino/libraries/PubSubClient/src/PubSubClient.h
以下の通り2048に設定しました。
#define MQTT_MAX_PACKET_SIZE 2048
ESP32マイコンとAWSの通信とモニタリング
これで一通り準備ができたので、ESP32マイコンとAWSを連携させてみましょう。
ソフトは、Interfaceや参考リンクのネット情報を元に作成して以下に公開しました。
ESPr Developer 32の場合は「esp32-iot」というディレクトリのソフトを、M5Stackの場合は「m5stack-iot」というディレクトリの中のソフトを使いましょう。使用前にWiFiやAWSの環境に合わせて以下の空欄やxxxとなっている箇所を修正しておいて下さい。
// WiFi Setting const char* ssid = ""; const char* password = ""; // AWS IoT Setting const char* awsEndpoint = "xxx.xxx.xxx.amazonaws.com"; const int awsPort = 8883; const char* pubTopic = "pub01"; const char* rootCA = "-----BEGIN CERTIFICATE-----\n" \ "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" \ "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" \ "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" \ "-----END CERTIFICATE-----\n"; const char* certificate = "-----BEGIN CERTIFICATE-----\n" \ "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" \ "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" \ "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" \ "-----END CERTIFICATE-----\n"; const char* privateKey = "-----BEGIN RSA PRIVATE KEY-----\n" \ "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" \ "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" \ "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" \ "-----END RSA PRIVATE KEY-----\n";
Arduino IDEでビルドして、実行するとAWSとの通信が始まります。プログラムはpub01
というトピックに時間に応じてインクリメント(増加)し続ける数字を投げているだけなので、pub01
というトピックをAWS側でモニタリングしてやるだけです。
AWSのMQTTクライアントで、pub01
を追加してやります。
あとは、以下のように増えていく数字がモニタリングできます
M5StackでAWSと通信してモニタリングしている様子です
トラブルシューティング
M5StackがWiFiに接続しなくなって困ってしまったことがあったのですが、以下のとおりで解決しました。
M5StackでWiFi繋がらずハマってたけど、これに救われた…
— からあげ (@karaage0703) 2018年9月22日
WiFiつなぐ前に以下2行入れたら、あっさり繋がった
WiFi.disconnect(true);
delay(1000); https://t.co/muoYNpKQZm
同様に困っている人は、WiFi.beginの前に以下を入れてみましょう。
WiFi.disconnect(true); delay(1000);
まとめ
ESP32マイコンとAWSを連携させてみました。今回は数字をカウントしてモニタリングするだけの例だったので、地味で全然面白く無いですが、色々IoT的な応用例が作れそうですね。IoT的な使い方をするとき課題になりそうなのは電力ですが、ESP32マイコンは省電力で動かせるディープスリープモードも搭載されているので、うまく使えば長期間のモバイル電源での運用も期待できそうです。
また、そのあたりもうまく工夫して、面白いアプリケーションが作りたいなと思っています。
Interface(インターフェース) 2018年 09 月号
- 出版社/メーカー: CQ出版
- 発売日: 2018/07/25
- メディア: 雑誌
- この商品を含むブログを見る
- 出版社/メーカー: スイッチサイエンス
- メディア: おもちゃ&ホビー
- この商品を含むブログを見る
- 出版社/メーカー: スイッチサイエンス(Switch Science)
- メディア: おもちゃ&ホビー
- この商品を含むブログを見る
参考リンク
ESP32マイコン関係の設定
ESPr Developer 32 で WROOM-32 を Wi-Fi に繋いでみる - Tech Blog by Akanuma Hiroaki
ESP32 の Wi-Fi のみ OFF および温度・湿度・気圧センサー BME280 の再調整など | mgo-tec電子工作
ESP32 ( ESP-WROOM-32 , M5Stack )自分的 トラブルシューティング まとめ | mgo-tec電子工作
ESP32とAWS IoTとの連携
ESP32〜AWS IoTでMQTT通信して詰んだ話【ClientID】
ESP32でAWS IoTに繋いでThing Shadowを弄る – コーヒーサーバは香炉である
ESP32でAWS IoTに繋いでThing Shadowを弄る(2) トラブルシューティング編 – コーヒーサーバは香炉である
ESP32 DeveloperでAWS IoTを動かそうとしてハマったメモ – 1ft-seabass.jp.MEMO
低電力関連
【ESP32】スリープモードについて - ソースに絡まるエスカルゴ