Raspberry PiでArduinoが入ったのでnode-serialportと連携してみるメモ

Raspberry PiでArduinoが入ったのでnode-serialportと連携してみるメモです。littleBitsのArduinoモジュールにお馴染みの左右レバーをつけて値を取得してみます。

node-serialportをグローバルにインストール

npm install -g serialport

任意のフォルダにnode作業場を作る

今回はデスクトップに作成しました。

mkdir ~/Desktop/test-serialport

移動します。

cd ~/Desktop/test-serialport

serialportをリンクして使えるようにします。このあたりはローカルにインストールしてもいいかもしれませんが、今回はこれで。

npm link serialport

このようなログが出ます。

> serialport@1.6.3 install /home/pi/Desktop/serialport2/node_modules/serialport
> node-pre-gyp install --fallback-to-build

[serialport] Success: "/usr/local/node/lib/node_modules/serialport/build/serialport/v1.6.3/Release/node-v11-linux-arm/serialport.node" already installed
Run pass --build-from-source to compile
/home/pi/Desktop/serialport2/node_modules/serialport -> /usr/local/node/lib/node_modules/serialport

こちらでいうリンクとはnode_moduleにシンボリックリンク(ショートカット)が生成される形でグローバルと関連付けがされるようです。

image_20150414_001439_21

シリアルポートの名前はRaspberry PiのArduinoから調べておきます

image_20150413_190145_8.png

Arduinoコード

Arduinoは以下のように書きました。

void setup() {
  Serial.begin(9600);
}

void loop() {
  int sensorValue = analogRead(A0);
  if(sensorValue>0){
    Serial.println(sensorValue);
  }
  delay(1);
}

Nodeコード

直下にapp.jsとしてNodeを書きます。Arduinoが吐き出すSerial.println(sensorValue)の値をnode-serialportが受け取る仕組みです。

こちらの記事にあるコード参考にしました。

node-serialportを使ってNode.jsでArduinoと通信する – 人と技術のマッシュアップ

というかほぼ同じですが、よりシンプルに値を出しています。


var serialport = require('serialport');

// Serial Port
var portName = '/dev/ttyACM0';
var sp = new serialport.SerialPort(portName, {
    baudRate: 9600,
    dataBits: 8,
    parity: 'none',
    stopBits: 1,
    flowControl: false,
    parser: serialport.parsers.readline("\n")
});

// data from Serial port
sp.on('data', function(input) {
    var buffer = new Buffer(input, 'utf8');
    var sensorValue;
    try {
        sensorValue = JSON.parse(buffer);
        console.log('input: ' + sensorValue);
    } catch(e) {
        return;
    }
});

動かしてみる

nodeで先ほどのapp.jsを実行してみます。

node app.js

ミニモニターに画面いっぱいにコンソールを出して表示しています。

無事動きました!

おわりに

いかがでしたでしょうか。

Windowsで連携するとVisual Studioを入れたりPythonを入れたりと手間がかかった印象ですが、Raspberry Pi(Linux)はすんなり動かすことが出来ました。Arduinoまわりの検証もRaspberry Piで独立させるのも手かもしれないですね。

Nodeで連携ができると受け取った値をexpressやsocket.ioと連携して効率よくネットワークに載せることができるので夢が広がります!

それではよきArduino & Raspberry Pi & littleBits Lifeを!