Raspberry PiでMQTTサーバーをホストします

MQTT(メッセージキューイングテレメトリートランスポート)は、デバイス間の信頼性の高い効率的な通信のために、IoT(インターネット)アプリケーションで一般的に使用される軽量メッセージングプロトコルです。 Raspberry PIでMQTTサーバーをホストすると、IoTプロジェクト用のローカルメッセージングハブを作成できます。このガイドでは、Raspberry PiでMQTTサーバーのセットアップと実行をお勧めします。


あなたが必要とするもの

  1. Raspberry Pi (GPIOサポートを備えたモデル、例えばPI 3、PI 4)
  2. microSDカード (少なくとも8GB、クラス10以上)
  3. 電源 (5V、PI 3; 5Vの最小2.5A、PI 4の場合は3A)
  4. Raspberry Pi OS (ライトまたはデスクトップバージョン)
  5. インターネット接続
  6. MQTTクライアント (例:ESP8266、ESP32、またはMQTTソフトウェアツール)

ステップ1:Raspberry Piを更新します

  1. Raspberry Piが最新であることを確認してください:
    sudo apt update && sudo apt upgrade -y
    

ステップ2:Mosquitto MQTTブローカーをインストールします

蚊は軽量で広く使用されているMQTTブローカーです。

  1. 蚊とそのクライアントツールをインストールします。

    sudo apt install -y mosquitto mosquitto-clients
    
  2. 蚊がブーツから始めることを可能にします:

    sudo systemctl enable mosquitto
    
  3. 蚊のサービスを開始します:

    sudo systemctl start mosquitto
    

ステップ3:MQTTブローカーをテストします

  1. Raspberry Piに2つの端末ウィンドウまたはSSHセッションを開きます。

  2. 最初の端末では、テストトピックを購読します。

    mosquitto_sub -h localhost -t test/topic
    
  3. 2番目の端末で、テストメッセージを公開します。

    mosquitto_pub -h localhost -t test/topic -m "Hello, MQTT!"
    
  4. 「こんにちは、MQTT!」というメッセージが表示されます。最初の端末。


ステップ4:外部接続用に蚊を構成します

  1. 蚊の構成ファイルを開きます。

    sudo nano /etc/mosquitto/mosquitto.conf
    
  2. 次の行を追加して、外部接続を許可します。

    listener 1883
    allow_anonymous true
    

    注記: 生産環境の場合は、匿名アクセスを許可する代わりにユーザー認証を設定します。

  3. 変更を適用するために蚊のサービスを再起動します。

    sudo systemctl restart mosquitto
    
  4. MQTTクライアントツール(MQTT.FXまたはMQTTエクスプローラーなど)を使用して、同じネットワーク上の別のデバイスから接続をテストします。


ステップ5:MQTTブローカーを保護する(オプション)

  1. パスワード認証を有効にする:

    sudo mosquitto_passwd -c /etc/mosquitto/passwd <username>
    
    • ユーザーのパスワードを入力して確認します。
  2. 蚊の構成ファイルを更新して、パスワードファイルを使用します。

    allow_anonymous false
    password_file /etc/mosquitto/passwd
    
  3. 蚊のサービスを再起動します:

    sudo systemctl restart mosquitto
    
  4. ユーザー名とパスワードを使用して接続をテストします。


ステップ6:IoTデバイスをMQTTブローカーに接続します

  1. ESP8266/ESP32の場合: Arduino IDEを使用して、IoTデバイスをプログラムして、Raspberry PI MQTTブローカーのトピックを公開/購読します。

    #include <ESP8266WiFi.h>
    #include <PubSubClient.h>
    
    const char* ssid = "YourSSID";
    const char* password = "YourPassword";
    const char* mqtt_server = "<raspberry-pi-ip>";
    
    WiFiClient espClient;
    PubSubClient client(espClient);
    
    void setup() {
      WiFi.begin(ssid, password);
      client.setServer(mqtt_server, 1883);
    }
    
    void loop() {
      if (!client.connected()) {
        client.connect("ESPClient");
      }
      client.loop();
      client.publish("test/topic", "Hello from ESP8266!");
      delay(1000);
    }
    
  2. ソフトウェアクライアントの場合: MQTT.FX、MQTTエクスプローラー、またはPythonを使用します paho-mqtt 図書館。

    import paho.mqtt.client as mqtt
    
    def on_connect(client, userdata, flags, rc):
        print("Connected with result code "+str(rc))
        client.subscribe("test/topic")
    
    def on_message(client, userdata, msg):
        print(msg.topic+" "+str(msg.payload))
    
    client = mqtt.Client()
    client.on_connect = on_connect
    client.on_message = on_message
    
    client.connect("<raspberry-pi-ip>", 1883, 60)
    
    client.loop_forever()
    

トラブルシューティング

  1. MQTTブローカーに接続できません:

    • 蚊が走っていることを確認してください: sudo systemctl status mosquitto
    • Raspberry Piのファイアウォール設定を確認してください。
  2. 認証エラー:

    • 蚊の構成とクライアントのセットアップでユーザー名とパスワードを確認します。
  3. 接続拒否:

    • デバイスがRaspberry Piと同じネットワーク上にあることを確認してください。
    • ポート1883が開いていることを確認してください。

MQTTのアプリケーション

  1. IoTデバイス通信
  2. ホームオートメーションシステム
  3. リアルタイムデータストリーミング
  4. リモート監視と制御

結論

Raspberry PiでMQTTサーバーをホストすることは、IoTプロジェクトに軽量で信頼できる通信を可能にする優れた方法です。このガイドに従うことにより、Mosquitto MQTTブローカーをセットアップして保護し、IoTデバイスを接続し、強力なアプリケーションの構築を開始できます。さまざまな構成を試して、MQTTの可能性を最大限に引き出すことができます!

コメントを残す

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.