Raspberry Piで携帯パトランプを作る (障害アラート通知)

More than 1 year has passed since last update.

※2015/10/25 電子工作つながりで「Arduinoで物理ボタンを作る (目立つボタンで「ッターーン!」しよう)」を投稿しました

※2014/7/16にRaspberry Piの新しい奴が発売されてました!
EC2(ubuntu)上でのクロスコンパイル作業ログを投稿しました

作ろうと思ったきっかけ

「パトランプを持ち歩きたい」

携帯のメール通知に気づかず「うわっ!メール来てた!」っていう場面が何度かあり

「大切なメールをお知らせするパトランプを作れないかな。」

「サーバーやネットワークの障害を通知するパトランプがあれば良いのにな。」

そんな風に考えることがよくありました。

パトランプ実現イメージ01.png

実際、そういう商品は存在します。

LAN防-3

↑こんな奴なのですが、個人で用意するには価格が凄まじく(↑は15万くらい)
安くても軽く数万円はします。

「せっかくだから、安く自作できないかな。」

そんな風に考えたのは、
『Raspberry Pi』という小型パソコンで実現できそうだ
という事を以前より知っていた為で、おそらくRaspberry Piを触った事のある方で
このようなパトランプを作ったことがある方も、たくさんいるのだろうと思います。
そして自分も、いつかは作ってやろう、と考えていました。

RaspberryPi

Raspberry Pi (ラズパイ)は、ちょうどタバコの箱くらいの大きさで
ネット接続も、電子工作もできる、とても素敵な超小型パソコンです。

↑の写真みたいに、買ったばかりの状態は、むき出しの基盤ですが、
ケースに入れたり、ディスプレイに繋いだり、GPIOと呼ばれるピンに
LEDやモーター等を繋いで、電子工作を楽しんだりできる、
“パソコンのいろは”を勉強するには実にちょうどいいオモチャです。
※オモチャと言っちゃいましたが、れっきとした「パソコン」です
※もともと教育用なので、生徒に1人1台配った小学校なんかもあるみたいですね

電源はスマホの充電器やモバイルバッテリーなんかで代用可能な
マイクロUSBタイプの電源なので、起動したまま
ポケットに入れて持ち歩くこともできそうです。

「よし!どうせなら、
 どこへでも持ち歩けて、どこにいてもパトランプがくるくる回って、
 いつでもどこでも障害アラート通知できる奴を作ろう。」

パトランプ実現イメージ2
※登山中にパトランプが回っても、ぶっちゃけどうしようもありませんが…

こんな風に妄想ばかりが膨らんで、今まで、実際に作るには至らなかったのですが、
先日ちょうど Raspberry Pi に触る機会があったので、

「作るなら、今しかない」とばかりに、電子工作の電の字も知らない状態から、
“携帯できるネット連動パトランプ”の制作に取り掛かりました。

そして、約2週間ほどで、なんとかそれっぽいものを作ることが出来ました。

どどん!
※でも、なんかイメージとちょっと違う…

Raspberry Pi、素晴らしいです。 そして、楽しいです。

そして、メモを公開することに

「意外と苦戦したから、Web上に情報を残そう」

インストール手順や各種設定、Lチカやサーボモーターの制御の仕方などは、
Web上に情報が豊富にあるものの、今回、この「どこでもパトランプ」を作るにあたって必要となった
リレーモジュールを使ったパトランプの制御や、SPIのTFTディスプレイでのコンソール表示などの情報が
Web上でなかなか見つけられず非常に苦戦した為(単純にこの手の情報を探すのが下手なだけかも…)、
私以外にも「どこでもパトランプ」を作りたくなった方がいて、同じように行き詰ってしまった場合に
少しでもその手助けになればと思い、一通り用意したものや、実際に書いたコード、ハマった部分などを
メモ書きとして残しておく事にしました。

用意したモノ

参考までに、用意したものをリストアップしてみました。
基本的にお好みのモノ(既にお持ちのモノ)で大丈夫だと思います。
また、価格は参考金額です。(けっこう変動するので…)

Raspberry Pi関連

■ 本体 『Raspberry Pi Type B 512MB』 約4500円
http://www.amazon.co.jp/dp/B00CBWMXVE/
※Raspberry Pi本体です
※2014/7/16にRaspberry Piの新しい奴が発売されました!
 お値段据え置きで色々改良されているので、これからラズパイを楽しむのであれば
 新しい方を買うことをオススメしますが、「どこでもパトランプ」の動作検証はしてないので
 もしかしたら、新しい方だと、ハマりポイントが出てくるかもしれません
※とはいえ、新しい奴も基本的には後方互換のようなので、きっと動いてくれるはずです☆

■ SDカード 『Transcend SDHCカード 16GB Class10』 約1000円
http://www.amazon.co.jp/dp/B003VNKNEQ
※16GBも必要ありませんが、現状価格差もあまりないので、
 念のため、16GBを用意しました
※4GB以上のSDカードがお手元にあれば、それでも行けるかもしれません

