C# (.net) で使える MQTT クライアント (Paho M2Mqtt)

2018年11月21日水曜日

C# M2Mqtt MQTT Paho

t f B! P L

enter image description here

C# (.net) で使える MQTT クライアント

はじめに

C# で使える MQTT クライアントを探していて、
eclipse プロジェクトより 出ている “Paho M2Mqtt” というライブラリが
シンプルで使いやすかった為、そのメモです。

“Paho M2Mqtt” 以下の環境をサポートしている為、
IoT機器でも使用可能になっています。

.NET Framework、.NET Compact Framewoprk、
.NET Microframework 4.2/4.3、Mono、
Windows 8.1, Windows Phone 8.1のWinRT

セットアップ

"Paho M2Mqtt"ライブラリは、NuGet からダウンロードします。
まず最初に Visual Studio で新規の「コンソールプロジェクト」を作成します。

Visual Studioプロジェクト作成

NuGetの管理コンソールを開いて、「M2Mqtt」で検索しインストールを行います。

enter image description here

Subscriber(サブスクライバー)のサンプル コード

Publisher (パブリッシャー) からメッセージが送信されると、
コンソールにそのメッセージを表示するサンプルです。

static void Main(string[] args) {

    // HIVE MQ の brokerを指定して、クライアントを作成
    MqttClient client = new MqttClient("broker.mqttdashboard.com");

    // メッセージを受信した際に発生するイベント
    client.MqttMsgPublishReceived += (sender, e) => {
        Console.WriteLine(Encoding.UTF8.GetString(e.Message));
    };

    string clientId = Guid.NewGuid().ToString();
    client.Connect(clientId);

    // 受信するメッセージのトピック、QoSレベルを指定して、メッセージ受信待ち状態に入る
    client.Subscribe(new string[] { "/my/mqtt/sample/testdata" }, new byte[] { 2 });

    while (true) {
        System.Threading.Thread.Sleep(1000);
    }
}

動作確認

今回は、ブラウザだけで動作するMQTT クライアントの、HIVE MQを使用して
確認を行っていきたいと思います。
※本来はメッセージの中継を行う Broker というサーバを立てる必要がありますが、
今回は、ライブラリの紹介がメインなので、HIVE MQ の Broker サーバを使用します。

1. まず↑で作成した「コンソールプロジェクト」を Visual Studio で起動します

enter image description here

2. 以下のHIVE MQのサイトにアクセスします。
http://www.hivemq.com/demos/websocket-client/

3. サイトが表示されたら「Connect」ボタンをクリックします。

enter image description here

4. Publish の枠に↓のイメージの通り入力して、Publish ボタンをクリックします。

項目 入力値
Topic /my/mqtt/sample/testdata
Qos 1
Message はろー!MQTT

enter image description here

5. コンソールに「はろー!MQTT」が表示されば成功です。
enter image description here

Publisher (パブリッシャー)のサンプル コード

今度は、C#のコードからメッセージを送信するサンプルです。

static void Main(string[] args) {

    // HIVE MQ の brokerを指定して、クライアントを作成
    MqttClient client = new MqttClient("broker.mqttdashboard.com");

    string clientId = Guid.NewGuid().ToString();
    client.Connect(clientId);

	// メッセージを送信
    client.Publish("/my/mqtt/sample/testdata", Encoding.UTF8.GetBytes("メッセージ飛ばしてみた!!"), 0, false);
}

動作確認

C#のコードから送信したメッセージが、
HIVE MQの Subscriber(サブスクライバー)に表示されるか確認します。

1. HIVE MQの [Add New Topic Subscription]をクリックします。

enter image description here

2. ↓の内容を入力し、[Add New Topic Subscription]をクリックします。

項目 入力値
Topic /my/mqtt/sample/testdata
Qos 0

enter image description here

3. 「コンソールプロジェクト」を Visual Studio で起動します

enter image description here

4. Messages エリアに、C#のコードから送信されたメッセージが表示されれば成功です

enter image description here

おわりに

<関連記事>

HTTP REST APIでAzure IoT Hubにメッセージを送信する (C#)

Azure IoT Hubに、HTTP REST APIを使って、メッセージを送信する方法を解説しています。
Device SDKがインストールできない環境で、役に立つ情報です。

スポンサーリンク

QooQ