前回の投稿からの続きです。
前回はLEDを光らせるまででした。今回はそれにボタンをつけ、
ボタンを押す → LEDが光る というものを作成しました。
習得できた知識
- Linuxコマンド
- Node.js + JavaScript でchild_process.execの実行
- 以下のコードのように処理結果を受け取ることができる
child_process
var exec = require('child_process').exec;
exec('[コマンド]', function (error, stdout, stderr) {
//[コマンド]の実行結果をfunctionの中で受け取り、処理することができる
});
- Node.js + JavaScript でファイルを書く
- 以下のようにファイルへの書き込みができる
writeFileSync
var fs = require('fs');
fs.writeFileSync('[ファイル]', '[内容]');
→ これで [ファイル] に [内容] が書き込まれる
用意したもの
- Raspberry pi2
- LEDライト その他 → Raspberry Pi 電子工作入門キットを購入
Raspberry piとLEDライトとボタンをつなぐ
私はここでとても苦戦しました。
LEDとボタンってどんな風につなぐのだろう・・・?
と思うままに繋いでみると、LEDから煙が出ました。
そこで、以下のように2つに分けて考えてつなぎました
-
1つめ:LEDが光る経路を作る(青で示した経路)
- 8番ポートとGNDを使う
- 8番ポート → LED → GND と電気が流れてLEDが光る
- 繋ぎ方は前回の投稿参照
-
2つめ:ボタンのON, OFFの流れをつくる(赤で示した経路)
- 25番ポートと5Vを使う
- 5V → ボタン → 25番ポートを繋ぐ
- → これでボタンが押されたら25番に電気が流れるようになる
- 25番ポートのdirectionを入力(in)と設定
- 電気が25番ポートに流れたら(ボタンが押されたら) → 25番ポートの出力が「1」
- 電気が8番ポートに流れたら(ボタンが離されたら) → 25番ポートの出力が「0」
実行する
- ボタンが押されているかどうか確認する
- 押されていたらLEDを光らせる
- 押されていなかったらLEDを消す
button_sample.js
// 8番にoutを指定する
var fs = require('fs');
fs.writeFileSync('/sys/class/gpio/export', '8');
fs.writeFileSync('/sys/class/gpio/gpio8/direction', 'out');
var exec = require('child_process').exec;
function kurikaesiFunc(){
exec("cat /sys/class/gpio/gpio25/value", function(error, stdout, stderr){
//"cat /sys/class/gpio/gpio25/value"の実行結果(0 or 1)はstdoutに入る
if(1 == stdout){
// ボタン押されている
fs.writeFileSync('/sys/class/gpio/gpio8/value', '1');
} else {
// ボタン押されてない
fs.writeFileSync('/sys/class/gpio/gpio8/value', '0');
}
setTimeout(kurikaesiFunc, 0); //繰り返し実行させる
});
}
exec("echo 25 > /sys/class/gpio/export",function(){
exec("echo in > /sys/class/gpio/gpio25/direction",kurikaesiFunc);
});