■ HDMIケーブル 『Amazonベーシック ハイスピードHDMIケーブル』 約600円~
http://www.amazon.co.jp/dp/B003L1ZYYM/
※最終的には超小型TFTディスプレイに接続しますが
 はじめは通常の液晶ディスプレイに接続する必要があるので
 HDMIケーブルとHDMI対応のディスプレイが必要です
※既にお持ちであれば、購入は不要です
※ディスプレイは、HDMI対応であれば、どんなディスプレイでも大丈夫かと思います

■ USBキーボード(マウス付き) 『レノボ・ジャパン ThinkPad トラックポイント・キーボード - 日本語』 約6000円
http://www.amazon.co.jp/dp/B00DLK4GR4/
※私はThinkPadキーボードを選択しました
 高いし、ThinkPadキーボードである必要はありませんが
 マウス機能付きのキーボードにすると、USBポートの節約になります
※GUIを使わない場合は、マウス機能は不要ですが、
 ココでは、もろもろの作業をGUIで行う予定なので、
 マウス機能付きのキーボードをオススメします

■ USB充電器 『PLANEX 2ポートUSB充電器』 約600円
http://www.amazon.co.jp/dp/B002RL959W/
※Raspberry Piの電源用です
※最終的には、持ち歩き用に、電源はモバイルバッテリーにしますが、
 持ち歩かない初期設定時などに、モバイルバッテリーを使うのも
 なんだか心もとないので(作業中に電源が落ちるなど)
 持ち歩かない時は、こちらを使用する方が良いかと思います
※PCから電源をとる場合や、スマホ充電用のUSBケーブルがあれば、購入は不要です

■ USBケーブル (タイプAオス-マイクロタイプBオス) 『Amazonベーシック USB2.0ケーブル』 約700円
http://www.amazon.co.jp/dp/B003ES5ZSW/
※Raspberry Piの電源用です
※作業用に長めのケーブルがあると安心です
 自分は、コンセントと作業環境がやや離れているので
 1.8mの長さのケーブルを使用しました

■ 本体ケース 『Pi Tin for the Raspberry Pi - Clear』 約1200円
http://www.amazon.co.jp/dp/B00E92JZ2O/
※やはりケースがあった方が収まりがいいです
※ただ、後で出てくるmicroSDカードアダプタとの相性はあまりよくありません
※とはいえ、後で出てくる押しボタンスイッチとの相性はすごく良いので
 ズバリおすすめです

■ パソコン
※SDカードの読み書きが可能であれば、WinでもMacでもどちらでも。

■ SDカード リーダーライター 『ELECOM カードリーダライタ』 約900円
http://www.amazon.co.jp/dp/B003LJXSZQ/
※私はノートPCに標準で搭載されていた為、購入はしませんでしたが、
 パソコンにSDカードスロットがない場合などは、用意が必要です
※パソコンから直にSDカードが読み書きできる環境があれば、購入は不要です

■ 無線LANアダプタ 『I-O DATA 無線LANアダプター WN-G300UA』 約1700円
http://www.amazon.co.jp/dp/B009GQNMQ8/
※ネット接続用で、ごっついアンテナ型にしてみました
 小型のドングルより、こっちの方がメカっぽくて個人的には好きです
※他にもWi-Fiドングルを購入したのですが、1.8"TFTを認識させる為に
 ファームウェアを更新した際、Wi-Fi接続できなくなるケースがありました
※とりあえず、この『WN-G300UA』であれば、Wi-Fi接続できましたので、
 こちらの商品を使用すれば、間違いないかと思います

パトランプ関連

■ パトランプ 『Meltec 回転灯アンバー』 約1500円
http://www.amazon.co.jp/dp/B00353KJEQ/
※こいつを回す事にします。色はオレンジを選択しました
※大きめサイズなので、この中に乾電池電源やリレーモジュールを収納できます
※シガープラグを外し、乾電池電源やリレーモジュールに配線します

■ 単3乾電池 『Panasonic EVOLTA 単3形アルカリ乾電池 20本パック 』 約1300円
http://www.amazon.co.jp/dp/B004T4R0RO/
※パトランプ用の電源です
※もし手元に単3乾電池が8本あれば、購入は不要です

■ 電池ケース 『8本単3電池(12V)用電池ケース』 約300円
http://www.amazon.co.jp/dp/B00BQ71E7E/
※パトランプ用の電源、単3乾電池8本を収納するケースです

■ リレーモジュール 『SainSmart 2チャンネル 5V リレーモジュール』 約700円
http://www.amazon.co.jp/dp/B0057OC6D8/
※このリレーモジュールをRaspberry Piに接続して
 パトランプのON/OFFを制御します
※リレーに関しては、大きなハマりポイントのひとつで、ほとんど知識がなく、色んなリレーを試しました…
※ぶっちゃけ2チャンネルも要らないし、もっと適切なリレーがあるかもしれませんが
 自分がはじめに制御に成功したのが、上記リレーモジュールでした

