Raspberry Piの照度/温度センサーの値をkintoneへレコード登録してグラフで可視化する
温度/照度センサーを使ったIoTデモをするためのプロトタイプ作成です。
Raspberry PiからkinotneのREST APIを使ってkintoneへレコード登録しています。
可視化はkintoneのグラフを使いました。
しきい値を越えた際の通知もkintoneの標準通知機能を使ってます。
kintone Café vol.7で教えてもらった内容に少し足した感じです。
目次
Raspberry Pi側の配線
使ったセンサーなど
– ADコンバータ MCP3002
– フォトトランジスタ NJL7502L ??
– TMP36 ??
配線図はFritzingを使ってみました。
下手くそでわかりづらくて申し訳ございません。
写真はこんな感じ。
(余計にわかりにくい。。。。)
kintoneのアプリ
フォーム
フォームに以下のフィールドを用意します。
- 日時(日時):sensor_time
 必須,重複禁止,レコード登録時の日時を初期値
- センサー名(文字列(1行)):sensor_name
- 照度(数値):brightness
- 温度文字列(1行):temprature
一覧
一覧は上記のフィールドで作っておきます。
ソートは日時の降順にします。
グラフ
下記の設定にします。
- 折れ線グラフ
- 大項目:日時
- 集計方法:合計:照度
- 集計方法:合計:温度
- 条件:すべてのレコード
- ソート:大項目:昇順
通知
レコードの条件通知を下図のように作成します。
- 照度 <= 10 「部屋が暗すぎます。明るくしましょう。」
- 温度 <= 25 「部屋が寒すぎます。25度以下になりました。」
- 温度 >= 35 「部屋が暑すぎます。35度以上になりました。」
APIトークン
生成したAPIトークンのアクセス権の「レコード追加」にチェックを入れて保存します。
設定と保存がそれぞれ完了したら必ず[設定完了]をクリックしましょう
(忘れがち)
Raspberry PiのPythonコード
Raspberry Piで下記のPythonファイルを作成します。
仮にkintone_sensor_update.pyとかにします。
※pythonやspidev,requestsなどのモジュールのインストールは必要です。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | import spidev import time import json import requests from datetime import datetime spi = spidev.SpiDev() spi.open(0,0) spi.max_speed_hz = 1000000 spi.bits_per_word = 8 dummy = 0xff start = 0x47 sgi = 0x20 ch0 = 0x00 ch1 = 0x10 msbf = 0x08 def readTempData(ch,format_txt):         adc = spi.xfer2([start + sgi + ch + msbf,(8+ch)<<4,0])         data = ((adc[0] & 0x03) << 8) + adc[1]         print 'data: ' + format_txt.format(data)         return data def readBlightData(ch,format_txt):         adc = spi.xfer2([(start + sgi + ch + msbf),dummy])         data = ((adc[0] & 0x03) << 8) + adc[1]         print 'data: ' + format_txt.format(data)         return data def convertVolts(data,format_txt):         volts = (data * 3.3) / float(1023)         volts = round(volts,4)         print 'volts:' + format_txt.format(volts)         return volts def convertTemp(volts,format_txt):         temp = (100 * volts) - 50.0         temp = round(temp,4)         print 'temp: ' + format_txt.format(temp)         return temp try:         while 1:                 print '---ch0 temp---------'                 ch0_data = readTempData(ch0,'{:8}')                 ch0_volts = convertVolts(ch0_data,'{:8.2f}')                 ch0_temp = convertTemp(ch0_volts,'{:8.2f}')                 print '---ch1 blightness---'                 ch1_data = readBlightData(ch1,'{:8}')                 ch1_volts = convertVolts(ch1_data,'{:8.2f}')                 print '---kintone upload---'                 headers = {'X-Cybozu-API-Token':'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx','Content-Type':'application/json'}                 data = {'sensor_name':{'value':'raspberry-pi_01'},'sensor_time':{'value':datetime.now().strftime('%Y-%m-%dT%H:%M:%S+09:00')}, 'brightness': {'value': ch1_data},'temperature':{'value':ch0_temp}}                 payload = {'app':'999','record':data}                 r = requests.post('https://mydomain.cybozu.com/k/v1/record.json', data=json.dumps(payload), headers=headers)                 print r.text                 time.sleep(60) except KeyboardInterrupt:         pass spi.close() | 
上記のPythonファイルを実行します。
| 1 2 3 4 5 6 7 8 9 10 11 | $ python kintone_sensor_update.py ---ch0 temp--------- data:      247 volts:    0.80 temp:    29.68 ---ch1 blightness--- data:       25 volts:    0.08 ---kintone upload--- {"id":"145","revision":"1"} | 
無事にデータが取れてkinotneへデータが登録されると上記のような出力がコンソールに出力されます。
1分に1回動きます。
kintoneを見てみると、無事登録されたデータがグラフ表示されています。
通知条件を満たした時にはメール通知がされます。
※kinotneでの通知をメールにする設定は別途必要です。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
 
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
 
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
 
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
 
「AWSではじめるLinux入門ガイド」という本を書きました。
 

開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-  
              
- 
      「OK Google、おばけやしきにつれてって」もらいました「OK Google、おばけやしきにつれてって」 2018/8/25~9/2まで … 
-  
              
- 
      JAWS-UG 関西IoT専門支部「マクニカkibo + AWS IoTハンズオン」に行ってきました、というか運営メンバーとして参加してきました2015/12/19(土)はJAWS-UG 関西IoT専門支部の記念すべき1回目 … 
-  
              
- 
      DS18B20センサー+Raspberry Piで取得した温度をAmazon Kinesis FirehoseからS3へ格納してAthenaでクエリーしたのをQuickSightで可視化するJAWS DAYS 2017でやりますハンズオンの「[IoTハンズオン] Ras … 
-  
              
- 
      [事前準備] JAWS-UG 関西IoT専門支部「マクニカkibo + AWS IoTハンズオン」来る12/19(土)の JAWS-UG 関西IoT専門支部第一回勉強会「マクニカ … 
-  
              
- 
      Raspberry Pi + USBカメラで監視カメラ監視カメラデモのプロトタイプをやってみました。 ちなみにRaspberry Pi … 
-  
              
- 
      Raspberry PIとLinux(Mint)でUSB Serial通信USB to TTL Serial CableでLinuxとRaspberry … 
-  
              
- 
      ORPHE TRACK を使いはじめてみました特茶のCMでもお馴染みのORPHE TRACK を購入しました。 セットアップ … 
-  
              
- 
      SORACOM plan-DU SIMをSpeed Wi-Fi NEXT W05で使ってみる自宅からの配信のバックアップ回線を検討中です。 オンラインセミナー配信のバックア … 
-  
              
- 
      Raspberry Pi 2 iPhoneのUSBテザリングを使ってPCからSSH接続超簡単でしたので、ラズパイ買って持ち歩く人はとりあえずこれを試してみれば、と思い … 
-  
              
- 
      Raspberry PIとMacでUSB Serial通信安価なUSB to TTL Serial Cableを購入したのですが、ドライバ … 












