読者です 読者をやめる 読者になる 読者になる

hiroykyの個人日記

@hiroyky IT系エンジニアのまったりブログ

Raspberry Pi3とGrove PiとGrove 温湿度センサで温湿度REST APIを作ってみた。

はじめに

I2C通信用コネクタ同士をケーブルで接続するだけで使えちゃうGroveセンサシリーズの温湿度センサとRaspberry Piを連携してREST APIを作ってみました。Raspberry PiにHTTPでRESTのリクエストするとセンシングしている温湿度を返してくれる仕組みです。

REST APIにすることで一般のPCやサーバからも扱いやすくなり、最近バズってるいわゆるIoTになりますね。

用意したもの

今回、用意したものは以下の通りです。

Raspberry Pi 3 MODEL B

Raspberry Pi 3 MODEL B

GROVE - デジタル温度・湿度センサ

GROVE - デジタル温度・湿度センサ

GrovePi+

GrovePi+

加えて、Raspberry Pi3の電源(USB micro type B, 5V3A出力)とmicro SDカード(16GB class10)です。 また、温湿度センサにはケーブルが属していたので別途購入する必要はありませんでした。

やってみた

前提

Raspberry PiにはRaspbianをインストールし、SSHでログインできる状態であるものとします。

GrovePi+の取り付け

接続するだけです。端のピンに合わせれば良いようです。

こんな感じ。 f:id:hiroyky:20161207003425j:plainf:id:hiroyky:20161207003432j:plain

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

しばらく待ってると完了し、再起動します。 f:id:hiroyky:20161207203121p:plain

起動後、不要なパッケージができているかもしれないので、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ポートに接続します. f:id:hiroyky:20161211214329j:plainf:id:hiroyky:20161211214333j:plain

Pythonから温湿度取得

PythonからGroveのデバイスを操作するために次のライブラリが提供されています. www.dexterindustries.com

ページの最初にある動画をみると雰囲気がつかみやすいと思います.


Write Your First GrovePi Program in Python

つまり,grovepiの提供するAPIを使用していますね.

import grovepi

github.com

ただ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()`

github.com

サーバを起動してみましょう.

$ 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を作成しました.

参考文献など