■ ドライバーセット
http://www.amazon.co.jp/dp/B000AQSCPE/
http://www.amazon.co.jp/dp/B006JZELGE/
※リンクが2つありますが、どちらかでOKです
※パトランプのケースを開ける際に、+2のドライバーが必要になります
※+2のドライバーがお手元にあれば、購入は不要です。

■ ジャンパワイヤ
ジャンパワイヤ(オス~メス) 10本セット 約500円
http://www.switch-science.com/catalog/209
ジャンパワイヤ(オス~オス) 10本セット 約500円
http://www.switch-science.com/catalog/57/
ジャンパワイヤ(メス~メス) 10本セット 約500円
http://www.switch-science.com/catalog/56/
※安くありませんが、色分けして使いたい場合などは
 それぞれ20本ずつあると安心です
※オス・メスでワイヤ同士を結んで、ワイヤ自体を長くしたりもできます
※最低限の必要な本数は、以下の通りです
 パトランプ用:(オス~オス)×3本、(メス~メス)×6本
 押しボタン用:(オス~オス)×1本、(オス~メス)×3本
 TFTディスプレイ用:(オス~メス)×7本

■ 押しボタンスイッチ 『押しボタンスイッチC(ケース用)赤・大』 約300円
http://www.amazon.co.jp/dp/B00INKPYWS/
※パトランプの回転を止めるために使用します
※いいや!限界だ押すね!とか言って、吉良吉影ゴッコとかも楽しめます

■ ブレッドボード 『SparkFun 超小型ブレッドボード(白)』 約500円
http://www.switch-science.com/catalog/1475/
※こいつのおかげで、今どきはハンダ付け不要で配線ができます

■ 抵抗など 『抵抗コンデンサLED詰め合わせパック(計20種)』 約700円
http://www.switch-science.com/catalog/1218/
※LEDは今回使わないし、抵抗もこんなに必要ありませんが、
 何を選んで良いのか分からなかったので、まとめて買いました
※ちなみに、押しボタンスイッチでパトランプを止める際に
 1KΩの抵抗を使用して、プルアップ抵抗を作ります

持ち歩こう関連

■ TFTディスプレイ 『SainSmart 1.8"TFT LCDディスプレイモジュール SPIインタフェース』 約1600円
http://www.amazon.co.jp/dp/B008HWTVQ2/
※持ち運び時のコンソール接続用に、超小型ディスプレイを接続します
※CUIでコマンドを叩く程度なら十分なサイズと解像度です
※カーネルのリビルドや起動時からコンソール表示したい場合の設定に、かなりハマりました…
 …が、実はすごく簡単に実装できる方法がありました
※起動画面がこのディスプレイに表示されると、ちょっと感動します

■ モバイルバッテリー 『iBUFFALO モバイルバッテリー 2600mAh』 約1700円
http://www.amazon.co.jp/dp/B00C9UHMNW
※Raspberry Piの電源用です
※はじめ単3乾電池4本入れ替えて使うタイプの
 モバイルバッテリーを接続していましたが、
 供給電流が足りない為か、Wi-Fi接続できない等の問題があり、
 最終的に、このiBUFFALOの2600mAhタイプを選択しました
※この製品を選択したのは、出力が 5V 2A あり、
 供給電流に不足がないと考えた為です(実際、これで動作します)

■ Bluetoothキーボード 『レノボ・ジャパン ThinkPad Bluetooth ワイヤレス・トラックポイント・キーボード - 日本語』 約9400円
http://www.amazon.co.jp/dp/B00DLK4GQA/
※せっかくなので、キーボードもワイヤレス化しようと思い
 手元にあったBluetoothキーボードを利用しました
※やはりThinkpadキーボードである必要は特にないです
※ぶっちゃけ必要な時だけ接続すればいいので、
 キーボードをワイヤレス化しても、それほど幸せになりません
 Bluetoothの設定がそれなりに手間だったりもするので、
 キーボードはUSBでOK、という選択もアリな気がします

■ Bluetoothドングル 『PLANEX Bluetooth USBアダプター』 約1800円
http://www.amazon.co.jp/dp/B0071TE1G2/
※キーボードをBluetooth化する場合は、こちらも必要です
※Bluetooth化しないのであれば、もちろん不要です
※ちなみに実際には「BT-Micro3E1X」というドングルを使ってます
 なぜか今Aamazonでみると、猛烈に高くなっていました…

その他、あれば便利なもの

■ 電気絶縁テープ  約70円~
http://www.amazon.co.jp/dp/B002YMSJCS/
http://www.amazon.co.jp/dp/B000TGHPNA/
※ケーブルを束ねたり、配線接合部のむき出し状態を
 覆ったりするのに使用します

■ ホットボンド・ホットスティック  合計 約800円
http://www.amazon.co.jp/gp/product/B003EILCG6/
http://www.amazon.co.jp/gp/product/B001PR1KU6/
※半田付け部や、むき出しの銅線部を覆うために使用しました
 押しボタンの端子部など、絶縁テープでぐるぐる巻きにしづらい箇所を
 むき出しの状態から、絶縁状態にするのに便利です
