はじめまして。高山です。

ESP32という比較的安価なマイコンとAWS IoT Coreでどこでも自宅の温湿度が確認できるものを作成したのでご紹介したいと思います!

 

さて、紹介に入る前に…IoTを語るうえで避けては通れないのがMQTTプロトコル。恥ずかしながら自分は今回IoTに触るまで知りませんでした…

MQTTとは?IoTに欠かせない通信プロトコル

MQTTの基本

MQTT(Message Queuing Telemetry Transport)は、IoTデバイスに最適化された軽量な通信プロトコルです。

なぜIoTに向いているのか?

  1. 超軽量 

    • データ量が少ない(数バイト〜)
    • 低電力デバイスでも動作
    • 通信量を大幅に削減
  2. 不安定なネットワークに強い 

    • 接続が切れても自動再接続
    • QoS(Quality of Service)で信頼性を調整可能
    • Wi-Fiが弱くても安定動作
  3. シンプルな仕組み 

    • HTTP APIより実装が簡単
    • リアルタイム通信が可能
    • 双方向通信もできる

MQTTとHTTPの比較

比較項目 MQTT HTTP
データ量 2バイト〜 数百バイト〜
通信方式 プッシュ型 プル型(ポーリング)
リアルタイム性 高い 低い(定期的に問い合わせが必要)
消費電力 低い 高い
IoT向き ⭕ 最適 △ 可能だが非効率

MQTTの仕組み「Pub/Sub」

MQTTはPub/Sub(パブリッシュ/サブスクライブ)モデルを採用しています。

Pub/Subモデル

送信者(Publisher)と受信者(Subscriber)が直接通信せず、中間のメッセージブローカーを介してメッセージをやり取りする非同期通信モデル
送信者は受信者を知る必要がなく、疎結合なシステム設計を実現できる。

例:温度センサーの場合

①デバイスAとBが「temp」トピックを購読(Subscribe)

②Publisher(温度センサー)が「temp」トピックに温度データ(22℃)を送信

③Brokerが「temp」トピックを購読している対象にメッセージを振り分け

トピックとは?

トピックは、メッセージの「宛先タグ」のようなものです。
トピックの階層を区切れば以下のような形で管理しやすくなりますね。

room/living/temp ← リビングの温度
room/bedroom/temp ← 寝室の温度


  では実際に作ったものの紹介です。

作ったもの

アーキテクチャ

今回の場合はIoT Core側でESP32から発行されるトピックを常にサブスクライブしている状態です。 ESP32から定期的に送信される温度等の情報を受け取るとLambdaを起動するようにIoT Ruleを設定しています。このLambdaがDynamoDBに各種情報を書き込みます。 各種情報をDynamoDBから取得するLambda・APIを作成、クライアント側でAPIの呼び出しを行うhtmlファイルを開くことで温度・湿度の確認ができるようにしています。  

また、ESP32とAWS IoT Core間の通信はポート8883のMQTT over TLS(MQTTS)を使用して暗号化していますが、それに加えてAWS側で発行した証明書をデバイスに登録することでなりすまし防止といった別観点でのセキュリティ対策を実施しています。

以下の3つの証明書をAWS IoT Coreにて発行し、デバイスのプログラムに記載することで通信が可能になります。

  • デバイス証明書(xxxxx-certificate.pem.crt)
    このデバイスが本物であることを証明する
  • プライベートキー(xxxxx-private.pem.key)
    デバイス証明書とペアになる秘密鍵
  • Amazon Root CA 1(AmazonRootCA1.pem)
    接続時に本物のAWSであるか確認する

 

    使用したもの

    • ESP32
      銀色の端子が何本も見えるもの
    • DHT22(温度・湿度計)
      右側に刺さってる細長いモジュール
    • Type-A to C ケーブル
      ESP32に刺さっている黒ケーブルです。給電とプログラムの書き込みの際に使います。
    • ブレッドボード
      穴が沢山の白いボード
    • ジャンパーワイヤー
    • Arduino IDE
      ESP32の制御用に使用。C++はAIに聞きました。

    ESP32からIoT Core間は自宅のWi-fiを経由して情報を送信してます。

    実際の画面

    APIを呼び出して情報を整形するhtmlファイルを開いているだけなので、スマホに移動させてしまえばどこにいても確認できます。

     

     まとめ

    簡単ではありますが、ESP32とAWS IoT Coreを使用したどこでも自宅の温湿度確認システムのご紹介でした。

    温度を取得する機器の配線やら制御から、クライアント側での温度確認という情報の取得~確認を一気通貫で試せたのが結構面白かったです。

    IoTで使用できるセンサーの類が会社にいくつかあるので次はそちらを試したいと思います。