📢 本記事は広告(PR)を含みます。
BoschのBMP390/BMP280は、IoT気象観測・ドローン高度制御・スマートウォッチに広く使われる高精度気圧センサです。SPI/I2Cデュアルインターフェース対応で、温度補正済みの気圧・温度データをマイコンから簡単に取得できます。実際のコードを交えて完全実装ガイドをお届けします。

目次
BMP390 vs BMP280 スペック比較
| 項目 | BMP390 | BMP280 |
|---|---|---|
| 気圧分解能 | 0.016 Pa(高精度) | 0.16 Pa |
| 気圧精度(絶対) | ±0.5 hPa(25°C付近) | ±1.0 hPa |
| 温度精度 | ±0.5°C | ±1.0°C |
| 電源電圧 | 1.65〜3.6V | 1.71〜3.6V |
| I2Cアドレス | 0x76 / 0x77 | 0x76 / 0x77 |
| 消費電流(通常動作) | 3.2 μA(1Hz) | 2.7 μA(1Hz) |
BMP390はBMP280の後継でより高精度・低ノイズ。高度計算の精度が重要なドローン・スポーツウォッチにはBMP390が適しています。コスト重視の環境モニタリング用途ではBMP280で十分です。
STM32 I2CによるBMP280完全実装
// BMP280 I2C読み取りの骨格(HALライブラリ使用)
#define BMP280_ADDR (0x76 << 1)
#define REG_CALIB 0x88
#define REG_CTRL_HUM 0xF2
#define REG_CTRL 0xF4
#define REG_DATA 0xF7
// 初期化:osrs_t=x2, osrs_p=x16, mode=Normal
uint8_t ctrl = (2<<5)|(5<<2)|3;
HAL_I2C_Mem_Write(&hi2c1, BMP280_ADDR, REG_CTRL, 1, &ctrl, 1, 100);
// データ読み取り(6バイト)
uint8_t raw[6];
HAL_I2C_Mem_Read(&hi2c1, BMP280_ADDR, REG_DATA, 1, raw, 6, 100);
// 生データから温度・気圧へ変換(補償式はデータシート4.2節参照)
int32_t adc_P = (raw[0]<<12)|(raw[1]<<4)|(raw[2]>>4);
int32_t adc_T = (raw[3]<<12)|(raw[4]<<4)|(raw[5]>>4);
気圧から高度を計算する方法
国際標準大気(ISA)モデルを使用した高度計算式:
// 高度計算(気圧高度計)
// P: 現在気圧[Pa], P0: 基準気圧(海面=101325Pa)
float altitude_m(float P, float P0) {
return 44330.0f * (1.0f – powf(P / P0, 0.1903f));
}
// 例: P=100000Pa → 約111m
// 精度: BMP390で±0.5m(穏やかな環境)
// BMP280で±1m程度

実用的なIoT気象観測システムの構成
ハードウェア構成:STM32L4(省電力) + BMP390 + SHT45(湿度センサ) + ESP32(Wi-Fi)の4チップ構成が鉄板。単3電池2本で1年以上の連続動作が可能。
データ送信:MQTT over TLS/WS経由でAWS IoT Core・Ambient・ThingSpeakへ送信。BMP390の1Hz測定でも10分間隔で送信すれば消費電流は平均数十μA台。
移動平均フィルタ:気圧は短時間の変動が大きいため、10〜30サンプルの移動平均を取ることで安定したデータが得られます。高度計算にも有効。
IoT・センサ開発書籍
STM32センサ・IoT開発書籍 Raspberry Pi IoT気象観測書籍
よくある質問 Q&A
BMP280とBME280の違いは?
BME280はBMP280に湿度センサを追加した上位互換品(ピン互換)。IoT気象観測では温度・湿度・気圧の3種類同時取得ができるBME280が人気。BMP280は気圧・温度のみですが消費電流がわずかに少ない。
I2CとSPIどちらを使うべきですか?
複数センサを同じバスに接続するならI2C(配線数が少ない)。高速サンプリング(100Hz以上)や長距離配線ではSPIが有利。マイコンのリソース状況と設計要件に合わせて選択してください。
センサの温度ドリフトを補正するには?
BMP390/BMP280は内蔵温度センサで自動補償しています。外部熱源(マイコン発熱等)の影響を避けるため、センサとマイコン間に距離を置くか熱遮断材を使用してください。高精度が必要な場合は外部リファレンスセンサとの相互校正も有効です。
まとめ
BMP390で精度0.016Paドローン・スポーツ用途に最適
I2C 6バイト読み取りSTM32 HALで簡単実装
高度計算精度±0.5mBMP390なら高度計にも使える
電池1年以上動作省電力IoT設計の定番センサ
本記事のコード例は概念説明のための簡略版です。実際の実装ではBoschの公式APIライブラリ(bosch-sensortec/BME280_driver)の使用を推奨します。楽天アフィリエイトリンクが含まれます。
📚 IoT・組み込みエンジニアの推薦書籍
【PR】本記事はアフィリエイト広告を含みます。記事内のリンクから商品を購入した場合、当サイトに報酬が発生することがあります。


