• conect+

Raspberry Piとconect+をWeb APIでつなげてみた!

こんにちは、conect+の中の人(エンジニア)です。

ver2.0.0で実装したWeb APIでRaspberry Pi(以下、ラズパイ)をつなげようと思います。

WebAPIを利用すれば、インターネット接続可能なラズパイなどでカンタンにセンサーデータをクラウド、アプリに連携可能です。

初回は、ラズパイのセットアップ、ラズパイ上でのセンサーデータの計測を行います。

センサーには、カンタンにセンサーと連携できるGrovePiを使用します。

準備

今回用意したものは以下になります。

  1. Raspberry Pi 3 Model B

  2. GrovePi+ Starter Kit for Raspberry Pi

  3. Raspberry Pi用電源セット(5V 3.0A)

  4. SDカード

  5. USBマウス、キーボード

  6. モニタ、HDMIケーブル

OS(Raspbian)のセットアップ

まずは、OS(Raspbian)のセットアップですが、今回はNOOBSを利用してOS(Raspbian)をインストールしました。

ネットワーク接続も済ませます。

以下の記事にとても丁寧に解説されていましたので参考にさせていただきました。

第56回「改めましてラズベリーパイの基本!(1) Raspberry Pi NOOBSインストール 2017年度版」

amazonで購入

PC上でSDカードにNOOBSをコピーし、ラズパイに挿して起動すれば、Raspbianのインストーラが起動

GrovePi、センサーの接続

続いてはGrovePiの接続です。

GrovePi+ をラズパイに接続します。


GrovePiのソフトウェアをインストールします。


$ mkdir /home/pi/sample
$ cd /home/pi/sample/
$ sudo git clone https://github.com/DexterInd/GrovePi.git
$ cd GrovePi/Script/
$ sudo chmod +x install.sh
$ sudo ./install.sh

以下のコマンドで、00:4の位置に"04"が表示されれば、GrovePi+を正しく認識しているようです。


$ 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: -- -- -- -- -- -- -- --

続けて、GrovePiのファームウェアを最新にアップデートします。


$ cd /home/pi/sample/GrovePi/Firmware/
$ sudo ./firmware_update.sh
$ cd /home/pi/sample/GrovePi/Software/Python/
$ python grove_firmware_version_check.py
GrovePi has firmware version: 1.2.7

ここまで準備できればセンサーでのデータ計測が可能です。

GrovePiのソフトウェアにはサンプルプログラムが入っていますので、早速データ計測を試してみます。

GrovePi+ Starter Kit for Raspberry Pi に入っている温度、湿度センサーを使用

サンプルプログラムに合わせて、D4ポートに差し込む

サンプルプログラムを実行すれば、温度、湿度がコンソール上に出力されました。


$ cd /home/pi/sample/GrovePi/Software/Python/
$ python grove_dht_pro.py
temp = 24.00 C humidity =49.00%
temp = 24.00 C humidity =49.00%
temp = 24.00 C humidity =49.00%
temp = 24.00 C humidity =49.00%
temp = 24.00 C humidity =49.00%
temp = 24.00 C humidity =49.00%
temp = 24.00 C humidity =49.00%

Ctrl + c で停止します。

次はconect+でデータを受信、アプリ表示するための設定を行います。

次のページ


第一回ではラズパイのセットアップから、センサーデータの計測までを行いました。

今回はconect+での設定方法についてお伝えします。

製品の追加、WebAPIの使用にはBASIC、またはPROプランが必要になります。

conect+の会員登録、プラン変更を行ってください。会員登録はこちらから。

※現在はフリープランでお使い頂けます。

製品登録

まず、製品の追加です。

基本情報で重要なのは、「接続方法」で"WebAPI"を選択することです。

「製品名」には分かりやすい名前を設定します。

「アプリテーマ」では"スカイ"を選択しました。

画像タブでは、iPhoneアプリに表示されるアイコン画像とサムネイル画像を登録します。

続いてセンサーの登録ですが、ここでの設定がラズパイからの接続で重要になります。

ラズパイに温度と湿度センサーを接続していますので、それぞれ追加していきます。

センサータブに移動して、追加(+)ボタンを押下します。

ポップアップダイアログの「キー」に、温度センサーは"temperature"を湿度センサーには"humidity"を設定し、追加ボタンを押下します。