※ガンの方にスティックが3本付いてるので、別売のスティックは不要かもしれません

■ TRUSCO マジックバンド結束テープ
http://www.amazon.co.jp/dp/B004OCN1RE/
※無くてもいいですし、本工作では実はそれほど活躍しませんが、
 それほど高いものでもないですし、持っておけば意外と便利です

工具とか

■ ワイヤーストリッパー
http://www.amazon.co.jp/dp/B000CEAXM4/
http://www.amazon.co.jp/gp/product/B000CED24U/
※ワイヤーの皮むき(銅線の取り出し)用です
※自分は赤い方(径の大きい方)を購入しましたが
 黄色い方(径の小さい方)が、電子工作には向いてそうです

■ ラジオペンチ・ニッパー・ピンセット
http://www.amazon.co.jp/dp/B001YHLPXY/
http://www.amazon.co.jp/dp/B002F9MQHY/
http://www.amazon.co.jp/dp/B0036RSP4W/
※銅線を切ったり、部品をつまんだりする際に
 ラジオペンチ辺りは必要ですが、ニッパーやピンセットは、
 無くても困ることは、本件に関しては、ほとんどありません
※とはいえ、あれば便利です

■ ワニ口クリップコードセット(10本セット)
http://www.amazon.co.jp/gp/product/B0014US43A/
※はんだ付け前の配線確認(仮留め)などに便利です

■ 工具ケース
http://www.amazon.co.jp/gp/product/B0013L0XI4/
※工具類をダンボール等に雑多に放り込んでおいてもいいのですが
 やっぱこの手の工具箱があると便利です。
 どのポケットに何を入れるか悩んだり、
 ケース1つだと、工具全部は収まらなかったりしますが
 その辺を工夫するのも、楽しみのひとつかも知れません
http://item.rakuten.co.jp/zakkayafree/le008/
※雑多に放り込むなら↑こういうのでも良いかもです

はんだ付け

基本ブレッドボードで組み立てますが、
押しボタンへの配線などに、はんだを使った箇所もあります。
ジャンパワイヤの銅線を端子部にグルグル巻きにしてやれば
はんだ無しでもいけますが、「せっかくの電子工作だし…」という
とても曖昧な目的で購入しました。

取り扱い注意な工具ではありますが、
銅線を繋いだり、基盤への配線など、やっぱりあると便利です。
※基盤への配線時などは、やはりこれが無いと始まりません

■ はんだこて
http://www.amazon.co.jp/dp/B0016VDGM6/

■ はんだこて台
http://www.amazon.co.jp/dp/B0016V7JOC/

■ 電子工作用はんだ
http://www.amazon.co.jp/dp/B0029LGANO/

■ はんだ吸取り線
http://www.amazon.co.jp/dp/B001PR1KPG/
※はんだ付けをやり直したい場合に重宝します

■ ヒートクリップ
http://www.amazon.co.jp/dp/B001PR1KNS/

その他

■ Raspberry Pi用 microSDカードアダプタ
http://www.amazon.co.jp/gp/product/B00J84T6HW/
※SDカードの出っ張りが気になったので、購入しました
※ただし、USB電源部がどうしても出っ張るので、
 ココの出っ張りを解消しても、実はそれほど小型化しないです
※また、上記のケースを利用する際、ケース側を少し削る必要があります
 削るのがそれなりに手間ですし、むしろSDカードが筐体から飛び出ている方が、
 メカっぽくて良いかもしれないので、導入するかどうかはお好みで

■ LANケーブル 『ELECOM LANケーブル 10m』 約1300円
http://www.amazon.co.jp/dp/B00B5NKDT4/
※自分は、かなり離れた所にルーターがあったので10mを用意…
※はじめからWi-Fiで接続してしまえばいいので、
 ぶっちゃけ必要ありませんが、Wi-Fi接続できない場合などの
 不測の事態に備えて、持っておくと良いかと思います
※もちろん、お手元に既にあれば、改めて購入する必要はないです

■ Raspberry Pi クーリング・ファン+銅製ヒートシンク3個
http://www.amazon.co.jp/dp/B00EUXQYYE/
※ハンダ付けが必要になりますが、これを取り付けるだけで
 見た目がグっとパソコンっぽくなります
※オーバークロック用に購入しましたが、個人的には
 どちらかというと見た目上の効果の方が大きいです
※白いコードは使用しません
 黒と赤のコードをハンダで基盤に取り付けます
 取り付け先はAmazonの画像に記載がありますが、
 私はそれとは別のP5header部にある5V0とGNDに繋ぎました
 (P5header部に関しては、参考URLの“RPi Low-level peripherals”リンク参照)

■ タミヤ瞬間接着剤 (使いきりタイプ)
http://www.amazon.co.jp/gp/product/B001UDP2B8/
※クーリング・ファンをヒートシンクに固定する際に使用しました

配線はこんな感じになった

