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にシンボリックリンク(ショートカット)が生成される形でグローバルと関連付けがされるようです。
シリアルポートの名前はRaspberry PiのArduinoから調べておきます
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を!