Help us understand the problem. What is going on with this article?

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

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時間毎)更新されます。

以上。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした