現在の室温をtweetしよう

現在の室温をtweetしよう

IMG_20160503_1143357

連休に自宅サーバをこれまで愛用していたHP社製microserverからRaspberry Pi3へリプレイスしました。microserverでは地味にRAID1+0環境にしてたりして安心確実ストレージとなっているのですが、日常からHDDを4本も回してなくていいんじゃ?と言う事が事はじめです。とは言えストレージサーバとしてはとても信頼おける状態となっていますので、時折WakeOnLanで起こしてはバックアップ先として活躍して頂く予定で、普段使いはRaspberry Pi3につないだシングルのHDDでも問題ないよね、という感じです。

さて普通にLinux環境が動くRaspberry Piですのでサーバ構築はそれこそ鼻歌交じりで完了します。何も躓くところはありません。そしてコンパクトになり各種センサーを接続するGPIOが接続しやすく、となると色々センサー繋ぎたくなりますよね。
我が家ではCITIZENの電波時計をリビングや寝室に置いてあり、これには温湿度計が付いています。脱衣所や窓辺にはそれぞれ脱衣所の室温や外気温(屋根裏にも設置してあります)を測るための温度計を設置してありますが、それぞれ独立した温度計でその時々の温度しか知る事が出来ませんしその場に行かねばわかりません。
じゃあRaspberry Piを設置するリビング位Raspberry Piに計測させて遠隔でも見れるようにしたらいいよね。と言う事でこの連休に色々パーツを買いそろえて表題の通り室温をTweetするまで作りました。

さて、こんな事は実はすでに先人が多く通った道なのでGoogleで検索するといっぱい記事が見つかります。「Raspberry Pi BME280」あたりで検索してみてください。BME280は何かというと今回用いた温湿度センサーで1000円ちょっとする部品ですが、1チップで温度も湿度も気圧も測れてお得でおススメです。
今回Raspberry Pi以外に用意したものとしては

  • AE-BME280 (秋月電子製温湿度気圧センサー)
  • ブレッドボード(試作に大活躍)
  • ジャンパーピン(オス-メス)
  • ジャンパーピン(オス-オス)
  • 十字配線ユニバーサル基板

こんな感じです。その他にもLIS3DHと言う3軸加速度センサーも一緒に買って回路に組んでますが、今回の室温をTweetするのには関係ない部分なので割愛。

さて、回路を組んで試験する処までは こちらのページ がとても参考になります。むしろこちらのページだけで十分でこんなエントリー要らないくらい!

Raspberry Piでの準備

Raspberry Piに入れているOSにより準備が異なってきます。Raspbianであれば

これで設定画面が開きますのでAdvanced Optionを選びます。

01_advanced-options-1-1024x592

Advanced Optionの中にI2Cの設定がありますので、選択し有効化。これでI2Cが使えるようになります。

02_I2C-1-1024x589

またその他としてI2Cを扱うツールをインストールする必要があります。

これでまずは温度を取得するのに必要なツールがインストールされました。ここで一度再起動しておきましょう。

I2C通信の仕組みを知る

アナログセンサーを接続してアナログデータを取ったりした事はありますが、I2Cを触るのは初めてでした。センサー単体で動かしてよしよし、って言うページはとても多く見つかるんですが欲張りにセンサー2つ以上繋ぎたい場合は?となるとなかなかページ見つかりません。仕方ないのでI2Cについて調べたらなんの事はない、バス接続で良いと知りました。という訳で2つのセンサーを繋いでみよう、とこんな回路にして接続してみました。AE-BME280をI2C通信として用いるためにはJ3と書かれたジャンパを半田でショートさせる必要があります。ちなみにLIS3DHの場合は裏面のABC3つのジャンパをショートさせます。これらはそれぞれ添付のマニュアルにちゃんと記載がありますのでちゃんと確認しましょう。
なお今回両方のセンサーを繋ぐため以下のようになってますが、今回のお題である室温をtweetするだけであれば右側のセンサーは不要です。

{{< img src=”/images/2016/05/BME280-kairo-1.png” alt=”BME280-kairo” >}}

センサー側の接続が済んだらRaspberry Piに接続しますがI2Cはホットプラグ可能ですので電源入れたままで繋いで問題ありません。接続端子間違えないようにしましょうね。例えば今回のBME280もLIS3DHも電源電圧は3.3Vですのでうっかり5Vの端子に繋いじゃったりすると壊れてしまう可能性もゼロではありません。
接続したらi2cdetectコマンドを用いてraspberry piで接続を確認してみると

ばっちり認識されました。0x76の方が今回用いる温度センサーで0x18の方が今回用いない加速度センサーです。と言う事でI2Cに対応しているセンサーであれば測りたいセンサーをこんな感じでどんどん繋いで行ける!って事ですね。便利!

温度データを取得する

さて、I2Cデバイスとして認識するところまで来ました。いよいよここからデータを取りだします。本当はデータシートを読んで頑張らなくては本来いけない所なんでしょうけれども、 SWITCH SCIENCEさんが用意して下さっているスクリプト をまずは使って動作確認します。

このままツイートさせてもいいのですが加工したいのでスクリプトを修正

これで扱いやすいデータになりました。
所で実はここで校正データを入れてあります。114行目に”temp = temperature -4″とあり、ここの最後で値から4度引いています。これは何かというと組んだ回路で測定して誤差も少ない素晴らしいセンサーを使っているのですが、例えば近くにRaspberry Piと言う熱源がありますよね。ですのでここで表示される値が必ずしも我々の体感する室温か?というとたぶん高めに表示されると思います。ですのでいくつか温度計を用意して校正すると良いかと思います。

いよいよtweetする部分

Raspberry Piからscriptでtweetするのには ttytter と言うのが流行っぽいです。でもリンク先を見に行くとTTYtter is dead.とか書いてますね(汗)

ttytterの使い方は こちらのページが詳しい です。

インストールしてまずは認証画面を開きます。 途中 Press RETURN/ENTER to continue と言われるのでEnterを押しましょう。

すると認証用のURLが出てきますのでブラウザでその認証URLを開き、アプリケーション認証。出てくるPIN番号をまたTerminalに返してあげてください。
tweetするには

となりますので先ほどの温度取得pythonスクリプトで生成してあげればいいのですが他用途でもこの温度取得scriptは使っていますので(グラフを作成している)、別途簡単なshellscriptで先ほどのpythonスクリプトを叩いてtweetしています。

上記の通りsudoをscriptより実行していますのでroot_tweet.pyの実行はsudoersファイルを編集してNOPASSで実行できないと定期的に実行してくれません。あとはこれをcronで回すだけ!
気温測定のScriptとTweet部を別にしておく事でttytterが使えなくなったときの修正も楽ですし、特定の室温を超えたときだけtweetなんて条件文もちょちょいと書けていいかな。

こんな感じで定期的に室温をtweetしています。フォロワーさんの迷惑にならないように頻度は考えましょう。