nimphea/dev/dps310

Search:
Group by:
Source   Edit  

DPS310 Barometric Pressure & Altitude Sensor Module

Nim wrapper for the DPS310 barometric pressure and altitude sensor.

The DPS310 is a high-precision barometric pressure sensor that can measure absolute pressure and calculate altitude. It supports both I2C and SPI interfaces.

Features:

  • High-precision pressure measurement (±2 Pa, equivalent to ±0.5 m)
  • Temperature sensor for compensation
  • Configurable measurement rates (1Hz to 128Hz)
  • Configurable oversampling (1 to 128 samples)
  • Both I2C and SPI transport options
  • Continuous and one-shot measurement modes

Example:

import nimphea
import nimphea/dev/dps310

var sensor: Dps310I2C
var config: Dps310I2CConfig

# Configure I2C transport
config.transport_config.address = DPS310_I2CADDR_DEFAULT
config.transport_config.periph = I2C_PERIPH_1
config.transport_config.speed = I2C_400KHZ
config.transport_config.scl = seed.GetPin(11)  # PB8
config.transport_config.sda = seed.GetPin(12)  # PB9

if sensor.init(config) == DPS310_OK:
  while true:
    sensor.process()
    let pressure = sensor.getPressure()      # in hPa
    let temperature = sensor.getTemperature() # in °C
    let altitude = sensor.getAltitude(1013.25) # sea level pressure
    # Use sensor data...

Types

Dps310I2C {.importcpp: "daisy::Dps310I2C", bycopy.} = object
DPS310 sensor with I2C transport Source   Edit  
Dps310I2CConfig {.importcpp: "daisy::Dps310I2C::Config", bycopy.} = object
  transport_config* {.importcpp: "transport_config".}: Dps310I2CTransportConfig
I2C device configuration Source   Edit  
Dps310I2CTransport {.importcpp: "daisy::Dps310I2CTransport", bycopy.} = object
I2C transport for DPS310 Source   Edit  
Dps310I2CTransportConfig {.importcpp: "daisy::Dps310I2CTransport::Config",
                           bycopy.} = object
  periph* {.importcpp: "periph".}: I2CPeripheral
  speed* {.importcpp: "speed".}: I2CSpeed
  scl* {.importcpp: "scl".}: Pin
  sda* {.importcpp: "sda".}: Pin
  address* {.importcpp: "address".}: uint8
I2C transport configuration Source   Edit  
Dps310Mode {.importcpp: "daisy::Dps310<daisy::Dps310I2CTransport>::dps310_mode_t",
             size: 4.} = enum
  DPS310_IDLE = 0,          ## Stopped/idle
  DPS310_ONE_PRESSURE = 1,  ## Single pressure measurement
  DPS310_ONE_TEMPERATURE = 2, ## Single temperature measurement
  DPS310_CONT_PRESSURE = 5, ## Continuous pressure measurements
  DPS310_CONT_TEMP = 6,     ## Continuous temperature measurements
  DPS310_CONT_PRESTEMP = 7   ## Continuous temp+pressure measurements
Operating mode Source   Edit  
Dps310Oversample {.importcpp: "daisy::Dps310<daisy::Dps310I2CTransport>::dps310_oversample_t",
                   size: 4.} = enum
  DPS310_1SAMPLE = 0,       ## 1 sample
  DPS310_2SAMPLES = 1,      ## 2 samples
  DPS310_4SAMPLES = 2,      ## 4 samples
  DPS310_8SAMPLES = 3,      ## 8 samples
  DPS310_16SAMPLES = 4,     ## 16 samples
  DPS310_32SAMPLES = 5,     ## 32 samples
  DPS310_64SAMPLES = 6,     ## 64 samples
  DPS310_128SAMPLES = 7      ## 128 samples
Oversample rate Source   Edit  
Dps310Rate {.importcpp: "daisy::Dps310<daisy::Dps310I2CTransport>::dps310_rate_t",
             size: 4.} = enum
  DPS310_1HZ = 0,           ## 1 Hz
  DPS310_2HZ = 1,           ## 2 Hz
  DPS310_4HZ = 2,           ## 4 Hz
  DPS310_8HZ = 3,           ## 8 Hz
  DPS310_16HZ = 4,          ## 16 Hz
  DPS310_32HZ = 5,          ## 32 Hz
  DPS310_64HZ = 6,          ## 64 Hz
  DPS310_128HZ = 7           ## 128 Hz
Measurement rate Source   Edit  
Dps310Result {.importcpp: "daisy::Dps310<daisy::Dps310I2CTransport>::Result",
               size: 4.} = enum
  DPS310_OK = 0,            ## Success
  DPS310_ERR = 1             ## Error
