東京旅行のついでにアキバでブレッドボード買って来ました!という訳で、早速Raspberry Piと組み合わせてみたいと思います。自分の最終目標的には、ラズパイを使ったホームモニタデバイスか何か作りたいなと。
GPIOを使うための下準備
Raspberry Piに用意されたI/Oピン(GPIO)はOSをRaspbianにすれば特に環境構築も無く使うことができます。という事でRaspbianをNOOBSで入れなおし。GPIOはroot権限必須なのでroot作業を可能にしておきます。
sudo passwd root
でrootにパスワードを設定(やらないとsuできません)。また、タイムゾーンが未設定なので
dpkg-reconfigure tzdata
としてAsia/Tokyoを指定します。後は/etc/ntp.confを編集して
pool ntp.nict.jp iburst
を追加し、server 0~4.debian.xxxをコメントアウト。しばらくしてntpq -pコマンドで確認すると時間が取れている模様。
xxxx@raspberrypi:/usr/io# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *ntp-b2.nict.go. .NICT. 1 u 87 256 377 24.908 -0.429 0.666 -ntp-a3.nict.go. .NICT. 1 u 194 256 377 23.117 0.205 0.568 +ntp-b3.nict.go. .NICT. 1 u 259 256 377 24.044 -1.793 0.685 +ntp-a2.nict.go. .NICT. 1 u 250 256 377 21.082 -1.026 1.229
Lチカしてみる
登竜門という事で、Raspberry PiにてLEDを点灯・消灯(通称:Lチカ)させてみます。参考にしたのは
自分も未熟な為、確認も込めて書きます。Raspberry Piにある出力ピンは「Hi(ON)にした時3.3Vが、LO(OFF)にした時0Vが出力」されます。そのため、
- 2V前後で光るLEDを直接つなげると切れる(ある程度はもつけど)
- 遮断されている訳では無いので、ピン間に電圧をかけるリレーの様な使い方はできない
となります。という訳で、電圧降下用の抵抗(今回は手持ちの15kΩ。1kΩ前後ならなんでも可)をカソード(-側)にはさみ、以下の様に配線
あとは武蔵野電波を参考にテストファイル(ledon.sh)を作成。
#!/bin/sh echo "4" > /sys/class/gpio/export echo "out" > /sys/class/gpio/gpio4/direction echo "1" > /sys/class/gpio/gpio4/value
パーミッションを変更して実行
chmod 744 ./ledon.sh
./ledon.sh
光った!
2行目のexportへのecho “4”は最初の1度のみで良いようです。これを実行すると各ポートへのデバイスファイルみたいな物が作られると理解。
線が切られたらTwitterに知らせる
一歩進めて、「線が抜けたら(Loに落ちたら)Twitterで知らせる」シェルに改変してみました。切断を検知するのはGPIO23で普段は1番Pinの+3.3Vがかかっています(Hi)。
#!/bin/sh #init echo "4" > /sys/class/gpio/export echo "out" > /sys/class/gpio/gpio4/direction echo "0" > /sys/class/gpio/gpio4/value echo "23" > /sys/class/gpio/export echo "in" > /sys/class/gpio/gpio23/direction echo "0" > /sys/class/gpio/gpio23/value #run while : do sleep 1s if [ `cat /sys/class/gpio/gpio23/value` -eq 0 ] ; then sleep 2s if [ `cat /sys/class/gpio/gpio23/value` -eq 0 ] ; then echo "0" > /sys/class/gpio/gpio4/value ruby /usr/io/twitrb.rb fi elif [ `cat /sys/class/gpio/gpio23/value` -eq 1 ] ; then echo "1" > /sys/class/gpio/gpio4/value fi done
文法等稚拙なのはご容赦を。ポートを初期化した後、1秒おきにGPIO23がLoに落ちてないかを確認して、落ちてる場合さらに2秒待ったのちに再確認、落ちていればTwitterで発呼してるだけです。
Twitterに投げる方法はシェルスクリプトなど多数あったものの、一番シンプルにやられていたひとりぶろぐ » Raspberry Piで部屋の温度を定期的にTwitterに投稿をそのまま使わせていただきました。
一つひっかかったのはTwitterのアプリ認証を取る(Create an application | Twitter Developers)際のtokenについて。
- “Setting”タブの”Application type”を”Read, Write and Access direct messages”に。
- “Update…”ボタンを押して反映してから”Details”タブの”Recreate my access token”を押す
- “Access level”が”Read, write and direct…”になった事を確認してtokenをコピペ
最初から表示されている”Read Only”のtokenではrubyでunauthenticationエラーになります。
という訳で、GPIO23のケーブルを抜くと
guys_dollsが2013-07-16 22:48:53 +0900にRaspberryPiのGPIO23を抜きやがりました。
— ぶっちー (@guys_dolls) July 16, 2013
と投稿します。2秒毎に。やばい。
ワンショット機能とかは今後考えるとして、あとはこのGPIO23に焦電型赤外線センサとか繋げれば、とか夢が膨らみますね。
Raspberry Pi Type B 512MB RS Components Ltd |
いつの間にかAmazonにも直販出てました。英語のやりとか送料を考えると妥当な所でしょうか。
ブレッドボード用電源モジュール (5V/3.3V) ブレッドボードつき セット OEM |
ジャンパワイヤ(メス~メス) 10本セット スイッチサイエンス |