Raspberry PiまたはPicoとBMP180で気圧を測る

bmp180-1Raspberry Pi

本記事の内容

  • Raspberry PiまたはPicoとBMP180モジュールを使って、大気圧を測ってみました。どちらもエラーコードを載せて、よくあるプログラムミスに陥らないように丁寧に解説しています。
  • Raspberry Pi Picoでは、常時気圧を測り続ける気圧ロガーやハンディ気圧計に応用することができます。

必要なもの

  • Raspberry Pi、または、Raspberry Pi Pico
  • BMP180モジュール
  • ジャンプワイヤー、ブレッドボードなど
bmp180-1

今回使用するのは、HiLetgoのBMP180 GY-68 デジタル気圧プレッシャーセンサーモジュールです。Amazonで3個550円で売られていました。

BMPモジュール自体は古いもので、ネットで使い方等を調べると8年近く前の記事がヒットします。既に生産終了となったものも多いです。

今回はAmazonで安売りされていたという理由だけで購入してしまいました。使い方を以下にまとめていきます。

Raspberry Piで作製する場合

私の場合は、Raspberry Pi 4Bで作製していますが、基本的にどのRaspberry Piでも大丈夫です。とはいえ、古いRaspberry Piはもはやプレミアものなので、逆に見つかりませんが、、、

配線

配線は以下の通りで、かなりシンプルです。

Raspberry PiBMP180
5V Power
(3V3 Powerも可)
VIN
GroundGND
GPIO3(SCL)SCL
GPIO3(SDA)SDA

プログラムコード(I2CインターフェイスをONに)

まずはRaspberry PiのI2CインターフェイスがONになっていることを確認します。OFFの状態では、

FileNotFoundError : [Errno 2] No such file or directory: ‘/dev/i2c-1’

というエラーで弾かれてしまいます。I2CインターフェイスがONになっているかどうかは、「設定>Raspberry Piの設定>インターフェイス>I2C」で確認できます。

I2C設定

プログラムコードはGitHubにもありますが、先人の記事を参考にしてhttps://osoyoo.comから頂きました。 以下のコードでダウンロードと解凍、BMP Python Libraryのセットアップができます。

wget https://osoyoo.com/driver/Adafruit_Python_BMP.tar.gz
sudo tar zxvf Adafruit_Python_BMP.tar.gz
sudo tar xvf Adafruit_Python_BMP.tar
cd Adafruit_Python_BMP
sudo python setup.py install

あとは、サンプルプログラムであるsimpletest.pyを実行するだけです。

Raspberry Pi Picoで作製する場合

気圧を測定する程度であれば、Raspberry Pi Picoでも性能的には十分です。むしろ、Raspberry Pi Picoの方が消費電力も抑えられてエコになります。(ほんの数ワットの差ですが、、、)

BMP180が小指サイズの極小モジュールなので、制御するマイコンボードも安価で小型なRaspberry Pi Picoの方が全体がコンパクトに収まります。

配線

配線は以下の通りです。

Raspberry Pi PicoBMP180
㊵ VBUSVIN
㊳ GNDGND
② GP1(SCL)SCL
① GP0(SDA)SDA

プログラムコード(bmp180.pyの47行目をコメントアウト)

まずは、Githubのmicropython-bmp180から、bmp180.pyを拝借します。ここで重要なポイントは、47行目をコメントアウトさせることです。

もしコメントアウトさせないと、

OSError: I2C operation not supported

というエラーでI2C通信がうまくいきません。私もこちらの方の記事を見るまで、原因が分かりませんでした。

あとは、以下のPythonプログラムを作成して、bmp180.pyと一緒にRaspberry Pi Picoにアップロードするだけです。

from bmp180 import BMP180
from machine import I2C, Pin
from utime import sleep

i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=200000) 
bmp180 = BMP180(i2c)

while True:

    temperature = bmp180.temperature
    pression = bmp180.pressure/1000.0
    altitude = bmp180.altitude
    
    print("Temperature: {:.1f} °C, Pression: {:.1f} kPa, Altitude: {:.1f} m".format(temperature , pression , altitude))
    
    sleep(1)

上記の通り、気温と気圧を継続的に測定することができます。高度(Altitude)は気圧から高度を求める計算式から算出されています。

bmp.pyのコードを読む限り、標高計算サイトで詳しく書かれている数式とは若干異なるので、どうやら簡易化した計算式かと思われます。標高がマイナス値で出てるのは、64行目で

「self.baseline = 101325.0」

と定義していたからでした。当日は快晴で高気圧な日だったため、代わりに正しい海面気圧を定義すると、おおよそ合っていそうな標高が出力されました。

まとめ

Raspberry Pi、もしくはRaspberry Pi PicoとBMP180で、気圧を測ることができました。

LCDディスプレイやSDカードモジュールと組み合わせることで、気圧ロガーやハンディ気圧計を作製することもできます。ぜひ以下の記事も参考にしてみて下さい。

コメント