概要
これまでRaspberry PIでBME280を使う方法の1つとして,スイッチサイエンス社が公開しているPythonスクリプトが広く知られています.
その一方で,LinuxのIndustrial I/O Subsystem(以後Linux IIO)に準拠したドライバがBME280をサポートするようになりました.カーネルの標準機能として組み込まれており,Pythonが不要なこともあり使い方が簡単で応用もききます.
しかしLinux IIO経由でBME280を使える状態にするまでの,特に日本語の情報が今ひとつ不足しているようなのでここにまとめます.Linux IIOそのものについての情報は割愛します.
手順
BME280をi2cバスに接続している場合の手順について説明します./boot/config.txt
の末尾に以下の記述を追加して,リブートします.
dtoverlay=i2c-sensor,bme280
起動したら/sys/bus/iio/devices/iio:device0/name
をcat
してみてください.
pi@raspberrypi:~ $ cat /sys/bus/iio/devices/iio\:device0/name
bme280
と出てきたら無事にBME280がカーネルに認識されました.
ここまでくればあとは簡単で,同様に/sys/bus/iio/devices/iio:device0/in_temp_input
などをcat
してみてください.
pi@raspberrypi:~ $ cat /sys/bus/iio/devices/iio\:device0/in_temp_input
31490
これが温度で実際は31.49度です.小数点が無く1,000倍の値が得られます.同ディレクトリにある他ファイルを参照することで湿度,気圧も得られます.まとめると以下のようになります.
測定項目 | ファイル名 | 備考 |
---|---|---|
温度 | in_temp_input |
1,000倍の値が得られる |
湿度 | in_humidityrelative_input |
1,000倍の値が得られる |
気圧 | in_pressure_input |
単位はkPa(hPaにするには10倍する) |
他にもファイルがいくつかありますが,詳しく調べていません. |
注意点
Linux IIOのBME280ドライバを有効にすると,i2cバスを握りっぱなしになるようです.有効にした状態でPythonスクリプトを走らせると,以下のようになります.
pi@raspberrypi:~ $ python ./bme280_sample.py
Traceback (most recent call last):
File "./bme280_sample.py", line 139, in <module>
setup()
File "./bme280_sample.py", line 134, in setup
writeReg(0xF2,ctrl_hum_reg)
File "./bme280_sample.py", line 20, in writeReg
bus.write_byte_data(i2c_address,reg_address,data)
IOError: [Errno 16] Device or resource busy
同バスにBME280以外の他のデバイスも接続している場合は,Linux IIOを有効にしつつ同時利用することは難しいかもしれません.SPIバスのドライバもあるので,BME280をSPIバス接続に変えることを検討してみてください.
ただしこの場合は/boot/config.txt
の記述も変えなければいけないはずで,これについては調べていません.