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_pa = 101325.0f)
const;
117 [[deprecated(
"Use setAltitudeReference() instead")]]
void setReference()
189 bool start_periodic_measurement();
190 bool seed_temperature();
191 bool stop_periodic_measurement();
194 bool read_coefficients();
200 spa06::coeffs_t _coeffs{};
203 int32_t _seed_tmp_raw{};
205 float _altitude_reference_pa{101325.0f};
206 uint32_t _pushed{}, _consumed{};
207 std::unique_ptr<m5::container::CircularBuffer<spa06::Data>> _data{};
216constexpr uint8_t REG_PSR_B2{0x00};
217constexpr uint8_t REG_TMP_B2{0x03};
218constexpr uint8_t REG_PRS_CFG{0x06};
219constexpr uint8_t REG_TMP_CFG{0x07};
220constexpr uint8_t REG_MEAS_CFG{0x08};
221constexpr uint8_t REG_CFG_REG{0x09};
222constexpr uint8_t REG_RESET{0x0C};
223constexpr uint8_t REG_ID{0x0D};
224constexpr uint8_t REG_COEF{0x10};
225constexpr 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:480
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:107
float altitude(const float sea_level_pa=101325.0f) const
Absolute altitude (m) versus the given sea-level pressure (QNH, Pa)
Definition unit_SPA06.cpp:540
bool readOversampling(spa06::Oversampling &pressure_oversampling, spa06::Oversampling &temperature_oversampling)
Read the oversampling.
Definition unit_SPA06.cpp:418
bool writeOversamplingTemperature(const spa06::Oversampling temperature_oversampling)
Write the temperature oversampling.
Definition unit_SPA06.cpp:450
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:330
void setAltitudeReference()
Tare the current pressure as the 0 m reference for relativeAltitude()
Definition unit_SPA06.cpp:550
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:340
float relativeAltitude() const
Altitude (m) relative to the last setAltitudeReference() tare point (0 m at that pressure)
Definition unit_SPA06.cpp:545
float temperature() const
Latest compensated temperature (degC)
Definition unit_SPA06.cpp:525
bool writeRate(const spa06::Rate rate)
Write the measurement rate (pressure and temperature share the rate)
Definition unit_SPA06.cpp:490
bool writeOversamplingPressure(const spa06::Oversampling pressure_oversampling)
Write the pressure oversampling.
Definition unit_SPA06.cpp:429
void setReference()
Deprecated alias for setAltitudeReference() (kept for source compatibility with 1....
Definition unit_SPA06.hpp:117
bool writeOversampling(const spa06::Oversampling pressure_oversampling, const spa06::Oversampling temperature_oversampling)
Write the oversampling.
Definition unit_SPA06.cpp:471
virtual bool begin() override
Begin the unit.
Definition unit_SPA06.cpp:52
bool stopPeriodicMeasurement()
Stop periodic measurement.
Definition unit_SPA06.cpp:335
float pressure() const
Latest compensated pressure (Pa)
Definition unit_SPA06.cpp:510
virtual void update(const bool force=false) override
Update the unit.
Definition unit_SPA06.cpp:132
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:177
constexpr uint32_t DEFAULT_STORED_SIZE
Default ring buffer depth.
Definition unit_SPA06.hpp:212
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