メインコンテンツまでスキップ

デバイスをインターネットに接続する

このレッスンの概要を示すスケッチノート

スケッチノート: Nitya Narasimhan 作。画像をクリックすると大きなバージョンが表示されます。

このレッスンは Hello IoT シリーズ の一環として Microsoft Reactor で教えられました。このレッスンは 1 時間のレッスンと、レッスンの一部を深く掘り下げて質問に答える 1 時間のオフィスアワーの 2 本のビデオとして教えられました。

レッスン 4: デバイスをインターネットに接続する

レッスン 4: デバイスをインターネットに接続する - オフィスアワー

🎥 上の画像をクリックしてビデオを視聴してください

講義前のクイズ

講義前のクイズ

はじめに

IoT の Iインターネット を意味します。これは、デバイスに接続されたセンサーからの測定値を収集したり、アクチュエーターを制御するためのメッセージを送信したりするなど、IoT デバイスの多くの機能を可能にするクラウド接続とサービスです。IoT デバイスは通常、標準の通信プロトコルを使用して単一のクラウド IoT サービスに接続し、そのサービスは AI サービスからデータに基づいてスマートな決定を行うための Web アプリまで、IoT アプリケーションの残りの部分に接続されます。

🎓 センサーから収集されクラウドに送信されるデータはテレメトリと呼ばれます。

IoT デバイスはクラウドからメッセージを受信することができます。多くの場合、メッセージにはコマンドが含まれており、内部でアクションを実行するための指示(再起動やファームウェアの更新など)や、アクチュエーターを使用するための指示(ライトをオンにするなど)が含まれています。

このレッスンでは、IoT デバイスがクラウドに接続するために使用できるいくつかの通信プロトコルと、送信または受信する可能性のあるデータの種類について紹介します。また、インターネット制御をナイトライトに追加し、LED 制御ロジックをローカルで実行される「サーバー」コードに移動する実践的な作業も行います。

このレッスンでは次の内容をカバーします:

通信プロトコル

IoT デバイスがインターネットと通信するために使用される一般的な通信プロトコルはいくつかあります。最も一般的なのは、ブローカーを介したパブリッシュ/サブスクライブメッセージングに基づいています。IoT デバイスはブローカーに接続し、テレメトリを公開し、コマンドを購読します。クラウドサービスもブローカーに接続し、すべてのテレメトリメッセージを購読し、特定のデバイスまたはデバイスのグループにコマンドを公開します。

IoT デバイスはブローカーに接続し、テレメトリを公開し、コマンドを購読します。クラウドサービスはブローカーに接続し、すべてのテレメトリを購読し、特定のデバイスにコマンドを送信します。

MQTT は IoT デバイスに最も人気のある通信プロトコルであり、このレッスンで取り上げられています。他のプロトコルには AMQP や HTTP/HTTPS があります。

メッセージキューイングテレメトリートランスポート (MQTT)

MQTT は、デバイス間でメッセージを送信できる軽量のオープンスタンダードメッセージングプロトコルです。1999 年に石油パイプラインの監視のために設計され、15 年後に IBM によってオープンスタンダードとしてリリースされました。

MQTT には単一のブローカーと複数のクライアントがあります。すべてのクライアントはブローカーに接続し、ブローカーはメッセージを関連するクライアントにルーティングします。メッセージは個々のクライアントに直接送信されるのではなく、名前付きトピックを使用してルーティングされます。クライアントはトピックに公開し、そのトピックを購読しているクライアントはメッセージを受信します。

IoT デバイスが /telemetry トピックでテレメトリを公開し、クラウドサービスがそのトピックを購読する

✅ 調査を行ってください。多くの IoT デバイスがある場合、MQTT ブローカーがすべてのメッセージを処理できるようにするにはどうすればよいですか?

IoT デバイスを MQTT に接続する

ナイトライトにインターネット制御を追加する最初のステップは、MQTT ブローカーに接続することです。

タスク

デバイスを MQTT ブローカーに接続します。

このレッスンのこの部分では、IoT ナイトライトをインターネットに接続してリモートで制御できるようにします。このレッスンの後半では、IoT デバイスが MQTT を介してパブリック MQTT ブローカーに光レベルのテレメトリメッセージを送信し、それがあなたが書くサーバーコードによって受信されます。このコードは光レベルをチェックし、LED をオンまたはオフにするようにデバイスに指示するコマンドメッセージを返します。

