HEROKUを使えば、サクッとMQTTサーバができるらしいが、色々自前でやりたいので調べてみたら、「mosca」ってのを使えば、Node.jsでサーバ作れるし、「mqtt.js」を使えば、クライアント側もできるらしいので、早速やってみた。
Node.jsはすごいねぇ。
Brokerサーバの構築
- 1.moscaのインストール
-
npm install mosca
- 2.基本的なスクリプト
-
var mosca = require('mosca'); var server = new mosca.Server({ port: <サーバのポート番号>, }); /*準備完了*/ server.on('ready', function(){ console.log('Server is ready.'); }); /*クライアントが接続された*/ server.on('clientConnected', function(client){ console.log('broker.on.connected.', 'client:', client.id); }); /*クライアントが切断されrた*/ server.on('clientDisconnected', function(client){ console.log('broker.on.disconnected.', 'client:', client.id); }); /*Subscriberからデータの配信要望が来た*/ server.on('subscribed', function(topic, client){ console.log('broker.on.subscribed.', 'client:', client.id, 'topic:', topic); }); /*Subscriberからデータの配信停止要望が来た*/ server.on('unsubscribed', function(topic, client){ console.log('broker.on.unsubscribed.', 'client:', client.id); }); /*Publisherからデータが送信された*/ server.on('published', function(packet, client){ if (/\/new\//.test(packet.topic)){ return; } if (/\/disconnect\//.test(packet.topic)){ return; } console.log('broker.on.published.', 'client:', client.id); }); /*MQTTサーバをHTTP サーバに結びつける*/ var http = require('http'); var httpServer = http.createServer(); server.attachHttpServer(httpServer); httpServer.listen(<サーバのポート番号>);
Node.jsでのクライアント機能の実装
- 1. mqtt.jsのインストール
-
npm install mqtt
※ブラウザから実行する場合は埋め込み利用も可
<script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
- 2. 初期化スクリプト
-
const mqtt = require('mqtt'); var client = mqtt.connect({ host: '
', port: , clientId: '<自分のID>' //任意(無しの場合は自動設定) }); /*Brokerサーバに接続*/ client.on('connect', function(){ console.log('publisher.connected.'); });
データの送信(Publisher)
/*データ配信*/ client.publish('<任意のTOPIC>',<送信データ>);
データの受信(Subscriber)
/*購読希望リクエスト*/ client.subscribe('<購読希望TOPIC>'); /*データ受信*/ client.on("message", (topic, payload) => { console.log(topic); var message = payload.toString('utf-8'); //var message = String.fromCharCode.apply(null, payload); console.log(message); });
参考サイト
無事MQTTサーバができたので、micro:bitとHalocodeを双方向で通信させてみた。