上記のアイテムを揃え、試行錯誤の配線の末、
以下のような配線になりました。(ドングルやキーボード等は省略)

配線

これで、「どこでもパトランプ」の完成です!

やりました!

持ち歩くことはきっとないけど、作れることが重要です☆

※ちなみに、ネットへの接続は、スマホのテザリング機能を利用しています

Raspberry Piの各種セットアップ

Raspberry Pi起動までの道のり

起動までにやるべき事は大きく分けて、以下5ステップ。
・OSイメージのダウロード
・OSイメージをSDカードへコピー
・ラズパイ本体に、各種ケーブル(HDMI、LAN、キーボード)を接続
・SDカードをラズパイ本体に刺す
・起動

SDカードへのOSコピーまで道のりが、やや手間かもしれませんが、
そこを越えてしまえば、後は何てことないので我慢です。

Raspberry Piの各種セットアップ方法は、Webでも書籍でも既に豊富に情報が揃ってますので、
ここではざっくりとだけ説明します。

ちなみに本ページでは、OS Imageは Rasbian を前提に記載していきます。

※普段、CentOSを使っているので、はじめはPidoraを使っていたのですが
 Rasbianに比べ、Pidoraは情報がまだまだ少なく、ハマりポイントが多かった為
 あえなく断念し、Rasbianでの実現を目指しました

お手持ちのパソコンが、Windows か Mac かで、やり方は異なりますが、
特にハマることなく、SDカードの作成までは可能かと思います。

以下、お手持ち(SDカードが読み書きできる前提)のパソコンに応じて
WindowsかMacかの、どちらかの作業を選択してください。

WindowsでSDカードを作成する場合

Raspberry Piの公式サイト http://www.raspberrypi.org/downloads/ から
RASPBIAN( Debian Wheezy )のOS Imageをダウンロードします。
(700MB程度あるので、けっこう時間かかります)

また、SDカードへOS Imageを焼く為に、
Win32 Disk Imager http://sourceforge.net/projects/win32diskimager/
ダウンロードし、インストールしておきます。

OS Imageのダウンロードと、Win32 Disk Imagerのインストールが完了したら、
インストールした Win32 Disk Imager を“管理者権限”で実行します。
※アイコンの右クリックで選択できるはずです

OS Imageの選択とSDカードを刺したドライブを選択したら
[Write]ボタンで、焼き込み開始です。
※10分程度で完了するかと思います

これで、SDカードの作成は完了です

MacでSDカードを作成する場合

基本的には、Windowsと同じで
「OS Imageのダウンロード」と「OS ImageをSDカードに焼く」の
2ステップです。

私がMacでSDカードを作成した際は、
↓こちらのサイトを参考にさせて頂きました。

Raspberry Pi で最初にインストールしてやること
http://takuya-1st.hatenablog.jp/entry/2013/08/08/035313

MacでのSDカード作成の手順は、上記ページをご参照ください。
ハマりポイントも特には無いかと思いますので、
SDカードの作成方法の説明は、ここまでにしておきます。

※あまり使わないソフトをインストールしないといけないデメリットはありますが、
 個人的には、Windowsの方が手間は少ないイメージでした

さっそく起動

SDカードの作成が済んだら、早速 Raspberry Pi を起動してみましょう。

起動までの作業で気を付けるべき事は、
ケーブルやSDカードがちゃんと刺さっていることを確認する事と、
電源を最後に入れる(電源USBを最後に差し込む)という事の2点かと思います。

Raspberry Pi の各種設定

設定

初回起動時は、いきなり各種設定画面が表示されるので、
ココで適宜設定を行うことになります。

が、今回はパトランプ以外のことは特にやらない前提で
・Expand filesystem
・Internationalisation Options > Change Keyboard Layout > Generic 105-key (Intl) PC > Others > Japanese > Japanese
の2点のみ行いました。

この設定を終えたら、一度再起動します。

再起動後、ログインプロンプトが現れます。
ココで入力する情報は以下の通りです。

Login User: pi
Login Password: raspberry

※これがデフォルトのユーザーIDとパスワードです

Wi-Fiの設定

面倒なのでGUIでやってしまいます。

ログイン後、GUIを立ち上げます。

$ startx

大きなラズベリーのイラストが背景のデスクトップが表示されましたでしょうか。

せっかくなので、「Python Games」でゲームを楽しんだり、
「Scratch」で、プログラミングを楽しんだりしても良いのですが、
それこそ書籍にもWeb上にも、その辺の情報はいくらでもあるので
ここでは触れません。
※そもそも目的も違いますが、やっぱりせっかくなので色々遊んでみても良いと思います

以後の操作は、基本、このGUI画面で作業すると効率が良いかと思います。

GUIの方が良い理由としては、
Webで情報を検索しながら、各種設定ができる(コピペができる)点です。

「midori」と書かれたアイコンがブラウザーです。
「LXTerminal」と書かれたアイコンが、CUIターミナルになります。

