カテゴリー内の他の記事

IoT入門~Raspberry Piを使って温度センサーをkintoneに連携させてみよう!

Index

はじめに

この記事では、電子工作でよく用いられている Raspberry Pi を使って、
センサーの値読み出しから、REST APIによる Webデータベース kintone への連携カスタマイズをご紹介します!

完成イメージ

温度データを kintone に取り込み、kintone の機能でかんたんに時系列グラフを作成することができます。
___.png

手順概要

環境の準備

  • Raspberry Pi Model B Revision 2以上(RASPBIANとネットワークの設定を終えた状態)
  • I2C温度センサー(ADT7410)
  • kintone の開発者ライセンス環境

kintoneの準備

今回の連携でデータベースとして利用したのは、kintoneというサービスです。
複雑なシステム構築がいらず、データベースワークフローグラフ生成などの機能を備えながら、豊富なAPIも用意されているクラウドサービスになります。
kintoneの機能についてもっと知りたい方は「開発プラットフォームとしてのkintone」をご覧ください。

1年間無料の開発者ライセンスを申し込む

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開発を手軽に試してみましょう。

1年間無料の開発者ライセンスを申し込む

記事に関するフィードバック

記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。

記事コメントは受け付けていません。