http://www.bonno.xyz/ を作るために、Node.jsからArduinoにデータを送信する必要がありました。
MacBookでNodeのプロセスを立ち上げ、USB接続したArduinoを操作します。
ライブラリとしては voodootikigod/node-serialport を使いました。
準備
npm init
し、package.jsonが存在する前提です。
npm install serialport --save
し、serialportをインストールします。
Node.js側
var SerialPort = require("serialport").SerialPort;
var serialPort = new SerialPort("/dev/cu.usbmodem14221", {
baudrate: 14221
});
serialPort.on('open', function () {
console.log('serial open');
});
serialPort.write("1\n", function(err, results) {
console.log('err ' + err);
console.log('results ' + results);
});
/dev/cu.usbmodem14221
の部分はArduino IDEで繋いだ時に表示されるデバイス名を設定します。
パラメータのbaudrate
はどこかからコピってきたので、何が良いのかわかってないです。とりあえず動いたから、これでいいかなーという感じです。
serialPort.write
の第一引数がArduino側に送信されます。
Arduino側
void setup() {
Serial.begin(9600);
}
void loop() {
int inputchar = Serial.read();
if (inputchar != -1 ){
Serial.print(inputchar);
// TODO anything
}
}
Serial.begin
の引数は、どこかからコピってきたので、何が良いのかわかってないです。
Serial.read
により、最初の1バイトが取得できます。
-1
ではない場合、何かが送信されたとして、なにかしらの処理が実行出来ます。
具体的には?
http://noboru.hatenablog.jp/entry/2015/12/30/175836 ここに書いた通り、Node.js側でWebSocketのイベントを受け、シリアルポートにデータを書き込み、サーボモータを動かしました。
こんな感じで、ネット上のWebSocketサーバから物理的なモータとかを簡単に動かせるようになったので、アイディア次第でいろいろ出来そうですね。
今回は除夜の鐘ということで、年末に間に合わせるために詳しく調べてない部分が多いので、時間があったら詳しく調べないとですね。