IoT を使ってみる(その7:MQTTクライアント paho編)

| 2 min read
Author: shuichi-takatsu shuichi-takatsuの画像

前回記事でMQTTブローカー「Mosquitto」を紹介しました。
今回はMQTTクライアント「paho」について紹介したいと思います。

paho とは

#

pahoはPython製の通信ライブラリです。
2022/10/14の段階でMQTT v5.0、MQTT v3.1.1、および v3.1 をサポートしています。
Python 2.7系、3.x系で使用できます。

paho インストール

#

使い方は非常に簡単です。
pip または conda でインストールします。
condaの場合、チャンネルに「conda-forge」を指定します。

pipでのインストール

pip install paho-mqtt

conda でのインストール

conda install -c conda-forge paho-mqtt

パブリッシャー/サブスクライバーのサンプル実装

#

Pythonでパブリッシャー/サブスクライバーのクライアントプログラムを作成してみましょう。

サブスクライバー:

import paho.mqtt.client as mqtt

# 定数定義
host = '127.0.0.1'
port = 1883
topic = 'topic/data'

# 接続
def on_connect(client, userdata, flags, rc):
    # 戻り値チェック
    print("Connected with result code " + str(rc))
    # サブスクライブ
    client.subscribe(topic)

# 受信
def on_message(client, userdata, msg):
    print('topic:[' + msg.topic + '] payload:[' + str(msg.payload) + ']')

if __name__ == '__main__':
    # プロトコルを v3.1.1 を指定
    client = mqtt.Client(protocol=mqtt.MQTTv311)
    # ハンドラー設定
    client.on_connect = on_connect
    client.on_message = on_message
    # 接続
    client.connect(host, port=port, keepalive=60)
    # 受信ループ
    client.loop_forever()

パブリッシャー:

import paho.mqtt.client as mqtt

# 定数定義
host = '127.0.0.1'
port = 1883
topic = 'topic/data'
payload = 'Hello MQTT!'

# プロトコルを v3.1.1 を指定
client = mqtt.Client(protocol=mqtt.MQTTv311)
# 接続
client.connect(host, port=port, keepalive=60)
# パブリッシュ
client.publish(topic, payload)
# 切断
client.disconnect()

定数として、以下を指定しています。
皆さんの環境にあわせて変更してください。

  • host: MQTTブローカーが稼働しているサーバのIPアドレスを指定
  • port: MQTTブローカーが稼働しているサーバのポート番号を指定
  • topic: パブリッシュ/サブスクライブするトピック名を指定
  • payload: メッセージを指定(パブリッシャーのみ)

実行

#

ローカルにMQTTブローカーがインストールされており、ポートが1883に設定されている前提で、上記のプログラムを実行させます。
サブスクライバー・パブリッシャーを実行させると、以下のようにメッセージがコンソールに表示されます。

まとめ

#

MQTTクライアント「paho」を用いて、サブスクライバーとパブリッシャーの実装を行い、MQTTメッセージ通信を試すことができました。
pahoは導入が非常に簡単なので、MQTT環境構築後の通信チェックに有用だと思います。

IoTに関するチュートリアルや実践テクニックをまとめています。

IoT活用の参考になれば幸いです。

豆蔵デベロッパーサイト - 先週のアクセスランキング
  1. 基本から理解するJWTとJWT認証の仕組み(2022-12-08)
  2. 直感が理性に大反抗!「モンティ・ホール問題」(2022-07-04)
  3. Nuxt3入門(第4回) - Nuxtのルーティングを理解する(2022-10-09)
  4. Nuxt3入門(第8回) - Nuxt3のuseStateでコンポーネント間で状態を共有する(2022-10-28)
  5. Podman Desktopがv1.0になったのでwindows版を試してみたところ、気付いたらv1.1に上がるくらいに機能豊富だった話(2023-06-09)
  6. Nuxt3入門(第1回) - Nuxtがサポートするレンダリングモードを理解する(2022-09-25)
  7. VS Code で .NET MAUI の開発環境を構築する(macOS/iOS)(2023-08-14)
  8. Pytestを使ってみる(その2:VSCode拡張機能編)(2023-03-05)
  9. GitHub Actions - 構成変数(環境変数)が外部設定できるようになったので用途を整理する(2023-01-16)
  10. 統計学で避けて通れない自由度の話(2022-06-20)