基本情報入力後は、保存ボタンを押下して保存してください。

アプリウィジェット設定

製品一覧からアプリウィジェット設定画面に移動します。

ウィジェット一覧から計測データを連携させたいウィジェットを選択します。

追加したウィジェットに表示したいセンサーを選択します。

ここでは製品基本情報の登録で追加したセンサーから選択します。

今回は、温度と湿度用のウィジェットをそれぞれ追加します。

アプリウィジェット設定後は、保存ボタンを押下して保存してください。

WebAPI仕様確認

製品一覧からWebAPI画面に移動します。

APIキー生成ボタンを押下すると、APIキーが生成されますので、保存ボタンを押下します。

APIキー保存後、WebAPIリファレンスが表示されます。

以上でconect+の設定は完了です。

WebAPI接続確認

設定したWebAPIが動作するか、ラズパイと連携する前に確認してみます。

conect+のWebAPIではhttpリクエストが送信できれば良いので、今回はcurlコマンド使って接続確認してみます。

まずは、データの送信からです。

deviceUuidには任意の値を設定可能ですので、"device01"を設定しました。


$ curl https://api.conect.plus/v1/{生成したAPIキー}/data -X POST -H "Content-Type: application/json" -d '{"deviceUuid": "device01","key": "temperature" ,"sensingAt": "2017-11-07 00:00:00", "value1": 25.3}'
{"status":"SUCCESS","message":"Success."}

レスポンスのstatusが"SUCCESS"となっていれば、データ保存は成功です。

続いて保存したデータを取得します。


$ curl "https://api.conect.plus/v1/{生成したAPIキー}/data?deviceUuid=device01&sensingAtFrom=2017-11-07%2000:00:00"
{"deviceUuid":"device01","sensingAtFrom":"2017-11-07 00:00:00","sensingDatas":[{"sensingAt":"2017-11-07 00:00:00","key":"temperature","value1":25.300000000,"value2":null,"value3":null,"value4":null,"value5":null}]}

先ほど保存したデータがレスポンスに含まれています。

また、保存したデータは、conect+のデータ画面からも確認可能です。

最終回はいよいよラズパイで計測したデータとconect+を連携します。

Facebookでお知らせしますので、ぜひいいね!をお願いします。

https://business.facebook.com/conect.plus.IoT/

前のページ次のページ


前回はconect+での設定方法について解説しました。

いよいよ最終回ではラズパイで計測したデータとconect+の連携についてお伝えします。

大まかな流れは以下のようなイメージです。

 1. ラズパイに接続したセンサーから温度と湿度を計測

 2. 計測データをconect+のクラウド上に保存

 3. conect+アプリで計測データを表示

「3.」のアプリでの計測データ表示にはiPhoneが必要となります。

Android版のconect+アプリについては今後開発予定です。

ラズパイに接続したセンサーから温度と湿度を計測

D4ポートに接続した温湿度センサーからデータを読み取る処理をサンプルプログラムを参考に実装します。

下記のような感じです。


from grovepi import *
from math import isnan

DHT_SENSOR_PORT = 4 # connect the DHt sensor to port 4
DHT_SENSOR_TYPE = 0 # use 0 for the blue-colored sensor and 1 for the white-colored sensor

try:
    # get the temperature and Humidity from the DHT sensor
    [ temp,hum ] = dht(DHT_SENSOR_PORT,DHT_SENSOR_TYPE)
    print("temp =", temp, "C\thumidity =", hum,"%")

    # check if we have nans
    # if so, then raise a type error exception
    if isnan(temp) is True or isnan(hum) is True:
        raise TypeError('nan error')

except (IOError, TypeError) as e:
    print(str(e))

except KeyboardInterrupt as e:
    print(str(e))

計測データを定期的にconect+のクラウド上に保存

続いて、conect+のクラウドに計測データを保存する処理を実装します。

下記のような感じです。


import pprint
import json
import requests
from pytz import timezone
from datetime import datetime

def post_data(api_key, device_id, data_key, sensing_at, value):
    url = "https://api.conect.plus/v1/%(api_key)s/data" % {'api_key':api_key}
    response = requests.post(
        url,
        json.dumps({
            'deviceUuid':device_id,
            'key':data_key,
            'sensingAt':sensing_at,
            'value1':value}),
        headers={'Content-Type': 'application/json'})
    pprint.pprint(response.json())

