drivers
drivers copied to clipboard
Add support for bme68x sensor
This PR adds support for BME68X (BME680/BME688) a low power gas, pressure, temperature & humidity sensor.
It includes the support for Sleep and Forced modes as well I2C and SPI interfaces. It introduces the Options Pattern to make the initialization of bme68x package more flexible.
Simple example:
tsensor := bme68x.NewI2C(machine.I2C0,
bme68x.WithIIRFilter(bme68x.Coeff4),
bme68x.WithTemperatureOversampling(bme68x.Sampling8X),
bme68x.WithPressureOversampling(bme68x.Sampling4X),
bme68x.WithHumidityOversampling(bme68x.Sampling2X),
bme68x.WithHeatrDuration(150),
bme68x.WithHeatrTemperature(320),
)
if err := tsensor.Configure(); err != nil {
logger.Error(fmt.Sprintf("error configuring sensor: %s", err.Error()))
return
}
connected, err := tsensor.Connected()
if err != nil {
logger.Error(fmt.Sprintf("error checking sensor connection: %s", err.Error()))
return
}
if !connected {
logger.Error("sensor not connected")
return
}
if err := tsensor.SetMode(bme68x.ModeForced); err != nil {
logger.Error(fmt.Sprintf("error setting sensor mode: %s", err.Error()))
return
}
for {
if err := tsensor.Read(); err != nil {
logger.Error(fmt.Sprintf("error reading sensor: %s", err.Error()))
time.Sleep(2 * time.Second)
continue
}
logger.Info(strings.Repeat("-", 40))
logger.Info(fmt.Sprintf(" Temperature: %.2f°C", tsensor.Temperature))
logger.Info(fmt.Sprintf(" Pressure: %.fhPa", tsensor.Pressure/100))
logger.Info(fmt.Sprintf(" Gas: %.1fKOhms", tsensor.GasResistance/1000))
logger.Info(fmt.Sprintf(" Approx. Altitude: %.1fm", bme68x.CalcAltitude(seaLevelPressurehPa, tsensor.Pressure)))
logger.Info(fmt.Sprintf(" Humidity: %.1f%% (%s)", tsensor.Humidity, humidityDescription))
logger.Info(strings.Repeat("-", 40))
time.Sleep(2 * time.Second)
}