Raspberry Piでダッシュボードを作る(5) -温度・湿度(センサ)-
Raspberry Piとミニディスプレイ,各種センサを使ってダッシュボードを作ります.
- Raspberry Piでダッシュボードを作る(1) -準備-
- Raspberry Piでダッシュボードを作る(2) -真っ白ダッシュボード-
- Raspberry Piでダッシュボードを作る(3) -デザイン-
- Raspberry Piでダッシュボードを作る(4) -天気予報-
- Raspberry Piでダッシュボードを作る(5) -温度・湿度(センサ)- ←イマココ
今回のゴール
- 室内の温度・湿度を表示する.
センサの調達
Raspberry Pi本体にセンサはありませんが,GPIO(General Purpose Input/Output: 汎用入出力)用のピンが40ピン*1配置されています.このピンを使って,センサ類に電源を供給したり,通信したりすることが可能です.というわけで,センサを調達します.
(余談… これまでソフトウェアにしか縁がなく,センサなどの電子部品を扱うのは難しいと思っていました.が,やってみると案外難しくありませんし,「Raspberry PiでXXをやってみた」系の記事もたくさん見つかります.特に今回は工具不要で刺すだけ繋ぐだけです.心配はいりません!)
材料
(リンクはすべて秋月電子通商にジャンプします)
温湿度センサ 温湿度を測定するためのものです.I2Cという通信方式に対応していて,読み取りが比較的容易です.
ブレッドボード 電子部品の実験用パーツです.たくさん穴が空いていて,一定のルールで電気的に繋がっています.ここに部品やケーブルを繋いで,回路を組み立てます.
ジャンプワイヤ 電子部品どうしを繋ぐケーブルです.今回はRaspberry Piとブレッドボードを繋ぐために使用します.
配線
Raspberry Piの電源を切っておきます.Raspberry Piのピン配置図やAM2320のデータシート(秋月のページにPDFへのリンクあり)を参照しつつ,配線します.
I2C有効化
標準でI2Cが無効になっているため,まずは有効にします.設定はGUI/CUIいずれでも可能です.設定が終わったら,念のため再起動しておきましょう.
参考: 最近の Raspberry Pi で I2C を有効化 - Rabbit Note
読み取り
温度と湿度を読み取ります.I2Cは,複数の電子部品(デバイス)と通信できるように,「デバイスのアドレス」と「データ」をセットで通信します.データ(バイト列)の内容はデバイスによって様々です.
本当はデータシートをじっくり眺めるべきところですが,幸いAM2320は接続例が多数あります.そうした情報を活用しましょう.
参考: 温湿度センサAM2320をRaspberry Pi 3で使用する|wizqro.net
Pythonの登場
今回はRubyではなくPythonというプログラミング言語が登場します.Python 3系が新しいので,こちらをインストールしましょう.
$ sudo apt-get install python3 python3-smbus $ python3 (Python 3.x系が起動する.quit()またはCtrl+Dキーで終了)
参考ページのスクリプトをファイルに書き込み,実行してみましょう.
(read_temphumid.pyとして作った場合) $ python3 read_temphumid.py 59.0 20.8
1行目が湿度,2行目が温度です.読み取れました.
ダッシュボードへの追加
ダッシュボードはRubyスクリプト,温湿度の読み取りはPythonスクリプト.
ここはちょっと無理矢理ですが,RubyスクリプトからPythonスクリプトを実行することで,温湿度をダッシュボード上に表示していきます.
先ほどのread_temphumid.py
は,ダッシュボードのapp.rb
と同じディレクトリに置いておきます.そして,views/index.erb
を編集します.
<div class="card"> <h4 class="card-header text-white bg-success">温湿度</h4> <div class="card-body"> <% data = `python3 read_temphumid.py`.split(/\n/) humidity = data[0] temperature = data[1] %> <p class="card-text"> 気温: <%= temperature %>℃<br> 湿度: <%= humidity %>% </p> </div> </div>
ダッシュボードを表示しましょう.温度・湿度が表示されました.
今回はここまで.
*1:古いモデルは26ピン