株式会社インデペンデンスシステムズ横浜

システム開発エンジニアの西田五郎が運営しております。Raspberry Pi や Arduino その他新規開発案件のご依頼をお待ちしております。

IoT Raspberry Pi

Raspberry PiでIoT(温度・湿度・気圧データ編 その1)BME280でデータ取得

投稿日:2017年4月2日 更新日:

Raspberry PiでIoTに取り組んでみるという内容で実際に動作させながら書きたいと思います。まずは、IoTとは、Internet of Thingsの略です。もう既にこの言葉も普及していて様々な場所で取り上げられていると思いますので、ここではページ最後に補足という形で書くことにして早速具体的な内容に進みます。

以下が、Raspberry PiでIoT(温度・湿度・気圧データ編)の記事一覧です。
Raspberry PiでIoT(温度・湿度・気圧データ編 その1)BME280でデータ取得
Raspberry PiでIoT(温度・湿度・気圧データ編 その2)Webサーバ側構築とデータ送信
Raspberry PiでIoT(温度・湿度・気圧データ編 その3)データ表示とグラフ表示”
Raspberry PiでIoT(温度・湿度・気圧データ編 その4)アラートメール送信

今回のテーマの処理内容はRaspbery Piに温度、湿度、気圧が計測出来るセンサーモジュールを接続して、一定時間毎にインターネット経由でWebサーバに保存します。また保存した内容をブラウザで表示出来るようにします。以下は温度データをグラフ表示してみました。

データ保存の流れ
Raspberry Pi + センサー => インターネット => Webサーバ(データベース)

データ閲覧の流れ
PC、スマホ等のブラウザ <=> Webサーバ(データベース)

今回は以下の作業までを行います。
1.センサーモジュールの組み立て
2.Raspbery PiでI2Cを利用可能にする
3.Raspbery Piにセンサーモジュールを接続する
4.I2Cのライブラリを導入する
5.Pythonのサンプルプログラムで動作確認する
6.改良されたサンプルプログラムを部品として利用する

今回の作業についてですが、Raspbery Piやブレッドボードにあまり慣れていないという場合であれば、以下のページが参考になると思います。またセンサー値取得のプログラムはこのページのプログラムを利用させて頂きました。

ラズベリーパイで温度・湿度・気圧をまとめて取得!AE-BME280でIC2通信(株式会社ローム DEVICE PLUSというサイトでこの記事の作者は円山ナカノさんです。)

それでは、作業の順番に書きます。

1.センサーモジュールの組み立て
センサーモジュールは以下の製品です。
BME280使用 温湿度・気圧センサモジュールキット(株式会社秋月電子通商)
このページからの引用です。
ボッシュ社のBME280を搭載したセンサモジュールで、温度、湿度、気圧の3つの環境情報を同時に測定できます。マイコンとの通信方式は、I2CまたはSPIを選択することができます。

ピンをはんだ付けする必要があります。また今回はI2Cで利用しますがそのためにはJ3をジャンパ接続する必要があります。(※すいません、私の場合はこれをやっていませんがそれでもI2Cで使えたようです。きちんとやるという場合はここをはんだ付けして下さい。以下はマニュアルからの引用です。)

ピンを付けて小さいブレッドボードに差した状態です。(見ての通りJ3ははんだ付けしていません。)

2.Raspbery PiでI2Cを利用可能にする
ここでは、raspi-configを使います。sudo raspi-configで設定を起動します。
5.Interfacing Optionsを選択します。

P5 I2Cを選択します。

はいで有効にします。

※raspbianのバージョンによっては画面が異なります。

3.Raspbery Piにセンサーモジュールを接続する
以下のように接続します。
AE-BME280 – Raspberry Pi
pin1 VDD – 3.3V
pin2 GND – GND
pin3 CSB – 未使用
pin4 SDI – I2CのSDA
pin5 SDO – GND(これでI2cのアドレスが0x76になる)
pin6 SCK – I2CのSCL

AE-BME280は写真の左からpin1,pin2..です。

4.I2Cのライブラリを導入する
以下のように必要なパッケージをインストールします。
$ sudo apt-get install i2c-tools
$ sudo apt-get python-smbus

5.Pythonのサンプルプログラムで動作確認する
まずは接続出来ているかどうか以下で確認します。ここまでの作業に問題なければ、以下のように期待通りの0x76が表示されると思います。
$ sudo i2cdetect -y 1

以上の0x76のアドレスの確認が出来たら、スイッチサイエンスさんの以下のサンプルプログラムを用意します。
SWITCHSCIENCE/BME280 GitHub
Raspberry Piからは以下でダウンロード出来ました。
$ wget https://raw.githubusercontent.com/SWITCHSCIENCE/BME280/master/Python27/bme280_sample.py

スイッチサイエンスさんのBME280搭載商品は今現在で以下があります。
BME280搭載 温湿度・気圧センサモジュール
BME280搭載 温湿度・気圧センサモジュール ピンヘッダ実装済

このサンプルプログラムを以下のように実行します。
$ sudo python bme280_sample.py
以下のように取得出来ました。