Operation result Source   Edit  
Dps310Spi {.importcpp: "daisy::Dps310Spi", bycopy.} = object
DPS310 sensor with SPI transport Source   Edit  
Dps310SpiConfig {.importcpp: "daisy::Dps310Spi::Config", bycopy.} = object
  transport_config* {.importcpp: "transport_config".}: Dps310SpiTransportConfig
SPI device configuration Source   Edit  
Dps310SpiTransport {.importcpp: "daisy::Dps310SpiTransport", bycopy.} = object
SPI transport for DPS310 Source   Edit  
Dps310SpiTransportConfig {.importcpp: "daisy::Dps310SpiTransport::Config",
                           bycopy.} = object
  periph* {.importcpp: "periph".}: SpiPeripheral
  sclk* {.importcpp: "sclk".}: Pin
  miso* {.importcpp: "miso".}: Pin
  mosi* {.importcpp: "mosi".}: Pin
  nss* {.importcpp: "nss".}: Pin
SPI transport configuration Source   Edit  

Consts

DPS310_I2CADDR_DEFAULT = 0x77'u8
Default I2C address Source   Edit  

Procs

proc configurePressure(this: var Dps310I2C; rate: Dps310Rate;
                       oversample: Dps310Oversample) {.
    importcpp: "#.configurePressure(#, #)", header: "dev/dps310.h", ...raises: [],
    tags: [], forbids: [].}

Configure pressure measurement parameters

Parameters:

  • rate - Sample rate (1Hz to 128Hz)
  • oversample - Oversampling rate (1 to 128 samples)
Source   Edit  
proc configurePressure(this: var Dps310Spi; rate: Dps310Rate;
                       oversample: Dps310Oversample) {.
    importcpp: "#.configurePressure(#, #)", header: "dev/dps310.h", ...raises: [],
    tags: [], forbids: [].}
Configure pressure measurement parameters Source   Edit  
proc configureTemperature(this: var Dps310I2C; rate: Dps310Rate;
                          oversample: Dps310Oversample) {.
    importcpp: "#.configureTemperature(#, #)", header: "dev/dps310.h",
    ...raises: [], tags: [], forbids: [].}

Configure temperature measurement parameters

Parameters:

  • rate - Sample rate (1Hz to 128Hz)
  • oversample - Oversampling rate (1 to 128 samples)
Source   Edit  
proc configureTemperature(this: var Dps310Spi; rate: Dps310Rate;
                          oversample: Dps310Oversample) {.
    importcpp: "#.configureTemperature(#, #)", header: "dev/dps310.h",
    ...raises: [], tags: [], forbids: [].}
Configure temperature measurement parameters Source   Edit  
proc getAltitude(this: var Dps310I2C; seaLevelhPa: cfloat): cfloat {.
    importcpp: "#.GetAltitude(#)", header: "dev/dps310.h", ...raises: [], tags: [],
    forbids: [].}

Calculate approximate altitude using barometric pressure

Parameters:

  • seaLevelhPa - Current sea level pressure in hPa (typically 1013.25)

Returns: Approximate altitude above sea level in meters

Source   Edit  
proc getAltitude(this: var Dps310Spi; seaLevelhPa: cfloat): cfloat {.
    importcpp: "#.GetAltitude(#)", header: "dev/dps310.h", ...raises: [], tags: [],
    forbids: [].}
Calculate approximate altitude using barometric pressure Source   Edit  
proc getPressure(this: var Dps310I2C): cfloat {.importcpp: "#.GetPressure()",
    header: "dev/dps310.h", ...raises: [], tags: [], forbids: [].}

Get the latest pressure reading

Returns: Pressure in hPa (hectopascals)

Source   Edit  
proc getPressure(this: var Dps310Spi): cfloat {.importcpp: "#.GetPressure()",
    header: "dev/dps310.h", ...raises: [], tags: [], forbids: [].}
Get the latest pressure reading in hPa Source   Edit  
proc getTemperature(this: var Dps310I2C): cfloat {.
    importcpp: "#.GetTemperature()", header: "dev/dps310.h", ...raises: [],
    tags: [], forbids: [].}

Get the latest temperature reading

Returns: Temperature in degrees Celsius

Source   Edit  
proc getTemperature(this: var Dps310Spi): cfloat {.
    importcpp: "#.GetTemperature()", header: "dev/dps310.h", ...raises: [],
    tags: [], forbids: [].}
Get the latest temperature reading in °C Source   Edit  
proc getTransportError(this: var Dps310I2C): Dps310Result {.
    importcpp: "#.GetTransportError()", header: "dev/dps310.h", ...raises: [],
    tags: [], forbids: [].}

