MQTTを使いたい。1

先日、obniz×M5Stack×NefryBT 三つ巴 Meetup!【ESP32 開発ボード LT 祭】で、
LT 発表者の方と話した時に,「”MQTT”使えるようになるといいですよ。」って教えてもらったので、ESP32 のデバイスを弄りつつ、MQTT を触り始めてみました。そんなまとめです。

目次

MQTT ってなんだ?

この辺は参考になった。
MQTT の基本知識
【IoT 用語集】MQTT とは?
MQ Telemetry Transport

とりあえず簡単にまとめると

  • メッセージのパケットサイズが小さい
  • Pub/Sub 型でクライアント間の通信を仲介するブローカーが必要
  • トピックベースで発行、購読をすることで 1 対 1 から N 対 N まで通信できる
  • 双方向の通信もできる

調べると面白そうな内容なのがよくわかる。
関係を絵にする以下のような感じ。

とりあえず、動かしてみたい。

なので、できる限り簡単な実装をしてみる。

動作環境

  • v8.12.0
  • npm 6.4.1

今回利用していくライブラリは二つ

  • MQTT クライアントには、MQTT.js
  • MQTT ブローカーには、Mosca

適当な作業フォルダを用意して、
npm i mqtt mosca --save
Broker,Publisher,Subscriber の役割をさせる三つのファイルを作ります。

Broker

mqtt_simple_bro.js
1
2
3
const mosca = require("mosca");

const broker = new mosca.Server({ port: 1883 });

mosca のサーバーを実体化するだけ。

Publisher

mqtt_simple_pub.js
1
2
3
4
5
6
7
8
const mqtt = require("mqtt");

const client = mqtt.connect("mqtt://localhost");

client.on("connect", () => {
client.publish("msg", "message!");
client.end();
});

接続したら、msgという topic でmessabe!という文字列を送信。

Subscriber

mqtt_simple_sub.js
1
2
3
4
5
6
7
8
9
10
11
const mqtt = require("mqtt");

const client = mqtt.connect("mqtt://localhost");

client.on("connect", () => {
client.subscribe("msg");
});

client.on("message", (topic, message) => {
console.log(message.toString());
});

接続したら、msgという topic を購読するとサーバーに通知。
受信したら表示。

すごく暴力的に最小限の書き方をすると以上で OK。
3つコンソールを開いてそれぞれ実行する。
実行の順番は、

  1. node mqtt_simple_bro.js
  2. node mqtt_simple_sub.js
  3. node mqtt_simple_pub.js

以上の手順を実行するとそれぞれのコンソールの表示は以下のようになり、mqtt_simple_sub.js を起動したコンソールには、
node mqtt_simple_pub.js を実行したタイミングに
message!と出力されるはず

mqtt_simple_bro.js 実行画面

mqtt_simple_pub.js 実行画面

mqtt_simple_sub.js 実行画面

以降、node mqtt_simple_pub.jsを実行する度に、
node mqtt_simple_sub.jsを実行したコンソールで、
message!が表示される。

以上で MQTT の入口に立てた。
サンプルコードとしてあまりにも暴力的なので、次回は世にあるサンプルのようにしてみたいと思う。

ではでは。