第12回: I2CデバイスBME280で温湿度と気圧をモニタする

ラズパイのGPIOにI2CデバイスであるBME280を接続して、温度、湿度、気圧を測定してみます。

1. I2Cとは

I2C(アイ・スクエアド・シー、アイ・アイ・シー)はフィリップス社で開発されたシリアルバスである。低速な周辺機器をマザーボードへ接続したり、組み込みシステム携帯電話などで使われている。

Inter-Integrated Circuit の略で、I-squared-C(アイ・スクエアド・シー)が正式な読みとされている。ただし、一般的な文字コード環境のプレーンテキスト上では上付き文字が使えないため、I2CあるいはIICと表記されることも多く、日本国内ではこれをもって「アイ・ツー・シー」と発声されたりカタカナ表記される[1]ことがある。

Wikipediaより

電源、グランド、シリアルクロック(SCL)、シリアルデータ(SDA)の4本で接続するシリアル通信規格です。

2. I2Cの有効化

ラズパイを適切にセットアップすれば、GPIOに接続したI2Cデバイスを簡単に取り扱うことが出来ます。
まずは、raspi-configで、I2Cを有効にしましょう。

 

[5 Interfacing Options] > [P5 I2C] > [<はい>] > [<了解>]の順に進めば、I2Cが有効になります。

 

I2Cのツールをインストールします。

3. BME280プリント基板

BME280が載っている様々なプリント基板が出回っていますが、私はコレを購入しました。種類によって微妙に回路が異なるので、ちゃんと取説や回路図を読みましょう。

 

私が買った基板の回路図です。J1がラズパイと接続するピンヘッダです。半田付けが必要です。

4. 基板の接続と動作確認

ラズパイの電源を落としてから、基板のピンヘッダJ1とラズパイのGPIOピンヘッダを接続します。

ラズパイにはI2C用のピンが予約されています。ラズパイの3番ピンがSDI(基板のシルク印刷ではSDA)、5番ピンがSCK(基板のシルク印刷ではSCL)です。この2つと、+3.3V(1番ピン)及びGND(9番ピン)を、プリント基板と接続します。

接続図は次のとおりです。なお、ピンヘッダを基板のどっち側に付けるかで裏表がひっくり返るので注意です。私はBME280が上向きになるようにしました。

プリント基板のCSB(J1の5番ピン)には何も接続しません。この信号はVDD(+3.3V)でプルアップされており、BME280の仕様により通信IFがI2Cになります。
(CSBをGND電位にドライブすると通信IFがSPIに切り替わる。)

SDO(J1の6番ピン)にも何も接続しません。このピンの状態によりBME280のアドレスが選択されます。本基板ではGNDにプルダウンされているので、BME280の仕様によりアドレスが0x76に設定されます。もし、SDOをVDD(+3.3V)にドライブするとアドレスは0x77になります。

接続が済んだら電源を投入します。

次のコマンドでラズパイに接続されたI2Cデバイスのアドレスを確認できます。BME280が正しく認識できたら、アドレス76が表示されます。

 

5. PythonでBME280からデータ取得

プロジェクトを置くディレクトリを作成して移動します。

 

Pythonの仮想環境を構築します。

 

BME280のデータシート読んで、1からコーディング…..。
無いものは無いPython。ライブラリRPi.bme280に頼れば楽ちん。インストールしましょう。

 

ライブラリのサンプルプログラムです。

 

仮想環境に入ってサンプルを実行します。ID、日時、気温、気圧、湿度を取得できました。超簡単。

 

ラズパイ + センサの組み合わせで可能性が無限に広がりますね。
以上です。




目次

第1回: セットアップに必要なもの
第2回: SDカードにRaspbianをインストールする
第3回: 起動!
第4回: リモートログインするための設定
第5回: リモートログインして設定を続行する
第6回: パッケージ管理システムapt
第7回: RSA公開鍵認証でリモートログインする
第8回: Pythonの仮想環境を整える
第9回: MJPG-streamerを導入する
第10回: GPIOを汎用UARTとして使用する方法
第11回: GPIOでLチカ
第12回: I2CデバイスBME280で温湿度と気圧をモニタする

第13回: (未定)

 


2019/06/23: 初版