Raspberry Pi3とGrove PiとGrove 温湿度センサで温湿度REST APIを作ってみた。
はじめに
I2C通信用コネクタ同士をケーブルで接続するだけで使えちゃうGroveセンサシリーズの温湿度センサとRaspberry Piを連携してREST APIを作ってみました。Raspberry PiにHTTPでRESTのリクエストするとセンシングしている温湿度を返してくれる仕組みです。
REST APIにすることで一般のPCやサーバからも扱いやすくなり、最近バズってるいわゆるIoTになりますね。
用意したもの
今回、用意したものは以下の通りです。
- 出版社/メーカー: Raspberry Pi
- 発売日: 2016/05/31
- メディア: Personal Computers
- この商品を含むブログを見る
- 出版社/メーカー: スイッチサイエンス
- メディア: エレクトロニクス
- この商品を含むブログ (1件) を見る
- 出版社/メーカー: スイッチサイエンス
- メディア: エレクトロニクス
- この商品を含むブログを見る
加えて、Raspberry Pi3の電源(USB micro type B, 5V3A出力)とmicro SDカード(16GB class10)です。 また、温湿度センサにはケーブルが属していたので別途購入する必要はありませんでした。
やってみた
前提
Raspberry PiにはRaspbianをインストールし、SSHでログインできる状態であるものとします。
GrovePi+の取り付け
接続するだけです。端のピンに合わせれば良いようです。
こんな感じ。
Raspberry Piのセットアップ
www.dexterindustries.comに沿って進めていきます.
インストール
こちらのリポジトリからクローンしてきます。 github.com
($ sudo apt-get install git) $ git clone git@github.com:DexterInd/GrovePi.git $ cd GrovePi/Script $ sudo sh ./install.sh
しばらく待ってると完了し、再起動します。
起動後、不要なパッケージができているかもしれないので、autoremoveしておきます。
$ sudo apt-get autoremove
GrovePi+ 接続確認
次のコマンドを打って04と表示されればOKです。
$ sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- 04 -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
温湿度センサの接続
温度センサを接続します.コネクタがきちんとしているので,向きを間違えることはないです.今回はD8ポートに接続します.
Pythonから温湿度取得
PythonからGroveのデバイスを操作するために次のライブラリが提供されています. www.dexterindustries.com
ページの最初にある動画をみると雰囲気がつかみやすいと思います.
Write Your First GrovePi Program in Python
つまり,grovepiの提供するAPIを使用していますね.
import grovepi
ただgrovepiライブラリがインストールされていなかったためインストールします. (grovepi自体は先ほどクローンしたGrovePiのGrovePi/Software/Python/にあります.)
$ cd GrovePi/Software/Python $ sudo python setup.py install
以下のようにして気温と湿度を取得します.今回はD8ポートにセンサを接続しているのでdht関数の引数に8を与えています.
Python 2.7.9 (default, Sep 17 2016, 20:26:04) [GCC 4.9.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import grovepi >>> grovepi.dht(8, 0) [24.0, 37.0]
OK! (小数点一桁目まで表示されてますが測定精度はどうなんってたっけ??とりあえず今回はスルー)
Webサーバ化
温湿度が取れることは分かったので,Webサーバ化してREST APIとして取得できるようにします. 今回は,WebフレームワークにFlaskを使用します.
インストール
$ sudo pip install Flask
実装
まあ,こんな感じですね./V1/enviromentにエントリポイントを設けて,温度と湿度をJSONでレスポンスします.
import flask import grovepi app = flask.Flask('sensor_api') @app.route('/V1/enviroment') def enviroment_handler(): (temperature, humidity) = grovepi.dht(8, 0) return flask.jsonify(temperature=temperature, humidity=humidity) if __name__ == '__main__': app.run()`
サーバを起動してみましょう.
$ export FLASK_APP=app.py # pythonスクリプトを指定 $ flask run --host=0.0.0.0
で,curlなりWebブラウザなどからアクセス
curl http://localhost:5000/V1/enviroment { "humidity": 44.0, "temperature": 23.0 }
OK!
まとめ
- Raspberry PiとGrovePiを接続して,ソフトウェアのセットアップしました.
- Grove温湿度センサを接続して値を取得しました.
- Flaskを使ってWeb APIを作成しました.