ブラウザーでこのページを開き、
ターミナルにコードをコピーペーストすれば、
あっという間に「どこでもパトランプ」を実現できます。

さて、ちょっと脱線しましたが、
Wi-Fiの設定の話しに戻ります。

Wi-Fiアダプターは勝手に認識してくれるので、
後は、下の図のように適宜Wi-Fiの設定をしてあげます。

Wi-Fi

これで、Wi-Fiの設定は完了です。

ブラウザを立ち上げるなりして、ネット接続に成功したか確認しておきましょう。

Bluetoothの設定

「せっかくだから、可能な限りワイヤレス化したい」
と考え、キーボードもワイヤレス(Bluetooth)化する事にしました。

設定方法は、下記のサイトを参考にしました。

RasPiでBluetooth - ThinkPad Compact Bluetooth Keyboard with Trackpointを使う
http://www.hayashiisme.jp/codeismymealticket/2014/04/raspibluetooth---thinkpad-compact-bluetooth-keyboard-with-trackpoint.html

キーボードは、必要な時に付けたり外したりすればいいので、
ムリにBluetooth化する必要はないかと思います。

チェックスクリプトの起動まで済ませて、
USBキーボードを抜いてしまえば、持ち歩くことは可能ですので
キーボードをワイヤレス化するか否かは、お好みでOKかと思います。

WiringPi のインストール

Raspberry Piといえば、電子工作。
むき出しの26本のピン。

このピンで電子機器を制御するわけですが
コマンドラインや各種プログラミング言語から簡単に制御する為の
ライブラリをインストールしましょう。

ここから先の作業はすべて、root権限でやってしまいます。

「LXTerminal」を開いて、下記の通りコマンドを打ちます。

$ sudo -i
# apt-get install git-core
# cd /usr/src
# git clone git://git.drogon.net/wiringPi
# cd wiringPi
# ./build

インストールが完了したら、念のため、バージョンをチェックしてみます

# gpio -v

パトランプを回してみる

パトランプを回すだけなら、ここまでの準備で完了です。

配線とプログラミング

前述の図を参考に配線を行い、以下のC言語プログラムをコンパイルします。

※エディタはお好みで。vi に慣れてない方は nano が良いかもしれません。
 nanoについては、↓こちらのページが分かり易そうでした。
 「誰も興味が無いnanoの基礎の基礎 - nanoはpicoの千倍なの! -」
 http://tech.kayac.com/archive/nano-tutorial.html

/root/patramp.c
#include <wiringPi.h>
#include <stdio.h>
#include <time.h>

#define PIN0 0
#define BTN 3
#define ALERTSEC 60

int main (void){

  int inpt = 0;
  time_t init = time(NULL);
  time_t now;
  int timer;

  wiringPiSetup();
  pinMode(BTN,INPUT);
  pinMode(PIN0,OUTPUT);

  while(1){
    now = time(NULL);
    timer = now - init ;
    inpt = digitalRead(BTN);
    printf("%d\n",timer);
    if( inpt==1 && timer < ALERTSEC ){
      digitalWrite(PIN0,0);
    }else{
      digitalWrite(PIN0,1);
      break;
    }
    usleep(10000);
  }
  return 0;

}

いざコンパイル

$ gcc patramp.c -lwiringPi -o patramp

いざ実行

GPIOの操作には root権限 が必要なので、root権限で実行します。

# ./patramp

60秒間パトランプが回り続け、停止までの60秒を待たずとも
ボタンを押すことでパトランプを止めることができます。

アラートメールをチェックして、パトランプを回す

アラートメールの確認方法

アラートメールの受け口は Gmail にします。
Gmail で受け取ったアラートメールに、自動振り分けでラベルを付け、
Gmail APIで、そのラベルの新着メール(未読)数を取得する、
という方法で、アラートメールを検知する仕組みにします。

Gmailでの自動振り分け設定

まずアラートメールを受け取るGmailアカウントに
メールサブジェクトを"alert"という5文字にして、
本文のないメールを送っておきましょう。

次に、
ブラウザから、送り先のGmailアカウント(アラートメールの受け口アカウント)にアクセスし、
今届いたサブジェクト"alert"のメールを開きます。

そして、画面上部、検索窓下の[その他▼]ボタンから、[メールの自動振り分け設定]を選択します。

フィルタ設定画面が開くので、
「件名」に「alert」と入力し、他は空欄にして、[この検索条件でフィルタを作成 >>]をクリックします。

アクション設定画面に切り替わったら、
「ラベルを付ける」という項目の「ラベルの選択」をクリックし、「新しいラベル…」を選択、
新しいラベル名に「alert」という5文字を入力し、[作成]を押下します。

アクション設定画面に戻ったら、「ラベルを付ける」にチェックが付いている事を確認し、
[フィルタを作成]を押下します。

これで、「alert」ラベルの作成と自動振り分け設定は完了です。

※実際には、アラートメールとして検知したいメールに「alert」ラベルが付くように
 自動振り分け設定をしてください。
 上記は、メールサブジェクトが「alert」のメールを検知する場合の設定例です。

