3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ラズパイとconect+をWebAPIでつなげてみた

Last updated at Posted at 2020-02-18

conect+というIoTデータを可視化するツールが使いやすそうだったので、試しに使ってみることにしました。
IMG_0554 - コピー.PNG

conect+とは

conect+は、IoTデータの表示、デバイス制御をするアプリケーションを簡単操作で作成できる可視化ツールです。
月額 9,980円のconect+ Studioと、無料から使えるconect+ Liteがあります。
今回は無料のconect+で可視化してみることにしました。
(conect+ Studioとconect+ Liteのサービスの差分はリンク先にてご確認ください)

#構成
cl2.PNG
構成は上図の通り。
Raspberry PiにつないだDHT11(温湿度センサー)のセンシングデータをWebAPIでconect+ Liteに接続します。

#conect+ Liteでの設定

conect+ Liteにログインし、クリエイト画面にてプロジェクトの編集をします。
clcreate.PNG

###基本情報の設定

基本情報タブで、接続方法(WebAPI)と製品名(rasp_dht11とします)を設定します。
cl1.PNG

画像タブで、アイコン画像とサムネイル画像を設定します。
cl3.PNG

センサータブで、センサー名称(気温、湿度)、キー(temperature、humidity)を設定します。
cl4.PNG

###アプリウィジェットの設定
用意されたウィジェットからアプリの画面をレイアウトします。
widget.PNG

###WebAPIの設定
APIキー生成ボタンを押すと、APIキーが生成されます。APIキーはRaspberry Piのスクリプトで使用します。
key.PNG

#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番に修正します。

dht11_example.py
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+にデータ保存処理を追加します。

dht11_cp.py
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+のデータ画面で、クラウド上にデータが保存されているかどうか確認してみましょう。
cldata.PNG

###定期実行の設定
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分に気温、湿度のデータが保存されます。

#アプリの設定
最後にアプリの設定をしましょう。

アプリをダウンロードし、起動します。

画面右上の「+」をタップ
IMG_0549 - コピー.PNG

表示させたいプロジェクトを選択して追加
IMG_0551.PNG

追加したデバイスを紐付け
IMG_0552.PNG
IMG_0553.PNG

データを取得すると、センシングしたデータが表示されます。
IMG_0554.PNG

その後は、新しいセンシングデータを受信する度に(1時間毎)更新されます。

以上。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?