node.jsでMQTTを使ってみる

f:id:mechagocha:20200108210742p:plain

久しぶりの更新です。1年に1回更新してる感じですね。もう前回何やったか忘れてしまいました。読み直すと温度表示の途中で終わっていました。というわけでMQTTで温度情報を送ってみよう!みたいなテーマで進めます。

今回はnode.jsでMQTTのデータ送受信。 MQTT.jsのページになります。

www.npmjs.com

プロジェクトのフォルダーを作ってMQTT.jsのインストールです。

> mkdir mqtt_test
> cd mqtt_test
> npm init
> npm install mqtt

上記のサイトに記載されているコードをコピペします。

var mqtt = require('mqtt')
var client  = mqtt.connect('mqtt://test.mosquitto.org')
 
client.on('connect', function () {
  client.subscribe('presence', function (err) {
    if (!err) {
      client.publish('presence', 'Hello mqtt')
    }
  })
})
 
client.on('message', function (topic, message) {
  // message is Buffer
  console.log(message.toString())
  client.end()
})

sub_pub.js

実行します。

> node sub_pub.js
Hello mqtt 23
Hello mqtt

うむ何じゃ、mqtt 23って。。。 1しかメッセージ送ってないと思うが。。。 たぶんだれかが同じトピック名で送っているんでしょうね。ためしに presenceと書かれているところをtopikkuに変更しました。

Hello mqtt

大丈夫ですね。

次にコマンドラインツールを記載に従ってインストールします。

> npm install mqtt -g

で新しくインストールしたコマンドでsubscribeしてみます。

> mqtt sub -t 'topikku' -h 'test.mosquitto.org'

このコマンドでトピックの待受になるので別のターミナルを開いて次のコマンドを叩きます。

> mqtt pub -t 'topikku' -h 'test.mosquitto.org' -m 'from MQTT.js'
> mqtt pub -t 'topikku' -h 'test.mosquitto.org' -m 'from MQTT.js'      

すると最初のターミナルに

> mqtt sub -t 'topikku' -h 'test.mosquitto.org' -v
topikku from MQTT.js
topikku from MQTT.js

と表示され、大成功です。かんたんでした。 最後にsubscribeをnode.jsで書いて確認します。以下のプログラムを書きました。

var mqtt = require('mqtt')
var client  = mqtt.connect('mqtt://test.mosquitto.org')
 
client.on('connect', function () {
  client.subscribe('topikku')
})
 
client.on('message', function (topic, message) {
  // message is Buffer
  console.log(topic+' '+message.toString())
  client.end()
})

mqtt pubで送ってみてください。同じように表示されればOKです。 次はVUE.JSを使って表示させます。