もし、smbus2が見つからないというメッセージが出た場合は、以下でインストールしてみて下さい。
$ sudo pip install smbus2
その前にpipがインストールされていないという場合は、以下を試してみて下さい。
$sudo apt-get install python-pip
関連リンク
smbus2 0.1.4
Make. Pip(Pythonのパッケージ管理)

サンプルプログラムの内容は、ずばり、I2CでBME280の仕様に従って、初期設定を行って、温度、湿度、気圧を取得して表示しているプログラムです。理解するにはデータシートをしっかり読んでいくしかないと思います。

6.改良されたサンプルプログラムを部品として利用する
サンプルプログラムでは、測定結果を単に表示しているだけなので、少し改良して温度、湿度、気圧の各データを取得するPythonモジュールとして利用出来るようにします。

この修正ですが、上でも書いた以下のページで、ここでやりたい修正が完了済みのプログラムとして公開されていました。ページ後半過ぎに、/home/pi/bme280_custom.py として公開されています。これを使います。(作者の円山様ならびにロームの関係者の方々ありがとうございます。)
ラズベリーパイで温度・湿度・気圧をまとめて取得!AE-BME280でIC2通信
修正内容はセンサー値を画面出力しないで、変数に設定して最終的に温度・湿度・気圧をカンマ区切りで文字列として取得出来るようになっていることです。これで各センサー値をプログラム内の続きの処理で使えるようになります。

以下、修正部分の一部抜粋です。このように最終的にカンマ区切り文字列で取得出来ます。

    #compensate_T(temp_raw)
    #compensate_P(pres_raw)
    #compensate_H(hum_raw)
    t = compensate_T(temp_raw)
    p = compensate_P(pres_raw)
    h = compensate_H(hum_raw)
    return p + "," + t + "," + h

このプログラムを自分の適当なディレクトリに bme280_custom.pyとして保存します。そして同じディレクトリに例えばbme280Main.pyとして、以下のようにプログラムを書きました。

#coding: utf-8

import bme280_custom

csv = bme280_custom.readData()
list = csv.split(",")

press = list[0]
temp = list[1]
hum = list[2]

print "temp = " + temp
print "hum = " + hum
print "press = " + press

以下のように実行します。
$ sudo python bme280Main.py

これで、センサーの値がbme280Main.pyの中で利用出来るようになりました。これを利用して、次回はWebサーバとの連携を進めていきます。

補足、雑感等
IoTについてですがソフトウェア開発エンジニアの立場から少しだけ書きます。

IoTを「技術の総合格闘技」と表現する場合があります。私はこの表現はマイクロソフトのIoT関連のセミナーで聞いた記憶があります。やはり様々な分野の技術が総合的にIoTを構成しているということでしょうか。私がざっと思いつくだけでも以下のような構成分野があります。

電子デバイス(マイコン、センサー)
機械システム(ロボット)
ネットワーク(インターネット)
プラットフォーム(Web系、クラウド系)
ソフトウェア系
機械学習、AI、画像処理

さすがにこれら全てを広く深く習得するというのは難しいと思います。広く浅くするとか、自分の専門分野を極めていくとか取り組み方はいろいろあると思います。

今回の記事では、Raspberry Pi(マイコンボード、Linux)、センサー(I2C接続)、Pythonプログラミングといった要素が出てきました。

私の場合はソフトウェア系のエンジニアですので、デバイス製品開発というよりソリューションの分野に取り組んでいます。具体的には顧客からこういったデバイスをインターネット接続したいとかセンサーネットワークを構築したいといった依頼に対応しています。

あと、最近では今回の記事のように比較的気軽にというか高価なデバイス類をそろえなくても実際に動かせるようになってきていると思います。

これからいろいろとこのサイトでも書いていきたいと思います。また仕事のご依頼もお待ちしております。

AdSense

AdSense

-IoT, Raspberry Pi

執筆者:

関連記事

Raspberry PiでIoT(温度・湿度・気圧データ編 その2)Webサーバ側構築とデータ送信

Raspberry PiでIoT 温度・湿度・気圧データ編の2回目です。前回はRaspberry Piに温度・湿度・気圧データが測定出来るセンサモジュールのBME280を接続して値を取得しました。 以 …

Raspberry PiでIoT(温度・湿度・気圧データ編 その3)データ表示とグラフ表示

Raspberry PiでIoT 温度・湿度・気圧データ編の3回目です。前回までで、Raspberry Piから温度、湿度、気圧データをWebサーバへ送信してそのデータを蓄積出来るようになりました。今 …

SkyWayでRaspberry Piの遠隔操作(その1)MQTT over WebSocket

前回までの記事でSkyWayのJavaScriptでの動作確認を行いました。またRaspberry Piでの動作も確認出来ました。そうすると今回はSkyWayを利用してRaspberry Piの遠隔操 …

Groveコネクタとi2cハブでセンサを接続する

Groveコネクタとi2cハブを使ってi2cセンサを接続してみました。こうすることによって接続を間違えたり、見た目が悪くなったりしないように出来ると思います。

Raspberry PiでIoT(MQTTで遠隔操作編 その1)MQTTでの通信

Raspberry PiでIoTのMQTTで遠隔操作編のシリーズを始めます。実際に動作させてみるということを重点として進めます。ここでの遠隔操作は2台のRaspberry Pi間でインターネット経由の …