外出先から自宅の温度や部屋の様子を見られるようになる?
今回ブログで取り上げるのは、世界中で大ヒットしている小型コンピュータのRaspberry Piです。販売台数が250万台を超えたというニュースも飛び込んで来るほどで、発売から2年が経過した現在でもその人気は健在です。5,000円あればお釣りが来る手頃な価格と、工夫次第で様々な装置を接続することができるので、特に電子工作のできる方にとっては興味の尽きないガジェットではないでしょうか。
筆者もそんなRaspberry Piを試してみたくなりアキバで実機を購入し、スマホやタブレットなど馴染みのあるデバイスと連携して面白いことができればと思っていました。今回はRaspberry Pi先達ユーザの力をお借りして、Raspberry Piに温湿度計とカメラモジュールを接続した環境監視システムを作ってみました。無線でネットワークに接続したりする方法なども試してみましたので、併せてご紹介します。
「会社から自宅にいる赤ちゃんの様子を見たい」「気温や湿度の変化に敏感なペットの様子が見たい」といったニッチな需要があれば、お役に立てるかもしれません。
取り組みイメージ
イメージとしては下図のようになります。
スマホやタブレットから自宅にあるRaspberry Piが拾った温湿度や映像を見られるようにします。Raspberry PiにグローバルIPアドレスを持たせてWebサーバを立てることもできますが、その方法ではIPアドレスを知られてしまうとだれでも簡単にアクセスできてしまうので、アクセス制限をかけるなどの工夫が必要です。もしくは、以前こちらの記事で紹介したOpenVPNを使えばRaspberry PiをLANに設置した場合でも外部から安全にアクセスできるようになります。
何ができるのか?いいところは?
- 温湿度情報をTwitterのタイムラインに投稿したりWebページに書き込むことで、TwitterアプリやWebブラウザから温度と湿度を確認することができます
- Raspberry Piのカメラモジュールを使って、5メガピクセルの高精細画像や映像を撮影することができます
(静止画像の解像度: 2592 x 1944、最大動画解像度: 1080 p、最大フレームレート: 30 fps)
カメラは赤外線を感知するタイプのものもあるので、それを使えば暗視カメラとしても使うことができます。また、Raspberry PiはGPIO(汎用入出力)ポートを搭載しているので、こちらのブログのようにスマート家電のような仕組みを安価に実現できる可能性もあります!(夏場の暑い日に、自宅クーラーの電源をスマホで入れるなど)
使ったもの
今回使ったものは以下の通りです。Raspberry PiはOSイメージをSDカードにコピーして使う必要があるので、今回は弊社で販売しているWise SDHC UHS-Ⅰカード(好評につき残りわずかです!)を使ってみました。
- Raspberry Pi Model B(512MBメモリ)
- Wise SDHC UHS-Ⅰカード 32GB
- Raspberry Pi Camera Module
- USB接続 温度・湿度計モジュール
- WLI-UC-GNM2(無線LAN子機として)
- Wireless Combo MK270(キーボードです、安価でとても使いやすいです!)
—————————————————————————————————————————————————
Wise SDHC UHS-Ⅰカードは、デジタル一眼レフカメラなどでも使うことができます。Amazonでベストセラーになっている「Transcend SDHCカード 16GB Class10」と速度に違いが出るのか試してみました。Raspberry Pi側の限界があるためほとんど差は見られませんでしたが、ほんのわずかに「Wise SDHC UHS-Ⅰカード」の方が早いようです。
Transcend SDHCカード 16GB Class10
—————————————————————————————————————————————————
実際に行ったこと
- Raspbian(Raspberry Piで使うOS)のインストール
- コンデンサ、ヒートシンクの追加
- 無線LANアダプタのネットワーク設定
- MJPG-streamerのインストール
- Twitterへ温度と湿度を投稿するための設定
Raspberry Piで使うOSのイメージは、OpenFrameworksで有名な田所淳さんのWebサイトにあったものを使わせて頂きました。
http://yoppa.org/blog/5143.html
1.Raspbianのインストール
Raspberry Pi財団のWebサイトからNOOBSをダウンロードして、OSのイメージを作成するという手順が一般的なようですが、今回はMacOSXで「RPi-sd card builder v1.2」というアプリケーションを使いディスクイメージ(.img)をSDカードに書き込みました。「RPi-sd card builder」を使ったディスクイメージの書き込みについては以下のサイトを参考にしました。
Raspberry Pi初心者のためのOS別セットアップガイド
http://www.lifehacker.jp/2013/02/130226raspberry_pi_guide.html
Windowsの場合は、「Win32DiskImager」というアプリケーションを使います。こちらは操作も非常に簡単でオススメです。イメージを複製(量産)する場合は「Win32DiskImager」の方が便利です。以下のブログを参考にさせて頂きました。
[Raspberry Pi]SDカードのディスクイメージを複製する
http://blog.o24.me/?p=305
書き込みが終わったあと、SDカードをRaspberry Pi本体に差し込み電源を入れたところ正常に起動しました!
2.コンデンサ、ヒートシンクの追加
無線LANアダプタを使ってLANケーブルなしでネットワークに接続をすることを考えましたが、無線LANアダプタ自体がかなり電力を消費してしまうようで、接続の不安定さが気になりました。そこでコンデンサを追加し、電源の供給能力向上を試みました。以下のブログでコンデンサを増設されている方がいたので、参考にさせて頂きました。
RaspberryPiにコンデンサ追加で電源強化
http://blog.bnikka.com/raspberrypi/raspberrypi-capacitance.html
実際に取り付けてみるとこんな感じです。
コンデンサを増設してみても、まれに無線接続が不安定になることがありました。Raspberry PiからデフォルトゲートウェイにPingを送信し続けるなどした結果、少しは改善されるようでした。
次に、Raspberry Piを裸で使うのも良くない(踏んづけてしまうなど)のでケースを取り付けましたが、熱がこもってしまう心配があったのでチップにヒートシンクを付けてみました。
CPUの温度は若干下げることに成功しました。
ヒートシンク使用前 CPU温度
ヒートシンク使用後 CPU温度
3.無線アダプタのネットワーク設定
USBポートに接続した無線LANアダプタをOS側で使うためには設定が必要になります。
無線LANアダプタが認識されているかどうかはiwconfigコマンドで確認することができます。
無線LANに接続するためには、SSIDやパスフレーズなどの情報が必要です。まずはそれを調べます。
# iwlist wlan0 scan
SSIDがわかったら、wpa_passphraseコマンドで/etc/wpa_supplicant/wpa_supplicant.confに設定を行います。
# sh -c “wpa_passphrase SSID パスフレーズ >> /etc/wpa_supplicant/wpa_supplicant.conf”
設定ファイルに正しく反映されているか確認します。
$ cat /etc/wpa_supplicant/wpa_supplicant.conf
wpa_passphraseコマンドで入力した値が表示されていればOKです。
4.MJPG-streamerのインストール
Cameraモジュールで撮影した映像をネットワーク越しに見られるようにします。MJPG-streamerのインストールは以下のブログを参考にさせて頂きました。
Raspberry Pi用赤外線カメラPi NoIRの映像をandroidで表示してみた
http://neuralassembly.blogspot.jp/2013/11/raspberry-pipi-noirandroid.html
また、同ブログの著者の方が作られた「簡単MJPGビューア」を使わせて頂いたところ、Androidからカメラのライブ映像を見ることができました!
Webブラウザからも、「http://[Raspberry PiのIPアドレス]:8080/」でライブ映像を見ることができます。
5.Twitterへ温度と湿度を投稿するための設定
最後にTwitter経由で室内の温度と湿度を見られるようにします。設定方法は以下のブログを参考にさせて頂きました。USBの温度・湿度計モジュールも同じものを使用しました。
Raspberry Piで部屋の温度を定期的にTwitterに投稿
http://hitoriblog.com/?p=9835
# gem install twitter のところでつまづいてしまったので、# apt-get install ruby-dev を実行してから行ったところうまくいきました。
公開して頂いているrubyのスクリプトを実行するとエラーが出てしまったので、以下のように直してみたところ無事Twitterに投稿されました。
#!/usr/bin/ruby #coding:utf-8 require 'twitter' require 'pp' client = Twitter::REST::Client.new do |config| config.consumer_key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' config.consumer_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' config.oauth_token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' config.oauth_token_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' end def status() res = `usbrh`.split(" ") if (res.count > 1) return {"temp" => res[0], "hum" => res[1]} else return {"temp" => "0", "hum" => "0"} end end s = status() client.update("温度"+"#{s['temp']}℃ / 湿度#{s['hum']}%RH")
ツイートされた画面です。
温度26.34℃ / 湿度49.18%RH
— 温湿度計 (@usbrh) April 10, 2014
これで温度・湿度・映像の3つをスマホやタブレットから見られるようになりました!
Raspberry Piを使ってみてわかったこと
- 電源供給には2000mA対応のものを使うと安定します
- USBにたくさんデバイスを接続する時には、セルフパワーのUSBアダプタを使った方が無難かもしれません
- 使い込むほど色々な使い方が見えてきます!
操作には若干Linuxの知識が必要になりますが、電子工作がお好きなら一度試してみると面白いかもしれません。