先週4時間だけ秋葉原に寄った際、若松通商で見つけたRaspberryHabuなる同人ハードが面白そうなので買ってきました。FABLIBによるオープン仕様のRaspberry Pi用拡張ボードで、ラズパイと外部回路とつなぐ場合の手助けをしてくれるそうです。
RaspberryHabuは 自分で組み立て、亀の子の様にラズパイのGPIOに接続するドーターカード。通常プロトタイピングではGPIOをブレッドボードに引き出し回路を作りこむ所、このボードが基本的な入出力やレベル変換をやってくれるから、あなたはやりたい事に注力すればいいのです!という趣旨のキットだと思います。たぶん。
組み立てはちょっとムズカシイ
Firstキット(1000円)と一緒にADコンバータのMCP3002を買ってきました。
Firstの他、デジ/アナのInputを追加したBasicキット(2000円)、さらにRTC+バックアップバッテリまでついたFullキット(4500円)まで3種類あります。Basicが欲しかったものの、売り切れてて無念。アナログのみ追加したくて指定のMCP3008を探したけれど、秋葉原で売ってる店が見つかりませんでした。普通8chも使いませんよねと。
ついてくる紙はパーツリストとチラシのみ。詳細はwikiの回路図とTogetterを見る事になっています。
市販のキットみたいに実体配線図はついていないので、ある程度回路図を読める必要あり。とはいってもこの商品を買ってる時点でまるっきりの初心者は居ないとは思いますが。
・・・自分は回路図とににらみ合いし、組み上がった所でTogetterを見つけました。基板のシルクとパーツリストは対応していないので、把握するためにはTogetter確認必須です。またWikiを上から見ていくと古いPCB用のデータが先に出てくる為、下までちゃんと読んで入手したPCBバージョンの回路図とTogetterを見る必要あり(今回入手したPCBバージョンは20130827)。
合体とコントロール
おそるおそるRaspberry Piと合体
マヌケな事にデジタルOut用のソケットをアナログパターンに取り付けてました。起きろ自分。PowerLEDの抵抗も間違い(330Ωではなくて2kΩです)。ケミコンは指示がありませんが、C9に取り付ければパスコンの役割をするのでたぶんここじゃないですかね。
ソフト側にはGPIOを簡単に使う為のライブラリ、WiringPiをインストールします。自分は下記を参考にさせていただきました。
WiringPi のインストール | ε-ARK Project
WiringPi とは、Raspberry Pi の GPIO を Arduino のように制御するためのライブラリです。
もともとは C 言語で実装されていましたが、Ruby、Python、PHP、Perl など言語でも実装されています。
問題なくCompile完了。接続して下記を入力してみます。
gpio mode 2 out gpio write 2 1
おお、光った!
ラズパイから直接引っ張るのとは違い、デジタルOutからはTTLレベルで出力が出ています。とはいってもラズパイから出る+5Vは4.45vしかありませんでしたが。
user@raspberrypi:$ gpio readall +----------+-Rev2-+------+--------+------+-------+ | wiringPi | GPIO | Phys | Name | Mode | Value | +----------+------+------+--------+------+-------+ | 0 | 17 | 11 | GPIO 0 | IN | Low | | 1 | 18 | 12 | GPIO 1 | IN | Low | | 2 | 27 | 13 | GPIO 2 | IN | Low | | 3 | 22 | 15 | GPIO 3 | IN | Low | | 4 | 23 | 16 | GPIO 4 | IN | Low | | 5 | 24 | 18 | GPIO 5 | IN | Low | | 6 | 25 | 22 | GPIO 6 | IN | Low | | 7 | 4 | 7 | GPIO 7 | IN | Low | | 8 | 2 | 3 | SDA | IN | High | | 9 | 3 | 5 | SCL | IN | High | | 10 | 8 | 24 | CE0 | IN | Low | | 11 | 7 | 26 | CE1 | IN | Low | | 12 | 10 | 19 | MOSI | IN | Low | | 13 | 9 | 21 | MISO | IN | Low | | 14 | 11 | 23 | SCLK | IN | Low | | 15 | 14 | 8 | TxD | ALT0 | High | | 16 | 15 | 10 | RxD | ALT0 | High | | 17 | 28 | 3 | GPIO 8 | IN | Low | | 18 | 29 | 4 | GPIO 9 | IN | Low | | 19 | 30 | 5 | GPIO10 | IN | Low | | 20 | 31 | 6 | GPIO11 | IN | Low | +----------+------+------+--------+------+-------+
gpio readallコマンドでGPIOのポート状態を確認できて便利。以前(Raspberry piで切断センサ的なものを作る初歩的練習 | 徒労日記)の/sys/class/gpioに書き込む方法と異なり、root権限を必要としません。
今風にTwitterと家電をつなげる
WiringPiが動いてしまえば、あとはシェルでもWebでも好きに呼び出して使えます。自分もWebアプリで・・・と考えましたが、結局手早くアウトプットが出せそうなTwitterからの指示で家電をON/OFFにしました。
使い方
Twitterで自分に向けて「フロアライトをON(orOFF)、とつぶやく」だけ。キーワード「フロアライト」「ON(orOFF)」が入っていれば文法はなんでもいい。
構築
Firstキットには1個のリレーが載っており、GPIO 7に接続されています。このリレーは125V 0.5Aまで耐えるので、消費電流の小さい製品なら根元からON/OFF可能。今回は寝室にあったフロアライトをバラしました。もちろん終わった後ちゃんと戻しましたよ。
TwitterのTL(mention)読み込みにはRubyで書かれたtwをインストールしました。
これは認証後に実行すると今のMentionを一定行数出力します。
twインストールの際、エラーで止まったため、aptitude install ruby-devでライブラリを追加しています。
シェルスクリプトをcronで廻す
材料が揃った所で「時間をかけずサッとね!」と直感的(安直な)シェルスクリプトにしました。
#!/bin/sh MENTION=/var/tmp/mention.log /usr/local/bin/gpio mode 0 out /usr/local/bin/gpio mode 7 out tw | grep "@guys_dolls : @guys_dolls" | grep フロアライト | tail -n 1 > ${MENTION} #Light On grep ON ${MENTION} && /usr/local/bin/gpio write 0 1 && /usr/local/bin/gpio write 7 1 #Light Off grep OFF ${MENTION} && /usr/local/bin/gpio write 0 0 && /usr/local/bin/gpio write 7 0
実はサッとは動きませんでした。シェルからは動くのに、cronで動かなくて。gpioがフルパス必要な事に気づかず半日を費やしました。
動作は上から
- gpioのポートを出力モードへ。
- 自分に届いてるMentionの中から、キーワードを含む最新行1行を取得。
- ONのキーワードが含まれた時、GPIO 7(リレー)とインジケータのgpio 1をHiにします。
- OFFのキーワードが含まれた時、GPIO 7(リレー)とインジケータのgpio 1をLoにします。
あとはこれをcronで回しているだけ。
トグル動作では無いので、何回やっても大丈夫。リレーは5個まで単純に増設できるので、フレーズを分けて機器の操作ができそう。twは頻繁に打つとTwitterからエラーが返されるので、あまりレスポンス良くは動けません(3分おきとかなら大丈夫。1分はエラー)。
Raspberry Habuはシンプルな構成ながらプリント基板という事もあり、かさ張らずプロトタイピングに便利なボードだと思いました(制作ドキュメントはもっと整えて欲しい)。次はアナログ入力を増やして電力消費とかロギングできるようにしてみたいと思います。
Raspberry Pi Type B 512MB RS Components Ltd (ソースマーキング及び販売 Umemoto LLP) |