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 に多くの試行錯誤をともなったので整理して記録を残します。
ゴール

・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 デバイス回路図を示します。
電源は USB ケーブルから供給しています。 外部電源を使用する場合は EXT_5V 端子と GND 端子間に2A 以上の電流を供給できる 5 V 電源を接続します。
Web ブラウザ側から ON ボタンをクリックすると赤色 LED が点灯します。 OFF ボタンをクリックすると緑色 LED が点灯します。
IO19 端子を VDD33 から GND へ接続を変更すると LOW_ 信号を publish します。 GND から VDD33 へ接続変更すると HIGH信号を publish します。
表 1 IoT デバイス部品表
| 部品番号 | 部品名 | 機能 | 説明 |
| U1 | ESP32-DevkitC | MCU | マイクロコントローラ |
| LED1 | 発光ダイオード | 赤色 5mmΦ | |
| R1 | 抵抗 | 100Ω | 電流制限用 |
| LED2 | 発光ダイオード | 緑色 5mmΦ | |
| R2 | 抵抗 | 100Ω | 電流制限用 |
LED1、LED2 は赤色、緑色であればどのような型名でも構いません。
R1、R2 は LED1、LED2 の電流制限用です。 LED に必要な供給電流から抵抗値を決定します。

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