Raspberry PiによるIoT(M2M)【I2C温度センサー/xively/Python】
そろそろRaspberry Piで「Machine to machine(M2M)」、「Internet of things(IoT)」をやっていきましょう。Raspberry PiではI2Cのインターフェースが準備されていますので、今回はこれを利用した温度センサーの読み込みからクラウドへのデータ連携までをやっていきます。【12/5追記】RPi側のスクリプトのNode.js版についてもご紹介していますので、興味があられる方はお合わせてご覧ください。【12/26追記】連携先クラウドをkintoneにしたケースが「cybozu.com developer network」のTipsとして掲載されました。
温度センサーはADT7410を使いたいと思います。Raspberry PiはRASPBIANのインストールとネットワークの設定まで終わっていれば問題ありません。
手順1 Raspberry Piとセンサーの結線
詳しい説明は省略させて頂きますが、次の回路図の通りに結線するとOKです。
手順2 I2Cの設定
(2015/3/10追記)I2Cの設定については、2015-02-16版のRASPBIANでDEVICE TREEを使った方法に変更になりましたので、この場合の設定方法についてはこちらをご覧ください。これ以前の方法であれば、このまま読み進めて頂いて、大丈夫です。
はじめに、/etc/modules
に、i2c-dev
を書き足します。
$ sudo vi /etc/modules
# (変更箇所のみ記載)
i2c-dev
続いて、/etc/modprobe.d/raspi-blacklist.conf
で、blacklist i2c-bcm2708
をコメントアウトします。
$ sudo vi /etc/modprobe.d/raspi-blacklist.conf
# (変更箇所のみ記載)
#blacklist i2c-bcm2708
これで、ひとまずRaspberry PiでI2Cが使えるようになりますが、設定の有効化のため、再起動しておきます。
$ sudo reboot
手順3 I2C動作確認ツールのインストール
$ sudo apt-get update
$ sudo apt-get install i2c-tools
手順4 センサーの動作確認
ここで、センサーの動作確認を行います。sudo i2cdetect -y 1
とします。センサーを外した状態と付けた状態で比較すると、今回使っているセンサーの判別がしやすいです。
今回のアドレスは、0x48
であることがわかります。
手順5 python-smbus(Python用のI2Cツール)のインストール
ここで、PythonからI2Cバスをコントロールするための「python-smbus」をインストールします。
$ sudo apt-get update
$ sudo apt-get install python-smbus
手順6 Pythonスクリプトによるセンサーからクラウド連携
Raspberry Piの「Pi」は「Python」とかかっていたりするので、今回センサーの値読み出しからクラウド連携を実行させるのにはPythonを利用したいと思います。今回クラウドは「Machine to machine」、「Internet of things」ではポピュラーな「xively(APIドキュメント)」を使ってみたいと思います。プログラム実行時には、I2Cデバイスへのアクセスがありますので、 sudo python m2mSample.py
のように sudo
をつけてください。もしくは、 sudo adduser pi i2c
でI2Cグループにアクセスユーザーを追加することで、 python m2mSample.py
のような実行も可能になります(グループ追加時は、 sudo reboot
で再起動しておきましょう)。
更に、今回HTTPリクエストに requests
モジュールを利用していますので、インストールされていなければ大変便利なモジュールですのでこれを機にこちらからインストールしておきましょう。
また、I2Cセンサーからの値の読み込み部分については、別途こちらで詳しく解説させてもらっていますので、参考にして頂ければと思います。※Gistの表示がされない時には、こちらから直接ご覧ください。
xivelyの設定ページから取得した {X-ApiKey}
と、{Feed ID}
を冒頭部分で定義してもらえれば、次のように連携できます。
このように電子工作とクラウドの連携は技術的な敷居も下がってきていますので、今後も色々と試していきたいと思います。