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

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

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

Contents

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. Nuxt3入門(第1回) - Nuxtがサポートするレンダリングモードを理解する (2022-09-25)
  2. 自然言語処理初心者が「GPT2-japanese」で遊んでみた (2022-07-08)
  3. GitHub Codespaces を使いはじめる (2022-05-18)
  4. Jest再入門 - 関数・モジュールモック編 (2022-07-03)
  5. ORマッパーのTypeORMをTypeScriptで使う (2022-07-27)
  6. Nuxt3入門(第4回) - Nuxtのルーティングを理解する (2022-10-09)
  7. Nuxt3入門(第3回) - ユニバーサルフェッチでデータを取得する (2022-10-06)
  8. 第1回 OpenAPI Generator を使ったコード生成 (2022-06-04)
  9. Nuxt3入門(第8回) - Nuxt3のuseStateでコンポーネント間で状態を共有する (2022-10-28)
  10. Nuxt3入門(第2回) - 簡単なNuxtアプリケーションを作成する (2022-10-02)