def now_utc_str():
    return datetime.now(timezone('UTC')).strftime("%Y-%m-%d %H:%M:%S")

post_data('{APIキー}', 'device01', 'temperature', now_utc_str(), 23.0)

必要なライブラリはインストールしてください。


pip install request
pip install pytz

先ほど実装したデータ計測処理に、データ保存処理を追加します。

プログラムの全体は下記のようになります。


from grovepi import *
from math import isnan
import pprint
import json
import requests
from pytz import timezone
from datetime import datetime

def post_data(api_key, device_id, data_key, sensing_at, value):
    url = "https://api.conect.plus/v1/%(api_key)s/data" % {'api_key':api_key}
    response = requests.post(
        url,
        json.dumps({
            'deviceUuid':device_id,
            'key':data_key,
            'sensingAt':sensing_at,
            'value1':value}),
        headers={'Content-Type': 'application/json'})
    pprint.pprint(response.json())

def now_utc_str():
    return datetime.now(timezone('UTC')).strftime("%Y-%m-%d %H:%M:%S")

DHT_SENSOR_PORT = 4 # connect the DHt sensor to port 4
DHT_SENSOR_TYPE = 0 # use 0 for the blue-colored sensor and 1 for the white-colored sensor
API_KEY = '{APIキー}'
DEVICE_ID = 'device01'
DATA_KEY_TEMPERATURE = 'temperature'
DATA_KEY_HUMIDITY = 'humidity'

try:
    # get the temperature and Humidity from the DHT sensor
    [ temp,hum ] = dht(DHT_SENSOR_PORT,DHT_SENSOR_TYPE)
    print("temp =", temp, "C\thumidity =", hum,"%")

    # check if we have nans
    # if so, then raise a type error exception
    if isnan(temp) is True or isnan(hum) is True:
        raise TypeError('nan error')

    # post data
    now = now_utc_str()
    post_data(API_KEY, DEVICE_ID, DATA_KEY_TEMPERATURE, now, temp)
    post_data(API_KEY, DEVICE_ID, DATA_KEY_HUMIDITY, now, hum)

except (IOError, TypeError) as e:
    print(str(e))

except KeyboardInterrupt as e:
    print(str(e))

このプログラム(temp_humi_sensing.py)を保存し、実行してみます。


$ python temp_humi_sensing.py
('temp =', 24.0, 'C\thumidity =', 60.0, '%')
{u'message': u'Success.', u'status': u'SUCCESS'}
{u'message': u'Success.', u'status': u'SUCCESS'}

実行結果をconect+の管理画面上で確認します。

データがconect+のクラウド上に保存されたのが確認できます。

定期的(10分に1回)にデータを取得するため、cronにプログラムの実行を設定します。


*/10 * * * * python /home/pi/sample/temp_humi_sensing.py

月額基本利用料に20,000APIコールまで含まれていますので10分毎にデータ送信した場合、

6(コール / 時) x 24(時間) x 30(日) = 4,320(コール / 月)

今回は温度と湿度を計測していますので、その2倍の8,640(コール / 月)となりますので、月額基本利用料内に収まりそうです。

conect+アプリで計測データを表示

最後にconect+アプリでクラウド上の計測データと連携させます。

まずは、AppStoreからconect+をインストールします。


アプリを起動してログイン後に製品の追加を行います。

次に追加した製品にデバイス(データ保存時に指定したdeviceUuid)を紐付けます。

これで、センサー → ラズパイ → クラウド → アプリ が連携されました。

10分後にデータ計測されれば自動的にアプリに最新データが反映されます。

以上、3回にわたりラズパイとconect+との連携方法を解説いたしました。

WebAPIを使用すれば、とてもカンタンにconect+に接続し、IoTアプリのUIを生成できることを感じていただけたと思います。

IoTアプリにご興味のある方は、是非conect+をお試しください。

0回の閲覧
 

conect.plus Corp. - IoT Data Design

 SB Innoventure / SoftBank Group

東京都港区東新橋1-9-2 汐留住友ビル27階

© conect.plus Corp. All Rights Reserved.