python-peripheryを使ってみる

i2c温度計(BMP280)

ディジタル温度計はいくつかありますが、BMP280/BME280は i2c/SPI の両方で使えるちょっと変わったディジタル温度計です。
データシートはこち らで公開されています。
温度の精度(Absolute accuracy temperature)は±1℃、気圧の精度(Absolute accuracy pressure)は±1.0hPaです。

まずは i2c での使い方を紹介します。
BMP280は4ピン仕様(i2c専用)と6ピン仕様(i2c/SPI兼用)のモジュールが有りますが、
6ピン仕様のモジュールをi2cで使うときは以下の結線でi2cモジュールとして使うことができます。
BMP280 Host
Vcc 3V3
Gnd GND
SCL SCL
SDA SDA
CSB 3.3V
SDO i2cアドレス選択
Gnd=0x76/3.3V=0x77

4ピン仕様のモジュールのi2cアドレスは0x76固定となっています。
左からBMP085(i2c専用) BMP280(i2c専用) BMP280(i2c/SPI兼用)



こ ちらで公開されているRPiのコードをpython-periphery用に移植しただけです。
このコードはBME280用のコードです。
BMP280とBME280は同じ制御方法で使えますが、BMP280は湿度を取り出すことができません。
0xD0レジスタでBMP280(=0x58) BME280(=0x60)を判定することができます。
python-peripheryのコードはこ ちらで 公開しています。
起動時の引数でic2デバイスファイルを指定します。
RaspberryPiで使うときは「--device /dev/i2c-1」を指定します。
$ sudo -E python3 bmp280-i2c.py --help
usage: bmp280-i2c.py [-h] [-d DEVICE] [-a ADDR] [-p PRINT]

options:
  -h, --help            show this help message and exit
  -d DEVICE, --device DEVICE
                        device file name
  -a ADDR, --addr ADDR  i2c address
  -p PRINT, --print PRINT
                        print debug

$ sudo -E python3 bmp280-i2c.py -d /dev/i2c-1
device=/dev/i2c-1
addr=0x76
chip_id = 0x58 BMP280
-----------------------
Chip ID     : 0x58
Temperature : 24.26 C
Pressure    : 1022.91 hPa
-----------------------
Chip ID     : 0x58
Temperature : 24.27 C
Pressure    : 1022.91 hPa
-----------------------
Chip ID     : 0x58
Temperature : 24.27 C
Pressure    : 1022.92 hPa
-----------------------
Chip ID     : 0x58
Temperature : 24.26 C
Pressure    : 1022.92 hPa

次回は同じデバイスをSPIで使ってみます。