2014年9月2日火曜日

Socket.IOとNode.js、Node-serialport、それにArduinoを加えてスマホから家電のスイッチを制御する(4)

時間が開いてしまいましたが、前回までの記事ではMacbookのローカル環境においてNode.js等を使って家庭用AC100V電源を操作するところまで出来ました。今回の記事ではそれをRaspberry Piで動かします。

まず、RaspberryPiにNode.jsを動かすことができる環境を構築します。
これまでの記事…
を参考にiptableの設定を行っている場合、3000番ポートをNode用に開ける必要があります。

※SSHできるようにしておくと、開発が捗ります。

-A INPUT -p tcp --dport 3000 -j ACCEPT

次にnodeをインストールします。
参考:http://thinkit.co.jp/story/2013/08/22/4206
を参考にするといいと思います。

そして、Macbookに構築したものと同じものをRaspberry Piにも入れていきます。
参考:http://monitorgazer.blogspot.jp/search/label/Node.js

あとはMacbookで動かしていたindex.jsの部分を少し変更するのみです。

ar app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var SerialPort = require('serialport').SerialPort;
var serial = new SerialPort('/dev/tty.usbmodemfd121',{
    baudrate:57600
});
 
app.get('/',function(req,res){
    res.sendfile('index.html');
});
 
serial.on('open',function(){
    console.log('open');
});
 
serial.on('data',function(data){
    io.emit('recvmsg',data.toString());
});
 
io.on('connection',function(socket){
    socket.on('message',function(msg){
        serial.write(msg,function(err,results){
        });
    });
});
 
http.listen(3000,function(){
    console.log('listen 3000 port');
});

これを
ar app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var SerialPort = require('serialport').SerialPort;
var serial = new SerialPort('/dev/ttyACM0',{
    baudrate:57600
});
 
app.get('/',function(req,res){
    res.sendfile('index.html');
});
 
serial.on('open',function(){
    console.log('open');
});
 
serial.on('data',function(data){
    io.emit('recvmsg',data.toString());
});
 
io.on('connection',function(socket){
    socket.on('message',function(msg){
        serial.write(msg,function(err,results){
        });
    });
});
 
http.listen(3000,function(){
    console.log('listen 3000 port');
});
とするだけです。
変更部分は一箇所で、
var serial = new SerialPort('/dev/ttyACM0',{
    baudrate:57600
});
のシリアルポート名のみです。

シリアルポート名を調べる方法は、
ArduinoをUSBポートに繋ぐ前と後に
ls /dev
と入力し、増えたものがArduinoがつながっているシリアルポート名です。

これで、Rapsberry PiでAC100V電源のON・OFFの制御ができるようになりました。ここでこのNodeアプリを常に動かす(デーモン化する)ためにforeverを利用します。
参考:node.js node.jsスクリプトをforeverでデーモン化する
参考サイトのようにすれば特に問題が起きることはないと思います。

これでRaspberry Piにnode.jsの実行環境を構築し、ブラウザからAC100V電源のON・OFFを行うシステムをコンパクトにまとめる事が出来ました。ですが、今のシステムでは制御したい家電のそばにArduinoを含むRaspberry Piシステム一式を設置する必要があり、邪魔です。そこでRaspberry Piを母艦サーバと位置づけ、Programmable Xbeeというfreescaleマイコン入り無線モジュールを使用してもっと便利で使いやすいシステムに改良していきます。Programmable Xbeeを使うことでArduinoを取り除くことができ、コスト的にも優れたシステムを構築することが可能です。

0 件のコメント:

コメントを投稿