サンプルプログラム

サンプルプログラム(温度センサーADT7310)

 今回は、温度センサーと接続してみます。

RaspberryPiと温度センサーの接続

 センサーはmarutsuで販売している ADT7310を使用しました。
センサーのデータ取得方法については、このサンプルプログラムの主題ではないために、次のサイトをご覧いただければと思います。

 Raspberry Piでも温度センサADT7310をつかってみる

配線は、上記サイトに従って次のようにしています。
ADT7310 – Raspberry Pi

  •   VDD – 5V
  •   SCL – GPIO11 SCLK
  •   SDO – GPIO9 MISO
  •   SDI – GPIO10 MOSI
  •   CS – GPIO8
  •   GND – GND

※今回は温度センサー ADT7310を利用していますが、センシングデータを取得できるものであれば、どんなセンサーでもこのSensingApp(センシングアップ)を利用して遠隔でグラフを見ることができます。

センサーの新規登録

 SensingApp画面のセンサー新規登録で、次のように登録を行います。

 センサー種別は半角英数字のみ入力可能です。設置場所は日本語が利用できます。また数値については半角で入力下さい。アラートはその範囲を超えたときにアラートメールが届きます。ゲージ最大値、最小値はゲージを表示するときの目盛です。

クラウドと通信するための情報

 用意するのは次のとおりです。SensingApp のアカウントを用意したら、センサーを登録した後、次の情報をご確認下さい。

  1. USER ID
  2. データ送信先URL
  3. センサー種別
  4. センサー番号

 以上の情報をご用意いただければ、センシングデータをSensingAppに送信してグラフ表示することが可能です。

SensingApp画面のユーザー情報で、①と②のUSER IDとデータ送信先URLを確認できます。

 また、SensingApp画面のセンサー一覧で、③センサー種別と④センサー番号(No.)を確認できます。

サンプルコード(Python)

RaspberryPiで動作させるサンプルコードを示します。

※ get_data()関数部分は、前出のサイトをそのまま利用させていただいています。ご参照下さい。

# -*- coding: utf-8 -*-
# 温度計測のサンプルプログラム(自動送信)
#

import json
import urllib.request
from datetime import datetime
import traceback
import spidev
import time


# データ送信先
URL = 'https://beta.sensingapp.io/api/data/'
USER_ID = '4bf7ee7c-be3f-43f6-a732-02b14de660be'
ITEM = 'TEMP'
ITEM_NUM = '5'


# センシングデータ取得
# この関数部分にセンサーに合わせて記述を行う
def get_data():

  spi = spidev.SpiDev()
  spi.open(0,0)
  spi.mode = 0x03
  spi.max_speed_hz = 5000
  spi.xfer([0xFF, 0xFF, 0xFF, 0xFF])

  time.sleep(0.5)
  spi.xfer([0x54]) 
  time.sleep(1)

  ret = spi.xfer([0xff,0xff])
  temp = ret[0]<<8 | ret
  temp = temp >> 3 

  if(temp >= 4096): 
        temp = temp - 8192

  spi.close()

  return(temp/16)


# メイン
def main():

  while True:
    try:
        # センシングデータを取得し、小数点以下2桁に丸める
        data = round(get_data(), 2)

        # 送信データ作成
        obj = {
                "user_id": USER_ID,
                "item": ITEM,
                "item_num": ITEM_NUM,
                "regist_date": datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
                "sensing_data": str(data),
        }
        json_data = json.dumps(obj).encode("utf-8")

        print(json_data) # for debug

        # httpリクエストを準備してPOST
        request = urllib.request.Request(
            URL, 
            data=json_data, 
            method="POST", 
            headers={"Content-Type": "application/json",}
        )

        with urllib.request.urlopen(request) as response:
            response_body = response.read().decode("utf-8")

        if "Error" in response_body:
            print("response_body Error")
        else:
            # インターバルをクラウドから取得した数値を入れる
            interval_time = int(response_body) 
            
        print(interval_time)
        time.sleep(interval_time)  # インターバル値時間を停止

    except KeyboardInterrupt: # キーボード例外を検出
        print("Stopped by Ctrl+C")
        break

    except Exception:
        print(traceback.format_exc()) 


if __name__ == '__main__':
    main()

自動起動設定

 RaspberryPiにプログラムを置いたら、それを自動起動にします。ファイル名、ディレクトリー名はご自身の環境に合わせて下さい。

温度センシングのプログラム(temp_sample.py)を実行するために、sensingapp.shを用意します。

#!/bin/sh

sleep 30
cd /home/pi
/usr/bin/python3 /home/pi/temp_sample.py

 実行できるようにしておきます。

$ chmod 755 sensingapp.sh

 次に、自動起動するためのサービスを用意します。

[Unit]
Description=SensingApp
After=syslog.target

[Service]
Type=simple
WorkingDirectory=/home/pi
ExecStart=/home/pi/sensingapp.sh
User=pi
Group=pi

[Install]
WantedBy=multi-user.target

 自動起動の設定を行います。

$ sudo systemctl daemon-reload
$ sudo systemctl start sensingapp
$ sudo systemctl enable sensingapp

 起動しているか確認します。

$ systemctl status sensingapp

sensingapp.service – SensingApp
Loaded: loaded (/etc/systemd/system/sensingapp.service; enabled; vendor preset: enabled)
Active: active (running)

 一旦、RaspberryPiを再起動して、自動起動を行います。

データ表示

 自動起動がうまくいけば、次のようにダッシュボードでデータが表示されます。

 データログも次のように表示されます。

計測間隔の変更

 計測間隔はヘッダーメニュー(黒いところ)のデバイス設定で行えます。初期値は600秒(10分)ですが、サンプルプログラムでは次のように60秒で設定しています。60秒以上、自由に変更ができます。

アラートの設定

 アラートはセンサーを新規登録したときに設定できますが、あとになっても、次のところから設定を変えることができます。このアラート値の範囲を超えた場合、自動的にアラートメールが登録しているメールに届きます。

データが表示されなかったら

 ダッシュボードでデータが表示されない場合は次の理由が考えられます。

① IoTデバイスがインターネットに接続されていない。

② IoTデバイスでデータ送信するプログラムのパラメーターが正しくない。

  • IoTデバイス設定の通信パラメーターをご覧ください。
  • 通信が一度でも出来たあとに、登録センサー画面で、該当するセンサーを削除したり、種別を変更すると通信できなくなります。

③ システム全体が不具合を起こしている。

  • この場合には画面も見られなくなっている可能性がありますので、弊社にご相談ください。

 上記のように一旦、誤ってセンサーを削除したら、IoTデバイスのパラメーターを変更する必要があります。その場合には弊社にご相談ください。