MQTTのPublisher(リモコン)からのメッセージは、MQTTのbrokerを経由して、自宅Raspberry Pi にMQTTのSubscriber(受信機)受信し、液晶表示盤にテキスト表示、LEDバックライトのON/OFFするできた!
MQTTのbrokerはsango(時雨堂という会社が無償提供) MQTT サーバーを利用。
MQTTのPublisher(リモコン)は、MQTTLens利用。
MQTTのSubscriber(受信機)サンプルコード!
var fs = require('fs'); var mqtt = require("mqtt"), config = require("./config.json"), client = mqtt.createClient(config.port, config.host, config.options); var exec = require('child_process').exec, child; client.subscribe(config.topic + "/#"); client.on("message", function(topic, message) { console.log(topic, message.toString()); switch (topic){ case 'chen420@github/led': command = (message!='0'?1:0); fs.writeFileSync('/sys/class/gpio/export', 9); fs.writeFileSync('/sys/class/gpio/gpio9/direction', 'out'); fs.writeFileSync('/sys/class/gpio/gpio9/value', command); fs.writeFileSync('/sys/class/gpio/unexport', 9); break; case 'chen420@github/lcd': child = exec('/usr/local/bin/lcdprint ' + message, function (error, stdout, stderr) { // console.log('stdout: ' + stdout); // console.log('stderr: ' + stderr); if (error !== null) { console.log('exec error: ' + error); } }); break; } } );
参考文献の設定ファイルを利用した。LEDバックライトは、gpio 9番に設定、テキスト表示は、PCD8544-utils のlcdprint コマンドを利用した。
Subscriber の実行:
$ node mqtt-led.js
MQTTブローカーのそれぞれTopicに メッセージが下記の動作が発生
- chen420@github/led | 0 または1 | バックライトのON/OFF
- chen420@github/lcd | ”表示メッセージ” | 表示
Subscriberの永続化(サービスとして動く)が次の課題に。
参考文献 : 肩に乗せてもらった巨人達