パッケージ開発担当のよみです。

釣りに行ってきました。
今回で2度目の海釣りです、はじめの一時間友人はガンガン釣っているにもかかわらず
隣の私は一切釣れませんでした。。。
途中見かねた友人が別の仕掛けを用意してくれて以降は、不思議と釣れました、やはりちゃんと知識のある人は違いますね!
私が釣ったのは友人いわくチヌという魚らしいのですが、この友人はサバをアジと間違える人なのでよく分からないです。(カサゴとメバルも間違えてましたし)

RaspberryPiというおもちゃ

さて今回は開発に少し詰まっていた時に、気晴らしにと貸していただいた
「RaspberryPi」というものについでです。
RaspberryPiはカードサイズの電子工作も出来る基盤丸出しの小さいパソコン見たいなものです。
RaspberryPi

gpioで遊ぶ

gpio
※参照画像:https://www.raspberrypi.org/wp-content/uploads/2014/04/bplus-gpio.png

RaspberryPiの端のいっぱいあるピンを使用することで、電子工作を行うことができます、
図のように各ピンに役割があります大まかに言うと、電源を随時供給するピンと電気を逃がすピンと操作可能なピンがあります。

使用したgpio番号を以下のようにして使用できるようにする

#echo 2 > /sys/class/gpio/export

次にそのgpioが出力なのか入力なのかを設定します

#echo in > /sys/class/gpio/gpio2/direction
or
#echo out > /sys/class/gpio/gpio2/direction

outの場合は以下のファイルに1の場合通電、0の場合停止します。

#echo 0 > /sys/class/gpio/gpio2/value
#echo 1 > /sys/class/gpio/gpio2/value

inの場合は電気が通っていれば1、通っていなければ0が書き込まれます。

#cat /sys/class/gpio/gpio2/value
0
#cat /sys/class/gpio/gpio2/value
1

gpioを開放する

#echo 2 > /sys/class/gpio/unexport

電子工作してみる

ブレッドボード
上記のように配線しました。
この時使用した抵抗器は330Ωです、ボタンによって値は変わってくると思います、ボタンにあった抵抗器を使用してプルダウン抵抗を行ってください。
※プルダウン抵抗は何もしていなくても微量に流れている電気を必要な時以外流れないようにするために行うらしいです

プログラムをかいてみる

以上を踏まえて以下のようにLEDを点灯させるプログラムを作ってみました。
ボタンを押すとLEDが点灯して離すと消え、5秒間押し続けるとプログラムが終了すようになっています。

<?php
//GPIOピンを全ユーザーで追加削除できるようにする
exec('sudo chmod 222 /sys/class/gpio/export');
exec('sudo chmod 222 /sys/class/gpio/unexport');
//ボタンを使用できるようにする
exec('echo 2 > /sys/class/gpio/export');
exec('echo in > /sys/class/gpio/gpio2/direction');
//LEDを使用できるようにする
exec('echo 18 > /sys/class/gpio/export');
exec('echo out > /sys/class/gpio/gpio18/direction');

//5秒間押されるまでずっと監視する
for($i=0; $i <= 10 ;$i++){
        if(exec('cat /sys/class/gpio/gpio2/value') == 0){
                exec('echo 0 > /sys/class/gpio/gpio18/value');
                $i = 0;
        }else{
                exec('echo 1 > /sys/class/gpio/gpio18/value');
        }
        //0.5秒待つ
        usleep(500000);
}

//LEDが光ったままになるので消す
exec('echo 0 > /sys/class/gpio/gpio18/value');

//ボタンとLEDの開放
exec('echo 2 > /sys/class/gpio/unexport');
exec('echo 18 > /sys/class/gpio/unexport');
//権限を戻す
exec('sudo chmod 200 /sys/class/gpio/export');
exec('sudo chmod 200 /sys/class/gpio/unexport');
?>

先頭でchmodをしていますが、exportとunexportファイルがrootしか書き込み権限が無いため行っています、もしかしたらしなくてもいい方法があるかもしれません。。。
IMG_0167

  • 2015/08/12 修正: gpioのinとoutの説明が逆になっていたので修正。