室外温度計を作る(その1)


以前から室外温度計を作りたいと考えていましたが、我が家はマンションなので、センサー類を室内から外に出す隙間がまったくありません。
賃貸なので勝手に穴を開けるわけにもいかず、そこで、思い切ってRaspberryそのものを外(ベランダ)に置くことにしました。
幸いにもベランダに電源コンセントがあり、テストしたところ、窓を閉め切っても室内の無線ルータにWifiの電波が届くことが分かりました。
Raspberryで取り込んだ温度の表示ですが、使わなくなったタブレットをモニターとして利用することにしました。

イメージを以下に示します。


@BMP085などの温度計を使ってRaspberryで外気温度を測ります。
A温度データをJPEG形式のイメージファイルに変換します。
BJPEGファイルをGoogle DriveやDropboxにアップロードします。
C居間のタブレットでJPEGファイルを表示します。

【STEP1】温度計の準備

温度計としてはi2c接続のBMP085を使いました。
BMP085を使った温度の測定はこちらこ ちらなど、いろいろなところで紹介されていますので、
そちらを参考にしてください。

【STEP2】パッケージと日本語フォントのインストール

温度データをJPEG形式のイメージファイルに変換するための画像編集ソフトとしてはImageMagickを使います。
また、フリーの日本語フォントもインストールします。

$ sudo apt-get install imagemagick
$ sudo apt-get install ttf-kochi-gothic ttf-sazanami-gothic
$ sudo apt-get install ttf-kochi-mincho ttf-takao-mincho

日本語フォントは以下のディレクトリにインストールされます。

$ cd /usr/share/fonts/truetype/
$ ls -R
./kochi:
kochi-gothic-subst.ttf  kochi-gothic.ttf  kochi-mincho-subst.ttf  kochi-mincho.ttf

./sazanami:
sazanami-gothic.ttf

./takao-mincho:
TakaoExMincho.ttf  TakaoMincho.ttf  TakaoPMincho.ttf


【STEP3】背景イメージの準備

「素材 フレーム」などで検索するとフリーで使えるフレーム画像が沢山公開されていますので
気に入った背景イメージを準備してください。
Windowsのペイントなどを使って、オリジナルの背景イメージ(JPEGファイル)を作っても構いません。
私はこちらの ページから以下の背景イメージを利用させていただきました。



【STEP4】イメージファイルの作成

以下のコマンドで背景として使うイメージファイルに文字を埋め込みます。

convert -font フォントのパス -pointsize 文字の大きさ -fill "文字の色" -draw "text 表示位置(X),表示位置(Y)
'表示したい文字'" 背景として使うイメージファイル 出力するイメージファイル

実際のコマンドは以下の様になります。

$ convert -font /usr/share/fonts/truetype/kochi/kochi-mincho.ttf -pointsize 200 -fill "blue" -draw "text 10,20 '現在の室外温度'" back.jpg out.jpg

温度計から取り込んだ温度(文字)をイメージファイルに埋め込むスクリプトを作成します。
実際のスクリプトを以下に示します。
文字の色、フォント名は適当に変更してください。

#!/bin/bash
temp=`sudo /home/pi/BMP085-2/readBMP085 -t`  → この部分はお使いの温度計センサーに合せて変更してください。
#整数値に変換
itemp=`echo $temp |cut -d. -f1`

tlen=${#temp}
if [ $tlen -eq 3 ];then
    temp=" "$temp
fi
temp=$temp"℃"

#温度に応じて文字の色を決定
if [ $itemp -le 0 ]; then
    color="darkblue"
elif [ $itemp -le 10 ]; then
    color="blue"
elif [ $itemp -le 20 ]; then
    color="green"
elif [ $itemp -le 30 ]; then
    color="orange"
else
    color="red"
fi

convert -font /usr/share/fonts/truetype/kochi/kochi-mincho.ttf -pointsize 50 -fill "blue" -draw "text 50,80 '現在の室外温度'" /home/pi/frame0001.jpg /tmp/out1.jpg
convert -font /usr/share/fonts/truetype/kochi/kochi-mincho.ttf -pointsize 130 -fill "${color}" -draw "text 50,250 '$temp'" /tmp/out1.jpg /tmp/out2.jpg


スクリプトの結果、こんなイメージファイルが出来上がります。


続く