10#ifndef M5_UNIT_ENV_UNIT_SHT40_HPP
11#define M5_UNIT_ENV_UNIT_SHT40_HPP
13#include <M5UnitComponent.hpp>
14#include <m5_utility/container/circular_buffer.hpp>
74 std::array<uint8_t, 6>
raw{};
93class UnitSHT40 :
public Component,
public PeriodicMeasurementAdapter<UnitSHT40, sht40::Data> {
94 M5_UNIT_COMPONENT_HPP_BUILDER(
UnitSHT40, 0x44);
118 explicit UnitSHT40(
const uint8_t addr = DEFAULT_ADDRESS)
119 : Component(addr), _data{new
m5::container::CircularBuffer<
sht40::
Data>(1)}
121 auto ccfg = component_config();
122 ccfg.clock = 400 * 1000U;
123 component_config(ccfg);
129 virtual bool begin()
override;
130 virtual void update(
const bool force =
false)
override;
151 return !empty() ? oldest().temperature() : std::numeric_limits<float>::quiet_NaN();
156 return !empty() ? oldest().celsius() : std::numeric_limits<float>::quiet_NaN();
161 return !empty() ? oldest().fahrenheit() : std::numeric_limits<float>::quiet_NaN();
166 return !empty() ? oldest().humidity() : std::numeric_limits<float>::quiet_NaN();
185 const float duty = 0.05f)
187 return PeriodicMeasurementAdapter<UnitSHT40, sht40::Data>::startPeriodicMeasurement(precision, heater, duty);
199 const float duty = 0.05f)
201 return PeriodicMeasurementAdapter<UnitSHT40, sht40::Data>::startPeriodicMeasurement(
219 return PeriodicMeasurementAdapter<UnitSHT40, sht40::Data>::stopPeriodicMeasurement();
296 bool stop_periodic_measurement();
304 std::unique_ptr<m5::container::CircularBuffer<sht40::Data>> _data{};
305 uint8_t _cmd{}, _measureCmd{};
306 types::elapsed_time_t _latest_heater{}, _interval_heater{};
307 uint32_t _duration_measure{}, _duration_heater{};
311 sht40::Precision _precision{sht40::Precision::High};
312 sht40::Heater _heater{sht40::Heater::None};
319constexpr uint8_t MEASURE_HIGH_HEATER_1S{0x39};
320constexpr uint8_t MEASURE_HIGH_HEATER_100MS{0x32};
321constexpr uint8_t MEASURE_HIGH{0xFD};
323constexpr uint8_t MEASURE_MEDIUM_HEATER_1S{0x2F};
324constexpr uint8_t MEASURE_MEDIUM_HEATER_100MS{0x24};
325constexpr uint8_t MEASURE_MEDIUM{0xF6};
327constexpr uint8_t MEASURE_LOW_HEATER_1S{0x1E};
328constexpr uint8_t MEASURE_LOW_HEATER_100MS{0x15};
329constexpr uint8_t MEASURE_LOW{0xE0};
331constexpr uint8_t GET_SERIAL_NUMBER{0x89};
332constexpr uint8_t SOFT_RESET{0x94};
Temperature and humidity, sensor unit.
Definition unit_SHT40.hpp:93
bool softReset()
Soft reset.
Definition unit_SHT40.cpp:240
bool readSerialNumber(uint32_t &serialNumber)
Read the serial number value.
Definition unit_SHT40.cpp:273
float humidity() const
Oldest measured humidity (RH)
Definition unit_SHT40.hpp:164
config_t config() const
Gets the configuration.
Definition unit_SHT40.hpp:135
bool generalReset()
General reset.
Definition unit_SHT40.cpp:261
void config(const config_t &cfg)
Set the configuration.
Definition unit_SHT40.hpp:140
bool startPeriodicMeasurement(const sht40::HeaterPower power, const sht40::HeaterDuration duration, const float duty=0.05f)
Start periodic measurement with heater.
Definition unit_SHT40.hpp:198
bool measureSingleshot(sht40::Data &d, const sht40::Precision precision=sht40::Precision::High, const sht40::Heater heater=sht40::Heater::None)
Measurement single shot.
Definition unit_SHT40.cpp:202
float fahrenheit() const
Oldest measured temperature (Fahrenheit)
Definition unit_SHT40.hpp:159
bool startPeriodicMeasurement(const sht40::Precision precision, const sht40::Heater heater, const float duty=0.05f)
Start periodic measurement.
Definition unit_SHT40.hpp:184
bool stopPeriodicMeasurement()
Stop periodic measurement.
Definition unit_SHT40.hpp:217
bool startPeriodicMeasurement()
Start periodic measurement using previous settings.
Definition unit_SHT40.hpp:209
float celsius() const
Oldest measured temperature (Celsius)
Definition unit_SHT40.hpp:154
float temperature() const
Oldest measured temperature (Celsius)
Definition unit_SHT40.hpp:149
Top level namespace of M5Stack.
Settings for begin.
Definition unit_SHT40.hpp:101
float heater_duty
Heater duty cycle if start on begin [~ 0.05f].
Definition unit_SHT40.hpp:109
sht40::Precision precision
Precision level if start on begin.
Definition unit_SHT40.hpp:105
bool start_periodic
Start periodic measurement on begin?
Definition unit_SHT40.hpp:103
bool use_heater
Enable heater in periodic mode (takes precedence over heater field)
Definition unit_SHT40.hpp:111
sht40::HeaterDuration heater_duration
Heater duration if start on begin (used when use_heater is true)
Definition unit_SHT40.hpp:115
sht40::Heater heater
Definition unit_SHT40.hpp:107
sht40::HeaterPower heater_power
Heater power if start on begin (used when use_heater is true)
Definition unit_SHT40.hpp:113
Light sensor measurement data.
Definition unit_HatYun.hpp:32
Measurement data group.
Definition unit_SHT40.hpp:73
float celsius() const
temperature (Celsius)
Definition unit_SHT40.cpp:61
std::array< uint8_t, 6 > raw
RAW data.
Definition unit_SHT40.hpp:74
float fahrenheit() const
temperature (Fahrenheit)
Definition unit_SHT40.cpp:66
bool heater
Measured data after heater is activated if true.
Definition unit_SHT40.hpp:75
float humidity() const
humidity (RH)
Definition unit_SHT40.cpp:72
float temperature() const
temperature (Celsius)
Definition unit_SHT40.hpp:78
HeaterDuration
Heater activation duration.
Definition unit_SHT40.hpp:64
HeaterPower
Heater power level.
Definition unit_SHT40.hpp:54
Precision
precision level
Definition unit_SHT40.hpp:30
Heater
Heater behavior.
Definition unit_SHT40.hpp:43
@ Short
Activate heater for 0.1s.
@ Long
Activate heater for 1s.