MQTT MQTTnet.Extensions.ManagedClient

MQTTnetのパッケージ選択

MQTTnetパッケージにも、以下の2つが存在する。依存関係を確認してみるとMQTTnetにはnet6.0に対応していない(202207/20現在)、しかしMQTTnet.Extensions.ManagedClientはnet6.0に対応している。

よって、MQTTnet.Extensions.ManagedClientを追加パッケージとして選択する

  • MQTTnet.Extensions.ManagedClient
  • MQTTnet

MQTTnetパッケージの追加

プロジェクトエクスプローラーの依存関係を選択後、右クリックしNuGetパッケージ管理を選択

検索窓にMQTTと入力

OKボタンを押す

以下のように、パッケージが追加された事が確認できたら追加OK

パッケージをインストールした側も、さきほどまで「インストール」と表示されていた個所が「アンインストール」と表示されていれば追加されていると判断しOK

実装

Publisher/Subscriberともに、MQTTブローカーを扱うにはまずChannelに接続するためChannelのオプションを設定する必要がある

クライアントオプションWiki

多分わかりやすいC#の非同期処理その2 〜 asyncとawait 〜

参考

【Unity】MQTTnetでMQTT通信する

nodejs,C#,ブラウザからMQTTで通信をしてみるテスト

【MQTTnet】C#でMQTTを扱う

MQTT

M2M(Machine to machine)機械同士の通信に使われるプロトコルを指向している。

通信モデル

メッセージを送信する「Publisher」(出版者)

受け取る「Subscriber」(購読者)

メッセージを仲介する「Broker」(仲介者)

を模した「Pub/Subモデル」と表現される

Broker

mosquitto

ダウンロード先

http://mosquitto.org/download/

windows64bitの場合「mosquitto-2.0.14-install-windows-x64.exe」をクリックしダウンロード

インストール

エラーが発生したのでファイアウォールのポートを許可する。

ファイアウォール

「スタート」メニュー→「Windowsシステムツール」の「コントロール パネル」→「システムとセキュリティ」→「Windows Defender ファイアウォール」を選択

「詳細設定」を選択

「新しい規則」を選択

「ポート」を選択し、次へ

MQTTは1883番ポートを利用するのでファイアウォールなどの設定を確認し、1883番がメッセージの送受信に利用できる状態にする。

起動確認

インストール後、コマンドプロンプトで「mosquitto -v 」と入力しバージョンが出力されるか確認

メッセージ送受信テスト

サービスが起動中で動かなかった

サービスを止める

C:\Program Files\mosquitto>netstat -oan

アクティブな接続

プロトコル ローカル アドレス 外部アドレス 状態 PID
TCP 127.0.0.1:1883 0.0.0.0:0 LISTENING 7456
TCP [::1]:1883 [::]:0 LISTENING 7456

サービスを再開する

C:\Program Files\mosquitto>mosquitto_sub -h 127.0.0.1 -t "#" -v

C:\Program Files\mosquitto>
C:\Program Files\mosquitto>mosquitto_pub -h 127.0.0.1 -t arduino/d2/ -m "i"

C:\Program Files\mosquitto>
1658218377: Sending PINGRESP to auto-24BF5A45-623F-BA18-C4D2-65C0E96AE53C
1658218422: New connection from 127.0.0.1:59522 on port 1883.
1658218422: New client connected from 127.0.0.1:59522 as auto-27D9E42E-E2F1-63E7-E2A5-6BA7BC0080D8 (p2, c1, k60).
1658218422: No will message specified.
1658218422: Sending CONNACK to auto-27D9E42E-E2F1-63E7-E2A5-6BA7BC0080D8 (0, 0)
1658218422: Received PUBLISH from auto-27D9E42E-E2F1-63E7-E2A5-6BA7BC0080D8 (d0, q0, r0, m0, 'arduino/d2/', ... (1 bytes))
1658218422: Sending PUBLISH to auto-24BF5A45-623F-BA18-C4D2-65C0E96AE53C (d0, q0, r0, m0, 'arduino/d2/', ... (1 bytes))
1658218422: Received DISCONNECT from auto-27D9E42E-E2F1-63E7-E2A5-6BA7BC0080D8
1658218422: Client auto-27D9E42E-E2F1-63E7-E2A5-6BA7BC0080D8 disconnected.

参考

MQTTで始めるIoTデバイスの作り方