定期チェックし、新着があればパトランプを回す

Gmail APIでメールチェックした結果をperlに渡し、新着(未読)があった場合に
上記で作成したパトランプを回す実行ファイルを叩くシェルスクリプトを作成します。

※以下は、1分間隔で確認する例

/root/check.sh
#!/bin/bash

while sleep 60 ;
do
   curl -u (Gmailカウント):(Gmailアカウントのパスワード) -silent https://mail.google.com/mail/feed/atom/alert/ \
   | perl -ne 'if(/fullcount>(\d+)<\/fullcount/){ print $1."\n"; if($1){ system("/root/patramp"); } }' ;
done

※パスワードをスクリプトにべた書きするのが、いささか気持ち悪い感じですので
 OAuthを使った認証方法を利用した方が良いかもしれません。
 あるいはスクリプトを工夫して、パスワードだけは、
 スクリプト実行時に手入力させるようにしても良いかもしれません。
※feed/atom/alertの alert という部分がラベル名ですので、
 この部分を変更することで、チェックするラベルを変更することも可能です

作成したチェックスクリプトに、実行権限もつけてあげましょう。

# chmod +x /root/check.sh

では早速、定期チェックを開始してみます。

# /root/check

0 という数字が、一定感覚で画面に1列に表示されていきます。
この状態がアラートメールを監視している状態です。

試しに、アラートメールを上記で設定したGmailアカウントに投げてみましょう。
定期チェックで、アラートメールが検知され、パトランプが回り始めるはずです。

おめでとうございます!!

これで、アラートメールを検知して、パトランプが回す事ができました!

パトランプを持ち歩く

パトランプを回すところまで出来ましたので、いよいよ最後の仕上げです。

持ち歩くために、ディスプレイと電源を変更します。

電源は、スマホ等に使うモバイルバッテリーでいけました。

小型ディスプレイに変更

ディスプレイは、Sainsmastの1.8インチTFTディスプレイを使用してみます。
ログインして、シェルスクリプトを叩くだけなので、1.8インチの小型ディスプレイで十分こと足ります。

GPIOからの出力を使い、小型ブレッドボードに載せました。
配線は前述の通りです。

このTFTディスプレイを Raspberry Pi に認識させるためには、
実は、カーネルのリビルドが必要です。

当初自分は、Raspberry Pi上でのリビルドに試みましたが、
10時間以上かけてビルドしたにも関わらず、上手く動作せず、
心折れそうになりながらも、他のマシン(EC2上の仮想マシン)上でクロスコンパイルをしたりして
試行錯誤を繰り返し、なんとかこのディスプレイ上にコンソールを表示させる事に成功しました。

詳しいやり方は下記のサイトに記載があるのですが…

Adafruit/SainSmart 1.8" TFT LCD display for Raspberry Pi
http://www.whence.com/rpi/

散々試行錯誤した後で気づいたのですが、
↓こちらのサイトに、リビルドされたモノがアップされていました…

RASPBERRY PI AND TFT DISPLAY
http://ozzmaker.com/2012/11/23/raspberrypi-tft/

「1.8TFT Kernel (36.2 MiB)」というリンクが、リビルド済みのカーネルになります。

リビルドするのは、かなり手間なので、これを使わない手はないです。

具体的には以下の手順で行けます。

# cd /usr/src
# wget http://ozzmaker.com/download/1.8TFT_Kernel_3.6.11.tar
# tar xvf 1.8TFT_Kernel_3.6.11.tar
# mv /lib/modules{,.bkup}
# mv /lib/firmware{,.bkup}
# mv /boot/kernel.img{,.bkup}
# cp -a lib/modules /lib/
# cp -a lib/firmware /lib/
# cp boot/kernel.img /boot/kernel.img

これで、カーネルイメージやモジュール・ファームウェア群が、
Sainsmastの1.8インチTFTディスプレイに対応したモノに切り替わりました。

※ただし、カーネルのバージョンが旧バージョンの3.6.11になり、
 モジュールやファームウェアが旧バージョンになってしまう為、
 場合によっては、Wi-FiアダプターやBluetoothアダプター等が認識されなくなる可能性があります。
 ですが、前述の「用意したモノ」リストに記載したアダプタ等は、
 旧バージョン3.6.11でも、問題なく認識されました

これで超小型ディスプレイに、コンソール表示できるようになったわけですが、
せっかくなので、起動時の画面から、小型ディスプレイの方に出力されるように
設定を変更してしまいましょう。

具体的には、以下のように /boot/cmdline.txt の末尾に、
半角スペースを空けて、"fbcon=map:10"という一文を追加します。

# vi /boot/cmdline.txt
# cat /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait fbcon=map:10

これで、再起動後のboot画面は、HDMI側ではなく、
小型ディスプレイの方にメッセージが表示されるようになります。

また、画面が極端に小さくなるので、プロンプトの表示も、
以下の通り、読み易いように少し改良してあげます。

