From ab49130e706187273cdc899d9c48216145266190 Mon Sep 17 00:00:00 2001 From: Adrian Batzill Date: Thu, 2 Nov 2023 08:01:57 +0100 Subject: [PATCH] Support for BMP390 (untested) --- main/sensors.go | 2 +- sensors/bmp388/bmp388.go | 3 ++- sensors/bmp388/registers.go | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/main/sensors.go b/main/sensors.go index 1877ffe4..b58acf4c 100644 --- a/main/sensors.go +++ b/main/sensors.go @@ -88,7 +88,7 @@ func initPressureSensor() (ok bool) { log.Printf("Error identifying IMU: %s\n", err.Error()) return false } - if v == bmp388.ChipId { + if v == bmp388.ChipId || v == bmp388.ChipId390 { log.Printf("BMP-388 detected") bmp, err := sensors.NewBMP388(&i2cbus) if err == nil { diff --git a/sensors/bmp388/bmp388.go b/sensors/bmp388/bmp388.go index d4106641..b259a3e8 100644 --- a/sensors/bmp388/bmp388.go +++ b/sensors/bmp388/bmp388.go @@ -6,6 +6,7 @@ and converted to use embed */ import ( "errors" + "github.com/kidoman/embd" ) @@ -172,7 +173,7 @@ func (d *BMP388) ReadPressure() (float64, error) { } func (d *BMP388) Connected() bool { data, err := d.readRegister(RegChipId, 1) - return err == nil && data[0] == ChipId // returns true if i2c comm was good and response equals 0x50 + return err == nil && (data[0] == ChipId || data[0] == ChipId390) // returns true if i2c comm was good and response equals 0x50/0x60 } func (d *BMP388) SetMode(mode Mode) error { d.Config.Mode = mode diff --git a/sensors/bmp388/registers.go b/sensors/bmp388/registers.go index 2f24ff91..991fa6f8 100644 --- a/sensors/bmp388/registers.go +++ b/sensors/bmp388/registers.go @@ -20,6 +20,7 @@ const ( const ( ChipId byte = 0x50 // correct response if reading from chip id register + ChipId390 byte = 0x60 // BMP390 is compatible to bmp388, just with different Chip ID, see #252 PwrPress byte = 0x01 // power on pressure sensor PwrTemp byte = 0x02 // power on temperature sensor SoftReset byte = 0xB6 // command to reset all user configuration