LoginSignup
12

More than 5 years have passed since last update.

IT女子のゼロから始めるIoTーステップ2: Raspberry pi2とNodejsでボタン+Lチカ

Last updated at Posted at 2015-09-09

前回の投稿からの続きです。

前回は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 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」
  • 上の二つをつなげてみる
    button.jpeg

実行する

  • ボタンが押されているかどうか確認する
    • 押されていたら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);
});

ボタンで光った

20150908_124839_259.jpeg

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12