10#ifndef M5_UNIT_ENV_UNIT_SPA06_HPP
11#define M5_UNIT_ENV_UNIT_SPA06_HPP
13#include <M5UnitComponent.hpp>
14#include <m5_utility/container/circular_buffer.hpp>
26class UnitSPA06 :
public Component,
public PeriodicMeasurementAdapter<UnitSPA06, spa06::Data> {
27 M5_UNIT_COMPONENT_HPP_BUILDER(
UnitSPA06, 0x76);
47 explicit UnitSPA06(
const uint8_t addr = DEFAULT_ADDRESS);
53 virtual bool begin()
override;
56 virtual void update(
const bool force =
false)
override;
111 float altitude(
const float sea_level_hpa = 1013.25f)
const;
184 bool start_periodic_measurement();
185 bool seed_temperature();
186 bool stop_periodic_measurement();
189 bool read_coefficients();
195 spa06::coeffs_t _coeffs{};
198 int32_t _seed_tmp_raw{};
200 float _reference_hpa{1013.25f};
201 uint32_t _pushed{}, _consumed{};
202 std::unique_ptr<m5::container::CircularBuffer<spa06::Data>> _data{};
211constexpr uint8_t REG_PSR_B2{0x00};
212constexpr uint8_t REG_TMP_B2{0x03};
213constexpr uint8_t REG_PRS_CFG{0x06};
214constexpr uint8_t REG_TMP_CFG{0x07};
215constexpr uint8_t REG_MEAS_CFG{0x08};
216constexpr uint8_t REG_CFG_REG{0x09};
217constexpr uint8_t REG_RESET{0x0C};
218constexpr uint8_t REG_ID{0x0D};
219constexpr uint8_t REG_COEF{0x10};
220constexpr uint8_t REG_COEF_SRCE{0x28};
Goertek SPA06-003 barometer (pressure + temperature); read pressure()/temperature()/altitude() direct...
Definition unit_SPA06.hpp:26
bool readRate(spa06::Rate &rate)
Read the measurement rate.
Definition unit_SPA06.cpp:478
void config(const config_t &cfg)
Set the configuration.
Definition unit_SPA06.hpp:66
bool softReset()
Soft reset (REG_RESET SOFT_RST), leaving the chip initialized but unconfigured and stopped.
Definition unit_SPA06.cpp:105
bool readOversampling(spa06::Oversampling &pressure_oversampling, spa06::Oversampling &temperature_oversampling)
Read the oversampling.
Definition unit_SPA06.cpp:416
bool writeOversamplingTemperature(const spa06::Oversampling temperature_oversampling)
Write the temperature oversampling.
Definition unit_SPA06.cpp:448
config_t config() const
Gets the configuration.
Definition unit_SPA06.hpp:61
bool startPeriodicMeasurement()
Start periodic measurement in the current settings.
Definition unit_SPA06.cpp:328
bool measureSingleshot(spa06::Data &d, const spa06::Oversampling pressure_oversampling=spa06::Oversampling::X16, const spa06::Oversampling temperature_oversampling=spa06::Oversampling::X1)
Measure pressure and temperature a single shot.
Definition unit_SPA06.cpp:338
float relativeAltitude() const
Altitude (m) relative to the last setReference() tare point (0 m at that pressure)
Definition unit_SPA06.cpp:543
float temperature() const
Latest compensated temperature (degC)
Definition unit_SPA06.cpp:523
bool writeRate(const spa06::Rate rate)
Write the measurement rate (pressure and temperature share the rate)
Definition unit_SPA06.cpp:488
bool writeOversamplingPressure(const spa06::Oversampling pressure_oversampling)
Write the pressure oversampling.
Definition unit_SPA06.cpp:427
void setReference()
Tare the current pressure as the 0 m reference for relativeAltitude()
Definition unit_SPA06.cpp:548
float altitude(const float sea_level_hpa=1013.25f) const
Absolute altitude (m) versus the given sea-level pressure (QNH, hPa)
Definition unit_SPA06.cpp:538
bool writeOversampling(const spa06::Oversampling pressure_oversampling, const spa06::Oversampling temperature_oversampling)
Write the oversampling.
Definition unit_SPA06.cpp:469
virtual bool begin() override
Begin the unit.
Definition unit_SPA06.cpp:50
bool stopPeriodicMeasurement()
Stop periodic measurement.
Definition unit_SPA06.cpp:333
float pressure() const
Latest compensated pressure (hPa)
Definition unit_SPA06.cpp:508
virtual void update(const bool force=false) override
Update the unit.
Definition unit_SPA06.cpp:130
Top level namespace of M5Stack.
Settings for begin()
Definition unit_SPA06.hpp:34
bool start_periodic
Start periodic measurement on begin()?
Definition unit_SPA06.hpp:36
spa06::Mode mode
Continuous measurement type (pressure / temperature / both)
Definition unit_SPA06.hpp:44
spa06::Oversampling pressure_oversampling
Pressure oversampling; X16 = Standard.
Definition unit_SPA06.hpp:38
spa06::Oversampling temperature_oversampling
Temperature oversampling.
Definition unit_SPA06.hpp:40
spa06::Rate rate
Pressure/temperature measurement rate.
Definition unit_SPA06.hpp:42
One SPA06 sample: a 6-byte burst from PSR_B2 (0x00) = PSR(24) + TMP(24), big-endian.
Definition unit_SPA06_data.hpp:183
constexpr uint32_t DEFAULT_STORED_SIZE
Default ring buffer depth.
Definition unit_SPA06.hpp:207
SPA06-003 measurement data + calibration/compensation (framework independent)
Oversampling
Oversampling factor; the enum value is the PM_PRC/TM_PRC nibble (datasheet Table 4)
Definition unit_SPA06_data.hpp:29
Rate
Measurement rate; the enum value is the PM_RATE/TMP_RATE nibble (measurements per second)
Definition unit_SPA06_data.hpp:44
Mode
Continuous measurement type; the enum value is the MEAS_CFG MEAS_CTRL[2:0] background-mode code.
Definition unit_SPA06_data.hpp:59