Mosquitto で MQTT 双方向通信 (4)IoT デバイス ハードウエア

Web ブラウザから IoT デバイスの監視と制御

MQTT Mosquitto ブラウザ Web ソケット WebSocket IoTデバイス 監視・制御 SSL/TLS

背景

MQTT プロトコルは IoT 機器の監視・制御に最適な通信方式です。 Mosquitto や EMQX社 から無料で利用できる MQTT Broker が提供されていて手軽に利用できます。 しかし予期せぬサーバーの停止により IoT 機器の監視・制御に不都合をきたしたり、相乗りサーバーのためどうしてもセキュリティに対する不安も残ります。

これらの課題を解決するために VPS サーバーにセキュリティ対策も行った MQTT Broker をインストールして IoT システムを構成しました。 特に Web ブラウザと MQTT Broker 間の MQTT over WebSockets with TLS に多くの試行錯誤をともなったので整理して記録を残します。

ゴール

図 1 Web ブラウザ IoT デバイス 間 MQTT 通信

・VPS サーバーに MQTT Broker インストール
・TLS(SSL) によるセキュリティ対応
・IoT デバイス (C++) と MQTT Broker 間は MQTT over TLS (mqtts://) 通信
・Web ブラウザ (HTML, Java Script, CSS) と MQTT Broker 間 MQTT over WebSockets with TLS (wss://) 通信

本章ではブレッドボードを使って IoT デバイスのハードウエアを組み立てます。

前提条件

・Mosquitto (バージョン 2.0.11) インストール済み
・VPSサーバー Linux OS Debian (バージョン 6.1.153-1) 
・IoT デバイス ESP32-DevKitC
・開発プラットフォーム Visual Studio Code (バージョン:1.105.0)
・拡張機能 PlatformIO IDE for VSCode (バージョン 3.3.4)
・開発言語 Linux , C++, HTML, Java Script, CSS
・通信プロトコル MQTT over TLS (mqtts://), MQTT over WebSockets with TLS (wss://)
・Windows 11 (バージョン Pro 24H2)

マイクロ コントローラ

・ESP32-DevKitC-32E
Wi-Fi モジュールも実装されていて使い勝手のいい Espressif 社の ESP32-DevKitC-32E ( ESP32 開発ボード )を使用します。

ESP32 開発ボードについて購入先の秋月電子通商で検索すると、『ESP-WROOM-32が実装されている評価/開発用ボードです。シリアル⇔USB変換チップ、リセットスイッチ、ブートモードスイッチを搭載しています。PCに接続するだけで、ESP32の評価/開発ができます。』 『Espressif Systems社の無線通信モジュール、ESP32-WROOM-32E の評価基板です。ほとんどのI/Oを引き出してあります。手軽に実験や評価が行えます。』と説明があります。

ESP32-DevKitC-32E ESP32-WROOM-32E の特長
 ・デュアルコア 32bit Xtensa LX6マイクロプロセッサ
 ・40MHzクリスタル発振器を内蔵して最大240MHz動作が可能
 ・2.4GHz Wi-Fi 802.11b/g/n
 ・Bluetooth V4.2 BR/EDR and Bluetooth LE
 ・オンボードアンテナ
 ・4MB SPI FLASH
 ・26本のGPIO

USB ケーブルで PC とこのモジュールを接続するだけでプログラム開発ができるオールインワンの優れものです。

今回は、このモジュールに LED など少しの外付け部品を追加するだけ IoT デバイスのハードウエアが出来上がります。

IoT デバイス回路

図 1 IoT デバイス回路図

図 1 に IoT デバイス回路図を示します。 
電源は USB ケーブルから供給しています。 外部電源を使用する場合は EXT_5V 端子と GND 端子間に2A 以上の電流を供給できる 5 V 電源を接続します。

Web ブラウザ側から ON ボタンをクリックすると赤色 LED が点灯します。 OFF ボタンをクリックすると緑色 LED が点灯します。

IO19 端子を VDD33 から GND へ接続を変更すると LOW_ 信号を publish します。 GND から VDD33 へ接続変更すると HIGH信号を publish します。


表 1 IoT デバイス部品表

部品番号部品名機能説明
U1ESP32-DevkitCMCUマイクロコントローラ
LED1発光ダイオード赤色 5mmΦ
R1抵抗100Ω電流制限用
LED2発光ダイオード緑色 5mmΦ
R2抵抗100Ω電流制限用

LED1、LED2 は赤色、緑色であればどのような型名でも構いません。
R1、R2 は LED1、LED2 の電流制限用です。 LED に必要な供給電流から抵抗値を決定します。

図 2 IoT デバイス 写真

MQTT 用語集

MQTT(Message Queuing Telemetry Transport)
IoTデバイス向けの軽量なパブリッシュ/サブスクライブ型通信プロトコルです。

  1. 基本的な登場人物
    Broker(ブローカー)
    メッセージの仲介役となるサーバー。送信者から届いたメッセージを、適切な受信者へ振り分けます。
    Client(クライアント)
    ブローカーに接続するデバイスやアプリ。送信側(Publisher)と受信側(Subscriber)の両方になり得ます。
    Publisher(パブリッシャー
    メッセージを送信する側のクライアント。
    Subscriber(サブスクライバー)
    メッセージを受信するために、特定のトピックを購読(登録)する側のクライアント。
  2. メッセージ通信の概念
    Topic(トピック
    メッセージを分類するためのパス(例:home/living/sensor)。受信側はこのトピックを指定して購読します。
    Payload(ペイロード)
    メッセージの実データ部分。中身はテキストやバイナリなど任意です。
    Publish(パブリッシュ)
    クライアントが特定のトピックに対してメッセージを送信すること。
    Subscribe(サブスクライブ)
    クライアントが特定のトピックを受け取れるようにブローカーに登録すること。
  3. 品質と信頼性の設定
    QoS(Quality of Service)
    メッセージの到達保証レベルです。
    QoS 0 (At most once)
    最高1回。届かなくても再送せず、最も軽量。
    QoS 1 (At least once)
    最低1回。必ず届くが、重複する可能性がある。
    QoS 2 (Exactly once)
    正確に1回。重複なく確実に届ける、最も信頼性が高い。
    Keep Alive(キープアライブ)
    クライアントとブローカーの接続が維持されているか確認するための定期的な信号。
    LWT(Last Will and Testament / 遺言)
    クライアントが予期せず切断された際、ブローカーが代わりに他者へ通知するメッセージ。

    Google 検索結果を引用させていただきました

リンク

Mosquitto で MQTT 双方向通信 
(1)Mosquitto を VPS にインストール
(2)Web ブラウザと IoT 間 動作エミュレート
(3)Web ブラウザ ソフトウエアコード
(4)IoT デバイスハードウエア
(5)IoT デバイス ソフトウエアコード
(6)システム全体動作確認

(YI)

コメント

error: Content is protected !!
タイトルとURLをコピーしました