このようなセットアップの実際の使用例としては、スタジアムのように多くのライトがある場所で、複数の光センサーからデータを収集してからライトを点灯するかどうかを決定することが考えられます。これにより、1 つのセンサーが雲や鳥に覆われていても、他のセンサーが十分な光を検出している場合にライトが点灯しないようにすることができます。

✅ 複数のセンサーからのデータを評価してからコマンドを送信する必要がある他の状況は何ですか?

この課題の一環として MQTT ブローカーを設定する複雑さに対処する代わりに、オープンソースの MQTT ブローカーである Eclipse Mosquitto を実行するパブリックテストサーバーを使用できます。このテストブローカーは test.mosquitto.org で公開されており、アカウントを設定する必要がないため、MQTT クライアントとサーバーをテストするための優れたツールです。

💁 このテストブローカーは公開されており、安全ではありません。公開する内容を誰でも聞くことができるため、プライベートに保つ必要があるデータには使用しないでください

光レベルが読み取られ、チェックされ、LED が制御される課題のフローチャート

デバイスを MQTT ブローカーに接続するには、以下の手順に従ってください:

MQTT の詳細

トピックには階層があり、クライアントはワイルドカードを使用して階層の異なるレベルを購読できます。たとえば、温度テレメトリメッセージを /telemetry/temperature トピックに送信し、湿度メッセージを /telemetry/humidity トピックに送信し、クラウドアプリで /telemetry/* トピックを購読して温度と湿度の両方のテレメトリメッセージを受信できます。

メッセージは品質保証 (QoS) を設定して送信でき、メッセージが受信される保証を決定します。

  • 最多 1 回 - メッセージは 1 回だけ送信され、クライアントとブローカーは配信を確認するための追加の手順を実行しません(ファイアアンドフォーゲット)。
  • 最少 1 回 - メッセージは送信者によって複数回再試行され、確認が受信されるまで再試行されます(確認済み配信)。
  • ちょうど 1 回 - 送信者と受信者は 2 レベルのハンドシェイクを行い、メッセージが 1 回だけ受信されることを保証します(保証された配信)。

✅ どのような状況でファイアアンドフォーゲットメッセージよりも保証された配信メッセージが必要ですか?

MQTT という名前にはメッセージキューイング(MQTT の頭文字)が含まれていますが、実際にはメッセージキューをサポートしていません。つまり、クライアントが切断されて再接続すると、切断中に送信されたメッセージは受信されません。ただし、QoS プロセスを使用して処理を開始したメッセージは除きます。メッセージには保持フラグを設定できます。これが設定されている場合、MQTT ブローカーはこのフラグを持つトピックに送信された最後のメッセージを保存し、後でそのトピックを購読するクライアントに送信します。これにより、クライアントは常に最新のメッセージを受信できます。

MQTT は、メッセージ間の長い間隔中に接続がまだ生きているかどうかを確認するキープアライブ機能もサポートしています。

🦟 Eclipse Foundation の Mosquitto には、MQTT を実験するために自分で実行できる無料の MQTT ブローカーと、コードをテストするために使用できるパブリック MQTT ブローカーがあり、test.mosquitto.org でホストされています。

MQTT 接続は公開されてオープンであるか、ユーザー名とパスワード、または証明書を使用して暗号化およびセキュリティ保護されることができます。

💁 MQTT は HTTP と同じ基盤となるネットワークプロトコルである TCP/IP を介して通信しますが、異なるポートで通信します。Web アプリがブラウザで実行されている場合や、ファイアウォールやその他のネットワーキングルールが標準の MQTT 接続をブロックする状況では、WebSocket を介して MQTT を使用して通信することもできます。

テレメトリ

テレメトリという言葉は、遠隔測定を意味するギリシャ語の語源に由来します。テレメトリは、センサーからデータを収集し、それをクラウドに送信する行為です。

💁 最も初期のテレメトリデバイスの 1 つは 1874 年にフランスで発明され、モンブランからパリにリアルタイムの天気と雪の深さを送信しました。当時は無線技術が利用できなかったため、物理的なワイヤーを使用していました。

レッスン 1 で紹介したスマートサーモスタットの例を振り返ってみましょう。

複数の部屋のセンサーを使用するインターネット接続サーモスタット

サーモスタットにはテレメトリを収集するための温度センサーがあります。おそらく 1 つの温度センサーが内蔵されており、Bluetooth Low Energy (BLE) などの無線プロトコルを介して複数の外部温度センサーに接続する可能性があります。

送信されるテレメトリデータの例は次のとおりです:

名前説明
thermostat_temperature18°Cサーモスタットの内蔵温度センサーによって測定された温度
livingroom_temperature19°Clivingroom と名付けられたリモート温度センサーによって測定された温度
bedroom_temperature21°Cbedroom と名付けられたリモート温度センサーによって測定された温度

クラウドサービスはこのテレメトリデータを使用して、暖房を制御するために送信するコマンドを決定します。

IoT デバイスからテレメトリを送信する

ナイトライトにインターネット制御を追加する次のステップは、テレメトリトピックで MQTT ブローカーに光レベルのテレメトリを送信することです。

タスク - IoT デバイスからテレメトリを送信する

光レベルのテレメトリを MQTT ブローカーに送信します。

データは JSON としてエンコードされて送信されます。JSON は JavaScript Object Notation の略で、キー/バリューペアを使用してテキストでデータをエンコードする標準です。

✅ JSON にまだ出会ったことがない場合は、JSON.org ドキュメント で詳細を学ぶことができます。

以下の手順に従って、デバイスから MQTT ブローカーにテレメトリを送信してください:

MQTT ブローカーからテレメトリを受信する

テレメトリを送信しても、それを受信するものがなければ意味がありません。光レベルのテレメトリを処理するために何かがそれをリッスンする必要があります。この「サーバー」コードは、より大きな IoT アプリケーションの一部としてクラウドサービスにデプロイするコードの一種ですが、ここではこのコードをローカルコンピュータ(または Pi で直接コーディングしている場合は Pi 上)で実行します。サーバーコードは、光レベルを持つ MQTT を介してテレメトリメッセージをリッスンする Python アプリで構成されています。このレッスンの後半では、LED をオンまたはオフにする指示を含むコマンドメッセージで返信するようにします。 ✅ 調査を行う: リスナーがいない場合、MQTTメッセージはどうなりますか?

Python と VS Code のインストール

ローカルに Python と VS Code がインストールされていない場合、サーバーをコーディングするために両方をインストールする必要があります。仮想 IoT デバイスを使用している場合、または Raspberry Pi で作業している場合は、これらが既にインストールされて設定されているはずなので、この手順をスキップできます。

タスク - Python と VS Code のインストール

Python と VS Code をインストールします。

  1. Python をインストールします。最新バージョンの Python をインストールする手順については、Python ダウンロードページ を参照してください。

  2. Visual Studio Code (VS Code) をインストールします。これは、Python で仮想デバイスコードを記述するために使用するエディタです。VS Code のインストール手順については、VS Code ドキュメント を参照してください。

    💁 これらのレッスンでは VS Code を使用する手順を示しますが、お好みの Python IDE またはエディタを自由に使用できます。

  3. VS Code Pylance 拡張機能をインストールします。これは、Python 言語サポートを提供する VS Code の拡張機能です。この拡張機能のインストール手順については、Pylance 拡張機能ドキュメント を参照してください。

Python 仮想環境の設定

Python の強力な機能の 1 つは、pip パッケージ をインストールできることです。これらは他の人が書いたコードのパッケージで、インターネットに公開されています。1 つのコマンドでコンピュータに pip パッケージをインストールし、そのパッケージをコードで使用できます。MQTT を介して通信するためのパッケージをインストールするために pip を使用します。

デフォルトでは、パッケージをインストールするとコンピュータ全体で利用可能になりますが、これによりパッケージのバージョンに関する問題が発生する可能性があります。たとえば、あるアプリケーションが特定のバージョンのパッケージに依存している場合、新しいバージョンを別のアプリケーションのためにインストールすると壊れることがあります。この問題を回避するために、Python 仮想環境 を使用できます。これは専用フォルダ内の Python のコピーであり、pip パッケージをインストールすると、それらのパッケージはそのフォルダにのみインストールされます。

タスク - Python 仮想環境の設定

Python 仮想環境を設定し、MQTT pip パッケージをインストールします。

  1. ターミナルまたはコマンドラインから、次のコマンドを任意の場所で実行して新しいディレクトリを作成し、移動します:

    mkdir nightlight-server
    cd nightlight-server
  2. 次に、次のコマンドを実行して .venv フォルダに仮想環境を作成します:

    python3 -m venv .venv

    💁 Python 2 がインストールされている場合に備えて、仮想環境を作成するには python3 を明示的に呼び出す必要があります。Python 2 がインストールされている場合、python を呼び出すと Python 2 が使用されます。

  3. 仮想環境をアクティブにします:

    • Windows では:

      • コマンドプロンプトまたは Windows ターミナルを使用している場合、次のコマンドを実行します:

        .venv\Scripts\activate.bat
      • PowerShell を使用している場合、次のコマンドを実行します:

        .\.venv\Scripts\Activate.ps1
    • macOS または Linux では、次のコマンドを実行します:

      source ./.venv/bin/activate

    💁 これらのコマンドは、仮想環境を作成した場所と同じ場所から実行する必要があります。.venv フォルダに移動する必要はなく、仮想環境をアクティブにするコマンドやパッケージをインストールするコマンドは、仮想環境を作成したフォルダから実行する必要があります。

  4. 仮想環境がアクティブになると、デフォルトの python コマンドは仮想環境を作成するために使用されたバージョンの Python を実行します。次のコマンドを実行してバージョンを確認します:

    python --version

    出力は次のようになります:

    (.venv) ➜  nightlight-server python --version
    Python 3.9.1

    💁 Python のバージョンは異なる場合がありますが、バージョン 3.6 以上であれば問題ありません。そうでない場合は、このフォルダを削除し、新しいバージョンの Python をインストールして再試行してください。

  5. 次のコマンドを実行して、人気のある MQTT ライブラリである Paho-MQTT の pip パッケージをインストールします:

    pip install paho-mqtt

    この pip パッケージは仮想環境にのみインストールされ、仮想環境の外では利用できません。

サーバーコードの記述

サーバーコードを Python で記述できます。

タスク - サーバーコードの記述

サーバーコードを記述します。

  1. 仮想環境内で次のコマンドを実行して app.py という Python ファイルを作成します:

    • Windows では次のコマンドを実行します:

      type nul > app.py
    • macOS または Linux では次のコマンドを実行します:

      touch app.py
  2. 現在のフォルダを VS Code で開きます:

    code .
  3. VS Code が起動すると、Python 仮想環境がアクティブになります。これは下部のステータスバーに報告されます:

    VS Code showing the selected virtual environment

  4. VS Code ターミナルが VS Code の起動時に既に実行されている場合、仮想環境はアクティブになりません。最も簡単な方法は、Kill the active terminal instance ボタンを使用してターミナルを終了することです:

    VS Code Kill the active terminal instance button

  5. Terminal -> New Terminal を選択するか、CTRL+` を押して新しい VS Code ターミナルを起動します。新しいターミナルは仮想環境をロードし、ターミナルにアクティブ化の呼び出しが表示されます。プロンプトには仮想環境の名前 (.venv) も表示されます:

    ➜  nightlight-server source .venv/bin/activate
    (.venv) ➜ nightlight
  6. VS Code エクスプローラーから app.py ファイルを開き、次のコードを追加します:

    import json
    import time

    import paho.mqtt.client as mqtt

    id = '<ID>'

    client_telemetry_topic = id + '/telemetry'
    client_name = id + 'nightlight_server'

    mqtt_client = mqtt.Client(client_name)
    mqtt_client.connect('test.mosquitto.org')

    mqtt_client.loop_start()

    def handle_telemetry(client, userdata, message):
    payload = json.loads(message.payload.decode())
    print("Message received:", payload)

    mqtt_client.subscribe(client_telemetry_topic)
    mqtt_client.on_message = handle_telemetry

    while True:
    time.sleep(2)

    6 行目の <ID> をデバイスコードを作成する際に使用した一意の ID に置き換えます。

    ⚠️ これはデバイスで使用したのと同じ ID でなければなりません。そうでないと、サーバーコードは正しいトピックにサブスクライブまたはパブリッシュしません。

    このコードは一意の名前を持つ MQTT クライアントを作成し、test.mosquitto.org ブローカーに接続します。次に、バックグラウンドスレッドで実行される処理ループを開始し、サブスクライブされたトピックのメッセージをリッスンします。

    クライアントはテレメトリトピックのメッセージをサブスクライブし、メッセージが受信されたときに呼び出される関数を定義します。テレメトリメッセージが受信されると、handle_telemetry 関数が呼び出され、受信したメッセージがコンソールに表示されます。

    最後に、無限ループがアプリケーションを実行し続けます。MQTT クライアントはバックグラウンドスレッドでメッセージをリッスンし、メインアプリケーションが実行されている間ずっと実行されます。

  7. VS Code ターミナルから次のコマンドを実行して Python アプリを実行します:

    python app.py

    アプリは IoT デバイスからのメッセージをリッスンし始めます。

  8. デバイスが実行されてテレメトリメッセージを送信していることを確認します。物理的または仮想的なデバイスの光レベルを調整します。受信したメッセージがターミナルに表示されます。

    (.venv) ➜  nightlight-server python app.py
    Message received: {'light': 0}
    Message received: {'light': 400}

    nightlight 仮想環境の app.py ファイルが実行されている間、nightlight-server 仮想環境の app.py ファイルが送信されるメッセージを受信します。

💁 このコードは code-server/server フォルダにあります。

テレメトリはどのくらいの頻度で送信するべきか?

テレメトリの重要な考慮事項の 1 つは、データをどのくらいの頻度で測定して送信するかです。答えは - 状況によります。頻繁に測定すると、測定の変化に迅速に対応できますが、より多くの電力、帯域幅、データを生成し、処理するためのクラウドリソースが必要になります。十分な頻度で測定する必要がありますが、頻繁すぎるのも問題です。

サーモスタットの場合、数分ごとに測定するだけで十分です。温度はそれほど頻繁に変化しません。1 日に 1 回しか測定しない場合、晴れた日の真昼間に夜間の温度で家を暖めることになりかねませんが、毎秒測定すると、ユーザーのインターネット速度と帯域幅を消費する何千もの不必要な重複した温度測定が発生し、バッテリー駆動のリモートセンサーのようなデバイスの電力を消費し、プロバイダーのクラウドコンピューティングリソースのコストが増加します。

工場の機械のデータを監視している場合、故障すると壊滅的な損害や数百万ドルの損失が発生する可能性があるため、毎秒複数回測定する必要があるかもしれません。帯域幅を無駄にするよりも、機械を停止して修理する必要があることを示すテレメトリを見逃す方が悪いです。

💁 この状況では、インターネットへの依存を減らすためにテレメトリを最初に処理するエッジデバイスを検討するかもしれません。

接続の喪失

インターネット接続は信頼性が低く、停電が一般的です。このような状況で IoT デバイスはどうすべきでしょうか?データを失うべきでしょうか、それとも接続が回復するまで保存すべきでしょうか?再び、答えは状況によります。

サーモスタットの場合、新しい温度測定が行われるとデータは失われても問題ありません。暖房システムは 20 分前に 20.5°C だったことを気にしません。現在の温度が 19°C であれば、暖房がオンかオフかを決定します。

機械の場合、データを保持したいかもしれません。特にトレンドを探すために使用される場合です。機械学習モデルは、定義された期間(例えば過去 1 時間)のデータを見て異常なデータを検出することで、データストリームの異常を検出できます。これは予測保全に使用され、何かが壊れる前に修理または交換する必要があることを示す兆候を探します。機械のすべてのテレメトリを送信して処理するために、インターネットの停電中に生成されたすべてのテレメトリを再接続後に送信することができます。

IoT デバイスの設計者は、インターネットの停電や場所による信号の喪失時に IoT デバイスが使用できるかどうかも考慮する必要があります。スマートサーモスタットは、停電のためにクラウドにテレメトリを送信できない場合でも、暖房を制御するための限定的な決定を行うことができるべきです。

This ferrari got bricked because someone tried to upgrade it underground where there&#39;s no cell reception

接続の喪失に対処するために、MQTT を使用する場合、デバイスとサーバーコードはメッセージの配信を確実にする責任があります。たとえば、すべてのメッセージが返信トピックで追加のメッセージによって返信されることを要求し、そうでない場合は手動でキューに入れて後で再生することができます。

コマンド

コマンドは、クラウドからデバイスに送信されるメッセージで、何かを行うように指示します。ほとんどの場合、アクチュエータを介して何らかの出力を行うことが含まれますが、デバイス自体に対する指示(再起動や追加のテレメトリの収集とコマンドへの応答としての返送など)も含まれます。

An Internet connected thermostat receiving a command to turn on the heating

サーモスタットは、クラウドから暖房をオンにするコマンドを受信することがあります。すべてのセンサーからのテレメトリデータに基づいて、クラウドサービスが暖房をオンにするべきだと判断した場合、関連するコマンドを送信します。

MQTT ブローカーにコマンドを送信する

インターネット制御のナイトライトの次のステップは、サーバーコードが光レベルに基づいて IoT デバイスにライトを制御するコマンドを送信することです。

  1. VS Code でサーバーコードを開きます

  2. client_telemetry_topic の宣言の後に次の行を追加して、コマンドを送信するトピックを定義します:

    server_command_topic = id + '/commands'
  3. handle_telemetry 関数の最後に次のコードを追加します:

    command = { 'led_on' : payload['light'] < 300 }
    print("Sending message:", command)

    client.publish(server_command_topic, json.dumps(command))

    これは、光が 300 未満の場合に LED をオンにするように指示する led_on の値を true または false に設定した JSON メッセージをコマンドトピックに送信します。

  4. 前と同じようにコードを実行します

  5. 物理的または仮想的なデバイスの光レベルを調整します。受信したメッセージと送信されたコマンドがターミナルに表示されます:

    (.venv) ➜  nightlight-server python app.py
    Message received: {'light': 0}
    Sending message: {'led_on': True}
    Message received: {'light': 400}
    Sending message: {'led_on': False}

💁 テレメトリとコマンドはそれぞれ単一のトピックで送信されています。これにより、複数のデバイスからのテレメトリが同じテレメトリトピックに表示され、複数のデバイスへのコマンドが同じコマンドトピックに表示されます。特定のデバイスにコマンドを送信したい場合は、/commands/device1/commands/device2 のように一意のデバイス ID で名前付けされた複数のトピックを使用できます。これにより、デバイスはそのデバイス専用のメッセージをリッスンできます。

💁 このコードは code-commands/server フォルダにあります。

IoT デバイスでコマンドを処理する

サーバーからコマンドが送信されるようになったので、次に IoT デバイスにコードを追加してコマンドを処理し、LED を制御します。

MQTT ブローカーからのコマンドをリッスンするために、以下の関連する手順に従ってください:

このコードが記述されて実行されると、光レベルを変更して実験します。サーバーとデバイスの出力を確認し、光レベルを変更すると LED が点灯する様子を観察します。

接続の喪失

クラウドサービスがオフラインの IoT デバイスにコマンドを送信する必要がある場合、どうすべきでしょうか?再び、答えは状況によります。

最新のコマンドが以前のコマンドを上書きする場合、以前のコマンドは無視されても問題ありません。クラウドサービスが暖房をオンにするコマンドを送信し、その後オフにするコマンドを送信する場合、オンのコマンドは無視され、再送信される必要はありません。

コマンドが順序通りに処理される必要がある場合、たとえばロボットアームを上げてからグラバーを閉じる場合、接続が回復したら順序通りに送信する必要があります。

✅ デバイスまたはサーバーコードが MQTT を介してコマンドを常に順序通りに送信および処理することをどのように確保できるでしょうか?


🚀 チャレンジ

最後の3つのレッスンの課題は、あなたの家、学校、または職場にあるできるだけ多くのIoTデバイスをリストアップし、それらがマイクロコントローラー、シングルボードコンピュータ、またはその両方の混合で構築されているかどうかを判断し、それらが使用しているセンサーとアクチュエーターについて考えることでした。

これらのデバイスについて、どのようなメッセージを送受信しているかを考えてみてください。どのようなテレメトリを送信していますか?どのようなメッセージやコマンドを受信する可能性がありますか?それらは安全だと思いますか?

講義後のクイズ

講義後のクイズ

レビューと自己学習

MQTTについてもっと知りたい場合は、MQTTのWikipediaページを読んでください。

自分でMQTTブローカーを実行し、Mosquittoを使用して、IoTデバイスとサーバーコードから接続してみてください。

💁 ヒント - デフォルトでは、Mosquittoは匿名接続(つまり、ユーザー名とパスワードなしでの接続)を許可せず、実行しているコンピュータの外部からの接続も許可しません。 これを修正するには、次の内容のmosquitto.conf設定ファイルを使用します:

listener 1883 0.0.0.0
allow_anonymous true

課題

MQTTと他の通信プロトコルを比較対照する