Index
はじめに
この記事では、電子工作でよく用いられている Raspberry Pi を使って、
センサーの値読み出しから、REST APIによる Webデータベース kintone への連携カスタマイズをご紹介します!
完成イメージ
温度データを kintone に取り込み、kintone の機能でかんたんに時系列グラフを作成することができます。
手順概要
環境の準備
- Raspberry Pi Model B Revision 2以上(RASPBIANとネットワークの設定を終えた状態)
- I2C温度センサー(ADT7410)
- kintone の開発者ライセンス環境
kintoneの準備
今回の連携でデータベースとして利用したのは、kintoneというサービスです。
複雑なシステム構築がいらず、データベース、ワークフロー、グラフ生成などの機能を備えながら、豊富なAPIも用意されているクラウドサービスになります。
kintoneの機能についてもっと知りたい方は「開発プラットフォームとしてのkintone」をご覧ください。
kintone アプリの作成
次のフィールドを含むアプリを kintone で作成してください。
アプリの作成方法は、こちらをご参照ください。
フィールド名(例) | フィールドコード | フィールドタイプ |
温度[℃] | tempC | 数値 |
また、kintone の機能でかんたんに時系列グラフを作成することができます。
グラフの設定方法はこちらをご参照ください。
Raspberry Piの準備
ここではRaspberry Piのハード的な準備をご紹介します。各項目の括弧内にはコマンドを記載しています。
- Raspberry Piとセンサーを結線します。Raspberry Pi側とセンサー側の対応を見ながらブレッドボードにジャンパー線を差し込んでいきましょう
図中線色 | Raspberry Pi 端子 | センサー端子 | 内容 |
赤 | 3.3V | VDD | センサー電源線 |
黒 | GND | GND | センサー接地線 |
緑 | SDA | SDA | データ線 |
黄 | SCL | SCL | クロック線 |
- 「/etc/modules」に「i2c-dev」を追記します($ sudo vi /etc/modules)
- 「/etc/modprobe.d/raspi-blacklist.conf」で、「blacklist i2c-bcm2708」をコメントアウトします($ sudo vi /etc/modprobe.d/raspi-blacklist.conf)
- ここで、設定有効化のため一度再起動します($ sudo reboot)
- I2C動作確認ツールをインストールします($sudo apt-get install i2c-tools)
- センサーの動作確認を行います。センサーを外した状態と付けた状態で比較すると、今回使っているセンサーの判別がしやすいです。
チャンネルは、今回対象としているRev.2以上の場合には1、Rev.1の場合には0とします($ sudo i2cdetect -y {channel})
チャンネルを1としてコマンドを入力すると、アドレスは、「0x48」であることがわかります。
- PythonのI2Cツールである「python3-smbus」をインストールします($ sudo apt-get install python3-smbus)
以上でRaspberry PiでI2Cセンサーを使うための準備は完了です。
kintone連携用Python3ソースコード
Pythonソースコードの説明
今回はRaspberry Piの「Pi」が「Python」に由来していることから、Pythonで連携スクリプトを記述しました。中身は次の4部構成になっています。
- I2C(SMBUS)の設定
- センサーの値読みだし
- kintone REST API連携
- ループによる定期実行
全項目、簡単にご説明します。
【I2C(SMBUS)の設定】
I2CでセンサーをコントロールするためにはRaspberry Piのチャンネルとセンサーのアドレスを指定する必要がありますので、これらを引数としておきます。また、クラス名は今回のセンサーの型式「ADT7410」としておきます。
Raspberry Pi Model B Revision 2以上(B+含む)はチャンネル1で、ADT7410のアドレスは先に確認した通り0x48ですので、初期化時にこれらの値を代入しておきます。
【センサーの値の読出し】
計算式はデータシートを見ながら与えていくことになりますが、ADT7410の特徴を簡単に押さえておきましょう。
- 標準分解能13bit(1bitは符号ビット、12bitが情報ビット)を利用
- 13bit係数は0625(1/16)
- 換算式は、データシートP12を参照
「read_i2c_block_data()」関数でレジスタの値を読み出します。self.addressはI2Cセンサーのアドレス(今回は0x48)、0x00は読み出す先頭レジスタのアドレス、2は読み出すビット数を表しています。
【kintone REST API連携】
kintone REST APIの単一レコードの登録(GET/record.json)を実行します。また、認証にはAPIトークンを利用しました。
PythonでHTTPリクエストするためには幾つかモジュールがありますが、今回は「requests」を使うことにします。
($ sudo apt-get install python3-requests)
【ループによる定期実行】
定期実行は今回のようにプログラム中に入れてしまう方法(一種の常駐アプリ)とcrontabを使った方法が考えられます。今回は組み込みらしくプログラム中に入れることにしました。こうした場合には、常駐アプリの死活監視をcrontabに任せたりしますが、ここでは割愛させて頂きます。
Pythonスクリプトの実行
先にご紹介したサンプルコードを例えば「sample.py」として保存したとすると、I2Cデバイスへのアクセスを要しますので「sudo」をつけて「sudo python sample.py」と実行する必要があります。
最後に
今回は、Raspberry Pi を使って、センサーの値の読出しとkintone REST APIによる取得値のデータ連携を行いました。
多少の準備は必要ですが、意外と手軽に出来ることがお分かり頂けたのではないでしょうか?
電子工作とクラウドとの連携に興味をお持ちの方、是非 kintone との連携で、IoT開発を手軽に試してみましょう。
記事に関するフィードバック
記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。