drivers icon indicating copy to clipboard operation
drivers copied to clipboard

Add support for bme68x sensor

Open gandarez opened this issue 9 months ago • 0 comments

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)
}

gandarez avatar Apr 07 '25 19:04 gandarez