見出し画像

PythonとMosquittoによるMQTT通信の実装:辞書データや画像データの送信

1.MQTT通信とは

MQTT(Message Queuing Telemetry Transport)は、軽量なメッセージングプロトコルで、特に低帯域幅や不安定なネットワーク環境での通信に適しています。

1.1 MQTT通信のクライアント

 MQTT通信ではクライアントとサーバーが存在します。クライアントにはパブリッシャ(Publisher)とサブスクライバ(Subscriber)が存在します。パブリッシャとサブスクライバの機能は以下になります。

  • パブリッシャ:メッセージを送信するクライアントです。パブリッシャは指定されたトピック(Topic)にメッセージをパブリッシュ(Publish)します。

  • サブスクライバ:メッセージを受信するクライアントです。サブスクライバは特定のトピック(Topic)にサブスクライブ(Subscribe)し、そのトピックに関連するメッセージを受け取ります。

ここでのトピックとは、メッセージの配信先を識別するための文字列のことを言います。

1.2 MQTT通信のサーバー

 サーバーとしてブローカー(Broker)が存在します。パブリッシャとサブスクライバの間でメッセージを受け取り、適切なサブスクライバに配信する役割を果たします。ブローカーは中央のメッセージングサーバとして機能し、MQTTクライアントはブローカーに接続して通信を行います。

1.3 Quality of Service: QoS

 MQTTでは、メッセージの品質保証をQoSレベルとして指定することができます。以下の3つのQoSレベルがあります。

  • QoS 0(最大一度配信): メッセージは少ないネットワークオーバーヘッドで送信されますが、メッセージの到達性や順序は保証されません。

  • QoS 1(少なくとも一度配信): メッセージの到達性は確保され、重複配信が防止されますが、一度の送信による通信オーバーヘッドが発生します。

  • QoS 2 (確実に一度配信): メッセージの到達性と順序が確保されますが、より高い通信オーバーヘッドが発生します。

1.4 MQTT通信のフロー

MQTT通信のフローは以下になります。

  1. クライアントはMQTTブローカーに接続します。

  2. パブリッシャはトピックを指定してメッセージをパブリッシュします。メッセージはブローカーに送信されます。

  3. サブスクライバはトピックを指定してメッセージをサブスクライブします。ブローカーはメッセージをサブスクライバに配信します。

  4. ブローカーはQoSレベルに従ってメッセージの品質保証を処理します。メッセージの到達性や順序が重要な場合、適切なQoSレベルを選択する必要があります。

1.5 MQTT通信の特徴

 MQTT通信の特徴は以下になります。

  1. 軽量で効率的:MQTTはシンプルなプロトコルであり、少ないネットワークオーバーヘッドで動作します。低帯域幅や制約のあるネットワーク環境でも効率的に動作します。

  2. パブサブモデル:MQTTはパブリッシャとサブスクライバのモデルを採用しており、メッセージの送信元と受信先を柔軟に設定できます。

  3. 柔軟なトピック階層構造:MQTTのトピックは階層構造を持つことができ、複雑なメッセージングパターンをサポートします。

  4. QoSレベル:MQTTでは、メッセージの品質保証をQoSレベルで指定できます。適切なQoSレベルを選択することで、メッセージの到達性や順序を制御できます。

  5. MQTTは、さまざまなプラットフォームやプログラミング言語で利用可能

1.6 MQTTクライアントの利用

 MQTTクライアントは、さまざまなプログラミング言語で利用可能なライブラリとして提供されています。各プログラミング言語には、MQTT通信を簡単に実装するためのクライアントライブラリやSDKが存在します。これらのライブラリを使用することで、開発者は自分のアプリケーションにMQTT通信機能を追加できます。
 例えば、Python言語ではPaho MQTTというライブラリが一般的に使用されます。

1.7 MQTTブローカーの利用

 オープンソースのMQTTブローカーの代表的なものにEclipse Foundationが提供するMosquittoがあります。Mosquittoは、軽量で高性能なMQTTブローカーとして広く利用されており、クロスプラットフォーム(Windows、Linux、macOSなど)で動作します。以下にMosquittoのホームページを示します。

2.MQTTブローカー Mosquittoの構築

2.1 Mosquittoのインストール

Linux(Ubuntu)におけるMosquittoの構築方法をここでは示します。
以下のコマンドでMosquittoのブローカーをインストールします。

$ sudo apt install mosquitto

また、今回はブローカーの動作確認のためにMosquittoクライアントもインストールしておきます。

$ sudo apt install mosquitto-clients

2.2 MQTT通信によるメッセージの送受信動作確認

それでは動作確認をしていきます。ブローカーをインストールしたマシンにて下記コマンドでサブスクライバを起動します。

$ mosquitto_sub -h localhost -t test

ここで-hの引数にはブローカーのIPアドレスを指定し、-tの引数にはトピック名を指定します。今回はブローカーが起動されたマシンでサブスクライバを起動するので、-hの引数にはlocalhostを指定しています。

次に、パブリッシャでMQTT通信によるメッセージの送受信動作を確認します。ブローカーを起動したマシンにて新たにターミナル画面を起動し、下記のコマンドでパブリッシュしていきたいと思います。

$ mosquitto_pub -h localhost -t test -m "test publish"

上記のコマンドを実行後、再度サブスクライバを実行したターミナル画面を見てみてください。「test publish」と表示されていると思います。
下図はWSL(Windows Subsystem for Linux)でパブリッシュした際の実行前と実行後のコマンド画面の様子です。

パブリッシュ実行前


パブリッシュ実行後

Windowsでもmosquittoブローカーを起動することは可能ですが、本記事では省略いたします。以下の記事が参考になりますので、ご覧ください。

3.PythonによるMQTT通信:辞書型データの送受信

それではPythonによるMQTT通信を行っていきたいと思います。まずは辞書型のデータをパブリッシュ、サブスクライブしていきたいと思います。

3.1 paho-mqttのインストール

まず、PythonでMQTT通信を行うライブラリをインストールしていきます。下記のコマンドでMQTT通信を行うライブラリをインストールします。

$ pip install paho-mqtt

3.2 パブリッシャのPythonコード

下記のPythonコードでパブリッシュ可能です。ここでは一般的なコードではなく、クラス化して示してます。

ここから先は

8,155字 / 1画像

¥ 300

この記事が気に入ったらサポートをしてみませんか?