【ラズパイ x IoTネットワーク】MQTTをローカルネットワーク間で通信してみる・その2 〜 ブローカーの構築と動作確認
※ 当ページには【広告/PR】を含む場合があります。
2020/09/11
自宅でできるMQTTネットワークの構築
開発環境 vs. 本番環境
Moscaを使う
mosquitto
Mosca
インストール
Mosca
Mosca2.0.0+ targets node v6, v4 and v0.12
$ npm install mosca --save
ブローカーの実装
broker.js
const mosca = require('mosca');
const server = new mosca.Server({
port: 1883,
});
server.on('ready', function() {
console.log('Server is ready.');
});
server.on('clientConnected', function(client) {
console.log('Client connected.', 'Client ID:', client.id);
});
server.on('clientDisconnected', function(client) {
console.log('Client disconnected.', 'Client ID:', client.id);
});
server.on('subscribed', function(topic, client) {
console.log('Client subscribed.', 'Client ID:', client.id, ', TOPIC:', topic);
});
server.on('unsubscribed', function(topic, client) {
console.log('Client unsubscribed.', 'Client ID:', client.id);
});
server.on('published', function(packet, client) {
if (/\/new\//.test(packet.topic) || /\/disconnect\//.test(packet.topic)){
return;
}
console.log('Client published.', 'C ID:', client.id);
});
const http = require('http');
const httpServer = http.createServer();
server.attachHttpServer(httpServer);
const hostname = '192.168.0.200'; //👈サーバー機のIPアドレス
const port = 3000;
httpServer.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
new mosca.Server()
server.on
ready:
ブローカーが立ち上がったときの処理
clientConnected:
クライアントが接続した場合に処理
clientDisconnected:
クライアントが切断された時に処理
subscribed:
サブスクライバーが購読をリクエストした時の処理
第二引数にとる関数には、トピックを含める
unsubscribed:
サブスクライバーが購読を取り止める時に処理
第二引数にとる関数には、トピックを含める
published:
パブリッシャーがメッセージをブローカーに送信した時の処理
第二引数にとる関数には、メッセージパケットを含める
この場合トピックはpacket.topicから取り出し可能
サーバーの起動
broker.js
const http = require('http');
const httpServer = http.createServer();
server.attachHttpServer(httpServer);
const hostname = '192.168.0.200'; //👈サーバー機のIPアドレス
const port = 3000;
httpServer.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
server
attachHttpServer()
httpServer
192.168.0.200
httpServer.listen()
$ node broker.js
Server running at http://192.168.0.200:3000/
Server is ready.
パブリッシャーとサブスクライバーの実装
サブスクライバー
subscrive.js
const mqtt = require('mqtt');
const client = mqtt.connect('mqtt://192.168.0.200:3000');
const topic = 'hoge/piyo/fuga';
client.on('connect', function() {
console.log('subscriber connected.');
});
client.subscribe(topic, function(err, granted) {
console.log('subscriber subscribed.');
});
client.on('message', function(topic_, message) {
console.log('subscriber received topic:', topic_, 'message:', message.toString());
});
mqtt://192.168.0.200
mqtt://192.168.0.200:3000
$ node subscrive.js
subscriber subscribed.
subscriber connected.
パブリッシャー
mqtt://192.168.0.200:3000
const mqtt = require('mqtt');
const client = mqtt.connect('mqtt://192.168.0.200:3000');
const message = 'SAY HELLO TO MQTT';
const topic = 'hoge/piyo/fuga'
client.on('connect', function() {
console.log('publisher connected.');
client.publish(topic, message);
console.log('send topic:', topic, ', message:', message);
});
$ node pubish.js
publisher connected.
send topic: hoge/piyo/fuga , message: SAY HELLO TO MQTT
ブローカーの動作
$ node broker.js
Server running at http://192.168.0.200:3000/
Server is ready.
Client connected. Client ID: mqttjs_cc488bf5
Client subscribed. Client ID: mqttjs_cc488bf5 , TOPIC: hoge/piyo/fuga
Client connected. Client ID: mqttjs_8be2d518
Client published. C ID: mqttjs_8be2d518
Client disconnected. Client ID: mqttjs_8be2d518
Client unsubscribed. Client ID: mqttjs_cc488bf5
Client disconnected. Client ID: mqttjs_cc488bf5
まとめ
記事を書いた人
ナンデモ系エンジニア
電子工作を身近に知っていただけるように、材料調達からDIYのハウツーまで気になったところをできるだけ細かく記事にしてブログ配信してます。
カテゴリー