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