2022年3月1日こんにちは、MSKです。IoT機器の開発をやっていると最近はMQTTを通信プロトコルに使いたいと言われることが多々あります。今日はPythonでMQTTを使っていきながら、どんなものかを簡単に解説したいと思います。スポンサーリンクMQTTについての基礎知識MQTTの概要MQTTはTCP/IPの上に構築される軽量なデータ通信のための通信プロトコルになります。Transport」の頭文字をとったものになっています。Publish/Subscribeメッセージ型のプロトコルになっています。シンプルかつ軽量なプロトコル仕様になっているという説明が多いですが、組み込みエンジニアとしてはシンプルかと言われるとそうは思わない部分も多々あるプロトコルです。ある程度有名なプロトコルになりますので、いろいろな言語でライブラリが公開されていて、シーケンスやパケットの中身を知らなくても使えるようになっています。(僕が開発を行った環境では、ライブラリが用意されておらず仕様書を読みこんでMQTTライブラリを自作しましたが・・・)MQTTはBroker、Subscriber、Publisherで構成されます。Brokerメッセージを中継するサーバーの役割を担うのがBrokerになります。PC上で試す場合にはいくつか有名なソフトがあります。以下が有名なソフトです。MosquittoActiveMQRabbitMQVerneMQSubscriberメッセージを受信する側です。SubscriberはBrokerに対して、あらかじめ欲しいメッセージをTopicというものにより登録をします。これをSubscribeと言います。Topicは「/」により階層構造を持っていて、次のような記述をします。hoge/fuga/piyohoge/fuga/hogehogehoge/fugaguga/piyoTopic登録時にワイルドカードというものを使って、一度に複数のTopicを登録することもできます。Publisherメッセージを送信する側です。PublisherからBrokerに対して、またBrokerからSubscriberに対して、メッセージを送ることをPublishと言います。準備Pythonの準備Pythonのインストールから最初のプログラミングまでは、次の記事を参考にしてください。Pythonをインストールして使ってみよう!今回はPythonのインストールからIDLEでPythonを実行するところまで解説します。Pythonは機械学習のデファクトスタンダードになっているなど、人気のプログラミング言語ですので、インストールをしてPythonを使うための第一歩を踏み出しましょう!...プロジェクトを入れるフォルダを作成して、仮想環境を作ります。venv仮想環境を立ち上げて、必要なライブラリをインストールします。/venv/bin/activatePythonでMQTTを扱うためのライブラリはpaho-mqttというものになります。paho-mqttをインストールします。paho-mqttBrokerを準備する今回はmosquittoが簡単に使えそうなBrokerだったので、mosquiitoをインストールしたいと思います。macであればhomebrewで簡単にインストールできます。mosquittoインストール時にsubscriber用とpublisher用のクライアントもインストールされています。mosquitto本体は/usr/local/opt/mosquitto/sbinにインストールされています。subscriberやpublisher用のソフトは/usr/local/opt/mosquitto/binにインストールされています。ターミナルでMQTTを試してみるBrokerを起動します。/usr/local/opt/mosquitto/sbin/mosquitto次にSubscriberを準備します。登録するtopicはtopic/01/とします。topic/01/-hでホスト名を、-tで登録するtopicを設定します。最後にPublisherを立ち上げて、メッセージを送ります。"Hello"-h、-tはSubscriberと同じ意味ですが、-mは送信するメッセージを設定します。コマンドを叩くとSubscriber側でHelloというメッセージを受け取ることができると思います。topicを変えるとSubscriber側にメッセージが届かないことも確認できると思います。※–helpでコマンドの意味を確認することができます。--helpPythonでMQTTをコーディングターミナルで確認できたので、次はPythonのプログラムを作って確認をしていきたいと思います。※paho-mqttの使い方はここにあります。KEEP_ALIVE)#待ち受けclient.loop_forever()mqtt.Client()でmqttクライアントの実体を作成します。on_connect、on_disconnect、on_messageとそれぞれ、Brokerとの接続、切断、BrokerからのPublish受信の処理のコールバックを受け取るために登録を行います。alive時間(秒)を設定して接続を試みます。その後はBrokerからのメッセージを待ちます。コールバックのon_messageで大切なのは3番目の引数msgで次のメンバを持ちます。client.publish(TOPIC,"Hello!")client.disconnect()基本的にはSubscriberのプログラムと同じですが、Publishが完了した時のコールバックと接続後のpublishが違います。publishは引数にtopicとメッセージを設定します。メッセージをPublishできたら、on_publishが呼ばれます。動作確認brokerを立ち上げます。/usr/local/opt/mosquitto/sbin/mosquittoSubscriber、Publisherを立ち上げます。pub.pyPublisherを立ち上げるとSubscriber側のログに送信したメッセージとtopicが表示されると思います。まとめPythonでMQTTを使ってみました。MQTTはTCP/IPなどの上に構築される軽量な通信プロトコルです。MQTTに登場するのはメッセージを中継するBroker、メッセージを待ち受けるSubscriber、メッセージを送信するPublisherです。今回は有名なBrokerであるmosquittoをインストールして使っています。Pythonではpaho-mqttというものを使って簡単にMQTTの通信を試すことができます。MQTTを使って操作できる市販のロボットやドローンなどもあるようですので、試してみたいかなと思っています。最後までご覧いただき、ありがとうございます。以上、「PythonでMQTTを使ってみよう!」でした。MEMSK九州在住の組み込み系エンジニアです。2児の父親でもあります。数学やプログラミングが趣味です。最近RustとReact、結び目理論と曲面結び目理論にはまっています。MSKもちのき研究所PythonでTCP/IP通信を使おう!PythonでUDP通信をやってみよう!組み込み系エンジニアMSKソフトウェア関連の技術が好きな30代男性です。最近は、Webアプリ開発にチャレンジ中。