conect+というIoTデータを可視化するツールが使いやすそうだったので、試しに使ってみることにしました。
conect+とは
conect+は、IoTデータの表示、デバイス制御をするアプリケーションを簡単操作で作成できる可視化ツールです。
月額 9,980円のconect+ Studioと、無料から使えるconect+ Liteがあります。
今回は無料のconect+で可視化してみることにしました。
(conect+ Studioとconect+ Liteのサービスの差分はリンク先にてご確認ください)
#構成
構成は上図の通り。
Raspberry PiにつないだDHT11(温湿度センサー)のセンシングデータをWebAPIでconect+ Liteに接続します。
#conect+ Liteでの設定
conect+ Liteにログインし、クリエイト画面にてプロジェクトの編集をします。
###基本情報の設定
基本情報タブで、接続方法(WebAPI)と製品名(rasp_dht11とします)を設定します。
センサータブで、センサー名称(気温、湿度)、キー(temperature、humidity)を設定します。
###アプリウィジェットの設定
用意されたウィジェットからアプリの画面をレイアウトします。
###WebAPIの設定
APIキー生成ボタンを押すと、APIキーが生成されます。APIキーはRaspberry Piのスクリプトで使用します。
#Raspberry Piの設定
###DHT11とRaspberry Piの接続
はじめに、DHT温湿度センサー(DHT11)とRaspberry Piを以下の通りに接続します。
DHT11 | Raspberry Pi |
---|---|
VCC | 3.3V |
GND | GND |
DATA | GPIO4 |
###スクリプトの作成
DHT11のセンサデータを取得するPythonのライブラリをGitHubからクローンします。
git clone https://github.com/szazo/DHT11_python.git
クローンが完了すると「DHT11_python」というフォルダが作成されます。
そのフォルダにある「dht11_example.py」というサンプルスクリプトで温度、湿度データを取得します。
デフォルトでは、Pin番号が14番になっているため、4番に修正します。
import RPi.GPIO as GPIO
import dht11
import time
import datetime
# initialize GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()
# read data using pin 4
instance = dht11.DHT11(pin=4) #pin番号を4(GPIO4)に修正
while True:
result = instance.read()
if result.is_valid():
print("Last valid input: " + str(datetime.datetime.now()))
print("Temperature: %d C" % result.temperature)
print("Humidity: %d %%" % result.humidity)
time.sleep(1)
このサンプルスクリプトに、conect+にデータ保存処理を追加します。
import RPi.GPIO as GPIO
import dht11
import pprint
import json
import requests
from pytz import timezone
from datetime import datetime
# json.dumps
def post_data(api_key,device_id,data_key,sensing_at,value):
url = "https://api.conect.plus/v1/(APIキー)/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())
# now
def now_utc_str():
return datetime.now(timezone('UTC')).strftime("%Y-%m-%d %H:%M:%S")
# initialize GPIO
GPIO.setwarnings(False) #警告を無視する
GPIO.setmode(GPIO.BCM) #GPIOを役割ピン番号で指定する
GPIO.cleanup() #スクリプト終了時にGPIO設定をリセットする
API_KEY = '(APIキー)'
DEVICE_ID = 'SINWSSS'
DATA_KEY_TEMPERATURE = 'temperature'
DATA_KEY_HUMIDITY = 'humidity'
# read data using pin 4
instance = dht11.DHT11(pin=4) #GPIO4のデータを読み込む
while True:
result = instance.read()
if result.is_valid():
break #有効なデータが取得できたら終了(無効なら繰り返し)
temp = result.temperature
hum = result.humidity
print(temp,hum)
# 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)
※(APIキー)には、conect+で発行したAPIキーを入力してください。
dht11_cp.pyを実行し、以下のようなレスポンスが返ってきたら成功です。
$ python dht11_cp.py
23 36
{'message': 'Success.', 'status': 'SUCCESS'}
{'message': 'Success.', 'status': 'SUCCESS'}
###conect+のデータ画面で確認
実行結果をconect+のデータ画面で、クラウド上にデータが保存されているかどうか確認してみましょう。
###定期実行の設定
Raspberry Piを操作しなくても、定期的にスクリプトを実行するように、Raspbianのcronという機能を使います。
ここでは1時間に一度、dht11_cp.pyを実行するようにします。
LX Terminalで以下のコマンドを実行します。
crontab -e
「Select an editor」と表示されたら、「2」の/bin/nanoを選択します。
「nano」が開いたら、カーソルをがメインの一番下に移動し、以下のコマンドを入力します。
00 * * * * /usr/bin/python3 /home/pi/DHT11_python/dht11_cp.py
- Ctrl + X で終了します。
- 「変更されたバッファを保存しますか?」と表示されたら、「Y」キーを押します。
- 「書き込むファイル~」と表示されたら、「Enter」キーを押します。
- 以下の表示がされたら書き込み終了です。
crontab: installing new crontab
これで毎時00分に気温、湿度のデータが保存されます。
#アプリの設定
最後にアプリの設定をしましょう。
アプリをダウンロードし、起動します。
↓
画面右上の「+」をタップ
↓
表示させたいプロジェクトを選択して追加
↓
追加したデバイスを紐付け
↓
データを取得すると、センシングしたデータが表示されます。
その後は、新しいセンシングデータを受信する度に(1時間毎)更新されます。
以上。