Raspberry piで切断センサ的なものを作る初歩的練習

Raspberry piで切断センサ的なものを作る初歩的練習

東京旅行のついでにアキバでブレッドボード買って来ました!という訳で、早速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Ω前後ならなんでも可)をカソード(-側)にはさみ、以下の様に配線

20130716-01あとは武蔵野電波を参考にテストファイル(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

光った!

20130716-022行目の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について。

  1. “Setting”タブの”Application type”を”Read, Write and Access direct messages”に。
  2. “Update…”ボタンを押して反映してから”Details”タブの”Recreate my access token”を押す
  3. “Access level”が”Read, write and direct…”になった事を確認してtokenをコピペ

最初から表示されている”Read Only”のtokenではrubyでunauthenticationエラーになります。

という訳で、GPIO23のケーブルを抜くと


と投稿します。2秒毎に。やばい。

ワンショット機能とかは今後考えるとして、あとはこのGPIO23に焦電型赤外線センサとか繋げれば、とか夢が膨らみますね。

Raspberry Pi Type B 512MBRaspberry Pi Type B 512MB

RS Components Ltd
売り上げランキング : 435

Amazonで詳しく見る by G-Tools

いつの間にかAmazonにも直販出てました。英語のやりとか送料を考えると妥当な所でしょうか。

ブレッドボード用電源モジュール (5V/3.3V) ブレッドボードつき セットブレッドボード用電源モジュール (5V/3.3V) ブレッドボードつき セット

OEM
売り上げランキング : 33412

Amazonで詳しく見る by G-Tools

ジャンパワイヤ(メス~メス) 10本セットジャンパワイヤ(メス~メス) 10本セット

スイッチサイエンス
売り上げランキング : 21264

Amazonで詳しく見る by G-Tools

コメントを残す