5ドル!ラズパイ・ゼロ(Raspberry pi Zero)でIoT (39) 気圧センサ1 I2C BM1383AGLV

気圧と温度を取得できる

 筆者は、台風が来たときにしか関心がない大気圧を測るセンサです。今現在はヘクト・パスカルという単位が使われます。ヘクトは接頭辞なので、1000hPaは100000Paです。一般的な接頭辞kを使うと100kPaです。

 スイッチサイエンスのモジュールを入手しました。

  Conta 気圧センサモジュール BM1383AGLV搭載

 このモジュールの説明によると、計測できるのは300~1100hPaです。気圧の基準となる海面の1気圧は1023.35hPaです。台風が来ると気圧は下がります。台風の気圧は、衛星から撮影した雲のパターンで推定した値です(ドボラック法)。

 モジュールの説明によると、電源電圧は1.7~3.6Vなので、Arduino UNOなどの5Vを使うマイコンでは直接つなげられません。また、I2Cのスレーブ・アドレスは0x5Dと書かれています。

BM1383AGLVのスペック

 製造元のロームのデータシートに転載不可と書かれているので、直接データシートを読んでください。

接続

 ラズパイとの接続は下記のようになります。

BM1383AGLV ラズパイ
SDA 3番ピン
SCL 5番ピン
GND 6番ピン
3.3V 1番ピン 3.3V
IO4(INT) -

 ラズパイは本体に1.8kΩのプルアップがSDA/SCL信号に入っています。Arduinoでは入っていないので、モジュール裏側にチップ抵抗をはんだ付けできるパターンが用意されているので、コンパクトに実装できます。

 このモジュールは、ピンヘッダが最初からはんだ付けされています。ピンはほぼ0.4mmスクエアで、細ピンではありません。モジュールに仕様書には、ピンの太さの記述は見当たりません。

 上記のように接続が完了したら、ラズパイの電源を入れます。ターミナルから、i2cdetect -y 1 で接続を確認しました。スレーブ・アドレスは0x5dです。

レジスタ

 製造元のロームのデータシートに転載不可と書かれているので、直接データシートを読んでください。

 データを読み出す小数点レジスタは一般的な右詰めで形式はありません。

プログラム

 気圧データは読み出た時点で温度の補正がすんでいると思われるので、温度データは読み出していません。

#!/usr/bin/env python
import smbus
import time
i2c = smbus.SMBus(1)
addr=0x5d
#2^14=16384 2^6=64
config = 0x8a

#main
i2c.write_byte_data(addr,0x12,0x01) # Power ON
time.sleep(0.002)
i2c.write_byte_data(addr,0x13,0x01) # Reset Release
i2c.write_byte_data(addr,0x14,config) #average 16,continue
time.sleep(0.060)
print i2c.read_byte_data(addr,0x12),i2c.read_byte_data(addr,0x13)

while 1:
data = i2c.read_i2c_block_data(addr,0x1a,3)
hPa = (data[0]*16384 + data[1]*64 + (data[2]>>2)) /2048.0
print time.ctime(),round(hPa,2),"hPa"
time.sleep(60)

実行結果

※執筆時点;2017-11-29版をダウンロードし、sudo apt-get update と sudo apt-get upgrade -y および sudo rpi-update で更新し、カーネルはuname -a で確認。4.9.70でした。

※プログラムを仮にbm1383.pyという名前で/home/piに保存すると、sudo chmod 755 bm1383.py で実行権を付け、ターミナルから、python bm1383.pyで実行します。I2CやSPIのグループにpiユーザが属しているので、sudoは不要です。
 プログラム・リストは、表示の関係でTabキーが無視されるので、スペースに代えてあります。また、リスト中を2回クリックすると全選択になるので、CTRL-Cでコピーし、テキスト・エディタにCTRL-Vで貼り付けて利用してください。ラズパイに持っていくと、スペースやリターン・コードなどが化けていることがあるので、一度消して、ラズパイのテキスト・エディタで修正してください。

※I2Cの有効化は、こちらの説明を参照ください。SPIなどにもEnableにチェックを入れています。