【初心者向け】MQTTの基本を解説|IoTに必須の通信方式

MQTTという言葉、最近よく耳にしませんか?実はこの通信プロトコルは、スマートフォンや家庭内のIoT機器、センサー類など、あらゆるデバイス同士が情報をやり取りするための大切な仕組みです。

MQTTは、「Message Queuing Telemetry Transport」の略で、専門用語に聞こえるかもしれませんが、簡単に言えば「機器同士が軽量なメッセージを交換するためのルール」です。

今回の記事では、ITの知識があまりない一般の方でも理解できるように、MQTTの基本概念や仕組み、そして実際のLED点灯デモを通してその動作を解説していきます。

MQTTとは?

MQTTは、IoT(モノのインターネット)の世界で広く利用されている通信プロトコルです。

「軽量で省電力」といった特徴があり、バッテリー駆動の小型センサーなどでも負担なく使えます。

MQTTの主要な要素
  1. Publisher(パブリッシャー):データ(メッセージ)を発信する側。新聞社がニュースを発信するようなイメージです。
  2. Subscriber(サブスクライバー):発信されたメッセージを受信する側。新聞を購読する読者に例えられます。
  3. Broker(ブローカー):発信されたメッセージを一旦集め、必要な購読者へ配信する仲介役。郵便局のような存在です。
  4. Topic(トピック):メッセージの宛先やカテゴリ。新聞の見出しのように、どの情報がどこへ届くかを決めます。

このようにMQTTは、各役割ごとに分かれてシンプルな通信モデルを採用しています。

MQTTの仕組み

MQTTの通信モデルは「Publish/Subscribe」方式です。

分かりやすく言えば、発信者はメッセージに「話題(トピック)」を付けてブローカーに送信し、受信者はあらかじめその「話題」を購読(サブスクライブ)しておくという仕組みです。

具体的な流れは以下の通りです。

  1. Publisherの動作
    発信側のデバイス(例えば、温度センサーやボタンを搭載した機器)は、取得したデータに「home/temperature」や「home/led」などのトピックを付け、MQTTブローカーへメッセージを送ります。

  2. Brokerの役割
    ブローカーは受け取ったメッセージのトピックを確認し、同じトピックを購読しているすべてのデバイスへ、そのメッセージを転送します。

    MQTT通信の流れ
    1. Publisherがメッセージを送信
    2. Brokerがメッセージを受信・分類
    3. Subscriberにメッセージを配信
  3. Subscriberの動作
    受信側のデバイスは、あらかじめ興味のあるトピックをブローカーに登録しておき、そこに届いたメッセージに応じた動作(例えばLEDを点灯させる)を実行します。

この仕組みにより、1対1の直接通信ではなく、一括して多数のデバイスにデータを配信することが可能となり、特にIoT環境においてその効率性が大いに発揮されます。

なぜMQTTがIoTに使われるのか?

MQTTは、軽量であるためネットワークの負荷を抑え、バッテリー駆動の機器でも長時間稼働が可能です。

主な理由は以下の通りです。

  • 軽量で省電力
    余分な情報を省いたシンプルなパケット構造により、通信に必要なデータ量が非常に少なく、電力消費を低減します。

  • 一斉配信が容易
    1つのメッセージを複数のデバイスに同時に配信できるため、例えば家庭内の複数のスマートライトを同時制御するのにも適しています。

LED点灯デモで理解するMQTT

ここでは、実際にMQTTを用いた簡単なLED点灯デモを紹介します。たとえば、Raspberry Piを使って、1台目のPiにボタン、2台目のPiにLEDを接続し、MQTT経由でLEDのON/OFFを行います。

デモの流れ

  1. LED側の準備(Subscriber)
    2台目のRaspberry Piでは、MQTTクライアントを起動し、ブローカーに接続します。

    ここでは「home/led」というトピックを購読する設定を行い、メッセージが届いたらLEDを点灯・消灯するようにプログラムします。
  2. ボタン操作によるメッセージ送信(Publisher)
    1台目のRaspberry Piに接続したボタンを押すと、MQTTクライアントが「home/led」トピックに「ON」または「OFF」のメッセージを送信します。

    ボタン操作の流れ
    1. ボタンが押されたら「ON」メッセージを生成
    2. MQTTブローカーへメッセージを送信
  3. メッセージの受信とLEDの反応
    ブローカーは、受信した「home/led」トピックのメッセージを購読中の2台目に転送します。
    2台目のRaspberry Piはメッセージを受け取り、内容に応じてLEDを点灯または消灯します。

    まるで郵便局が新聞を配達するかのように、各デバイスに情報が届きます!

このように、MQTTを利用すれば、離れた場所にあるデバイス同士でも簡単に通信が行え、複数の機器を一斉に制御することが可能です。

コーディング

コードと必要な事前準備は下記に記載してあります。
https://github.com/buono/mqtt_demo

import paho.mqtt.client as mqtt
import RPi.GPIO as GPIO

# ------------------------------
# GPIOの設定
# ------------------------------
LED_PIN = 18  # 使用するGPIOピン番号(必要に応じて変更)
GPIO.setmode(GPIO.BCM)        # BCM番号でピンを指定する
GPIO.setup(LED_PIN, GPIO.OUT) # LED_PINを出力モードに設定

# ------------------------------
# MQTTブローカー情報
# ------------------------------
# HiveMQのパブリックブローカーではなく、ローカルのMosquittoを利用
broker = "localhost"  # Mosquittoが同一Raspberry Pi上で動いている場合は"localhost"
port = 1883
topic = "home/led"

# ------------------------------
# コールバック関数
# ------------------------------
def on_connect(client, userdata, flags, rc):
    """
    MQTTブローカーに接続した際に呼び出されるコールバック関数。
    接続結果を表示し、指定したトピックをサブスクライブする。
    """
    print("Connected with result code " + str(rc))
    client.subscribe(topic)

def on_message(client, userdata, msg):
    """
    サブスクライブしているトピックにメッセージが届いた際に呼び出されるコールバック関数。
    メッセージが"ON"ならLEDを点灯、"OFF"ならLEDを消灯する。
    """
    message = msg.payload.decode()  # バイナリデータを文字列に変換
    print(f"Received message: {message} on topic: {msg.topic}")
    if message == "ON":
        GPIO.output(LED_PIN, GPIO.HIGH)  # LEDを点灯
        print("LED ON")
    elif message == "OFF":
        GPIO.output(LED_PIN, GPIO.LOW)   # LEDを消灯
        print("LED OFF")

# ------------------------------
# MQTTクライアントの設定と接続開始
# ------------------------------
client = mqtt.Client("RaspberryPiClient")  # 任意のクライアントID
client.on_connect = on_connect
client.on_message = on_message

# ローカルのMosquittoブローカーに接続
client.connect(broker, port, 60)
client.loop_forever()

まとめ

今回は、MQTTの基本概念からその仕組み、そして実際のLED点灯デモによる動作例まで、初心者にも分かりやすい形で解説しました。

MQTTは、Publisher、Subscriber、Broker、Topicというシンプルな構成で成り立っており、新聞や郵便のような仕組みで情報を配信します。

また、MQTTは軽量で省電力なため、IoT機器に最適な通信手法として急速に普及しています。今回のLED点灯デモのように、実際の機器で動作させることで、そのメリットや実用性を実感していただけると思います。

MQTTの仕組みを理解しておくことで、今後新しいIoT製品やサービスに出会ったときも「これはMQTTを利用しているんだな」と納得できるはずです。ぜひ今回の内容を参考に、MQTTの世界に一歩踏み出してみてください!