Get and reset the transport error flag

Returns: DPS310_ERR if transport error occurred, DPS310_OK otherwise

Source   Edit  
proc getTransportError(this: var Dps310Spi): Dps310Result {.
    importcpp: "#.GetTransportError()", header: "dev/dps310.h", ...raises: [],
    tags: [], forbids: [].}
Get and reset the transport error flag Source   Edit  
proc init(this: var Dps310I2C; config: Dps310I2CConfig): Dps310Result {.
    importcpp: "#.Init(#)", header: "dev/dps310.h", ...raises: [], tags: [],
    forbids: [].}

Initialize the DPS310 sensor

Parameters:

  • config - Configuration struct with transport settings

Returns: DPS310_OK on success, DPS310_ERR on failure

Source   Edit  
proc init(this: var Dps310Spi; config: Dps310SpiConfig): Dps310Result {.
    importcpp: "#.Init(#)", header: "dev/dps310.h", ...raises: [], tags: [],
    forbids: [].}
Initialize the DPS310 sensor via SPI Source   Edit  
proc initDps310I2CConfig(): Dps310I2CConfig {.constructor,
    importcpp: "daisy::Dps310I2C::Config(@)", header: "dev/dps310.h".}
Initialize I2C device config with defaults Source   Edit  
proc initDps310I2CTransportConfig(): Dps310I2CTransportConfig {.constructor,
    importcpp: "daisy::Dps310I2CTransport::Config(@)", header: "dev/dps310.h".}
Initialize I2C transport config with defaults Source   Edit  
proc initDps310SpiConfig(): Dps310SpiConfig {.constructor,
    importcpp: "daisy::Dps310Spi::Config(@)", header: "dev/dps310.h".}
Initialize SPI device config with defaults Source   Edit  
proc initDps310SpiTransportConfig(): Dps310SpiTransportConfig {.constructor,
    importcpp: "daisy::Dps310SpiTransport::Config(@)", header: "dev/dps310.h".}
Initialize SPI transport config with defaults Source   Edit  
proc pressureAvailable(this: var Dps310I2C): bool {.
    importcpp: "#.pressureAvailable()", header: "dev/dps310.h", ...raises: [],
    tags: [], forbids: [].}

Check if new pressure data is available

Returns: true if new pressure data ready to read

Source   Edit  
proc pressureAvailable(this: var Dps310Spi): bool {.
    importcpp: "#.pressureAvailable()", header: "dev/dps310.h", ...raises: [],
    tags: [], forbids: [].}
Check if new pressure data is available Source   Edit  
proc process(this: var Dps310I2C) {.importcpp: "#.Process()",
                                    header: "dev/dps310.h", ...raises: [],
                                    tags: [], forbids: [].}

Update sensor readings

Call this regularly to fetch new pressure and temperature data.

Source   Edit  
proc process(this: var Dps310Spi) {.importcpp: "#.Process()",
                                    header: "dev/dps310.h", ...raises: [],
                                    tags: [], forbids: [].}
Update sensor readings Source   Edit  
proc reset(this: var Dps310I2C) {.importcpp: "#.reset()",
                                  header: "dev/dps310.h", ...raises: [], tags: [],
                                  forbids: [].}
Perform a software reset Source   Edit  
proc reset(this: var Dps310Spi) {.importcpp: "#.reset()",
                                  header: "dev/dps310.h", ...raises: [], tags: [],
                                  forbids: [].}
Perform a software reset Source   Edit  
proc setMode(this: var Dps310I2C; mode: Dps310Mode) {.importcpp: "#.setMode(#)",
    header: "dev/dps310.h", ...raises: [], tags: [], forbids: [].}

Set the operational mode

Parameters:

  • mode - Operating mode (idle, one-shot, or continuous)
Source   Edit  
proc setMode(this: var Dps310Spi; mode: Dps310Mode) {.importcpp: "#.setMode(#)",
    header: "dev/dps310.h", ...raises: [], tags: [], forbids: [].}
Set the operational mode Source   Edit  
proc temperatureAvailable(this: var Dps310I2C): bool {.
    importcpp: "#.temperatureAvailable()", header: "dev/dps310.h", ...raises: [],
    tags: [], forbids: [].}

Check if new temperature data is available

Returns: true if new temperature data ready to read

Source   Edit  
proc temperatureAvailable(this: var Dps310Spi): bool {.
    importcpp: "#.temperatureAvailable()", header: "dev/dps310.h", ...raises: [],
    tags: [], forbids: [].}
Check if new temperature data is available Source   Edit