# echo 'export PS1="\[\e[00m\]\W\[\e[1;32m\]\\$\[\e[1;37m\] "' >> /home/pi/.bashrc
# echo 'export PS1="\[\e[00m\]\W\[\e[1;32m\]\\$\[\e[1;37m\] "' >> /root/.bashrc

これで、いくらか読み易いプロンプトになるはずです。

ここまで終わったら、早速再起動してみましょう。

# reboot

再起動時は、HDMI側にはじめの数行だけbootメッセージが表示され、
途中からは全て、小型ディスプレイの方に表示されるようになります。
※グレーカラーでちょっと読みづらいですが…

ログインプロンプトも、小型ディスプレイの方へ表示されますので、

Login User: pi
Login Password: raspberry

で、ログインしてみましょう。

緑色の $ プロンプトが出たら、作業は完了です。

あとは、HDMIのケーブルを外し、USB電源もモバイルバッテリーへ切り替えて
以下のコマンドを叩いて、好きなところに持ち運びましょう。

$ sudo -i
# /root/check.sh

アラートメールが届けば、パトランプが回ります。

いつでも、どこにいても、アラートメールが届けば、パトランプは回ります。

ファンファン言いながら。

最後に

この「どこでもパトランプ」を作るにあたり、
ラズパイハッカソンに参加させて頂き、色々と助言を頂きました。

会の進行役を務めた『ラズパイマガジン』を出版されている日経Linuxさんや
会場を提供して頂いたリレーションズ株式会社の皆さま、
そしてハッカソンに参加された皆さま、貴重なご意見ありがとうございました。
※あと、ビールもご馳走さまでした☆

ご覧になられるか分かりませんが、この場を借りて御礼まで。

参考URL

Raspberry Pi 関連

RPi Low-level peripherals
http://elinux.org/Rpi_Low-level_peripherals
※GPIO各ピン等の配置や、制御プログラミングサンプル等

Raspberry Pi GPIO Pin Layout
http://raspberrypi.znix.com/hipidocs/topic_gpiopins.htm
※GPIOとWiringPiの対応表があります

「Raspberry Pi」で何やろぉ (15:ファンを付けてみた)
http://micono.cocolog-nifty.com/blog/2013/09/raspberry-pi--2.html
※クーリングファンの取り付け時に参考にさせてもらいました
 ケースの自作なんかも、面白そうですね

Raspberry Piで遊ぼう [No.9:音楽ファイル(mp3)を再生してみよう]
http://assimane.blog.so-net.ne.jp/2013-04-01
※今回は触れてませんが、パトランプを回すと同時に
 mp3で音なんかを流そうかと思い、このページを参考にさせて頂きました
※とはいえ、イヤフォンジャックからの出力では音量が小さく、
 パトランプの回転音に負けてしまうので、アンプを作るなどする必要がありそうです

Raspberry PI – getting audio working
http://cagewebdev.com/index.php/raspberry-pi-getting-audio-working/
※「mpg321で“unknown pcm cards.pcm.front”的なアラートが出る場合に見よう…」
 というメモと一緒に残っていたURLメモですが、どういう意図だったか思い出せません…

Gmail API 関連

Gmailの新着メールをRSSリーダーでチェックする
http://bizmakoto.jp/bizid/articles/0609/25/news031.html
※Gamil API でメールチェックをする方法など

Google Data APIs - FAQ
https://developers.google.com/gdata/faq
※Gmail API の公式ドキュメントかな?

SainSmart 1.8" TFT LCD display 関連

Adafruit/SainSmart 1.8" TFT LCD display for Raspberry Pi
http://www.whence.com/rpi/
※SainSmart1.8TFT(SPI)のドライバ本家?

RASPBERRY PI AND TFT DISPLAY
http://ozzmaker.com/2012/11/23/raspberrypi-tft/
※SainSmart1.8TFT(SPI)の設定方法。
 ↑よりも分かりやすく、ビルド済みのカーネルイメージ等が置いてある

Raspberry PiでOSをインストール
http://www.pc-links.com/blog/raspberrypi/setup/
※オーバークロックして、SainSmart1.8TFT(SPI)を使用しようとすると
 起動時にkernel panicしてしまう問題が発生する場合があります
 この問題を解消する為に、このページに記載のあるやり方を試したところ
 上手く起動するようになりました (本当に助かりました…)
※詳しくは「モニタ設定とオーバークロック設定」の項参照
※具体的には以下のような感じに /boot/config.txt を編集します

/boot/config.txt
# arm_freq=1000
arm_freq=950

# core_freq=500
core_freq=450

# sdram_freq=600
sdram_freq=450

電子工作 関連

零からの電子工作
http://www.nicovideo.jp/mylist/21945950
※鬼のように分かりやすい電子工作の動画教室です
※押しボタンの部分で利用する「プルアップ抵抗」の説明もあります
 この抵抗を入れないと、正常に動作しません

カラー抵抗値の写真早読み表!
http://part.freelab.jp/s_regi_list.html
※写真?付きで分かりやすい

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.