10#ifndef M5_UNIT_ENV_UNIT_SHT30_HPP
11#define M5_UNIT_ENV_UNIT_SHT30_HPP
13#include <M5UnitComponent.hpp>
14#include <m5_utility/container/circular_buffer.hpp>
39enum class MPS : uint8_t {
58 return value & (1U << 15);
63 return value & (1U << 13);
68 return value & (1U << 11);
73 return value & (1U << 10);
78 return value & (1U << 4);
83 return value & (1U << 1);
88 return value & (1U << 0);
98 std::array<uint8_t, 6>
raw{};
115class UnitSHT30 :
public Component,
public PeriodicMeasurementAdapter<UnitSHT30, sht30::Data> {
116 M5_UNIT_COMPONENT_HPP_BUILDER(
UnitSHT30, 0x44);
134 explicit UnitSHT30(
const uint8_t addr = DEFAULT_ADDRESS)
135 : Component(addr), _data{new
m5::container::CircularBuffer<
sht30::
Data>(1)}
137 auto ccfg = component_config();
138 ccfg.clock = 400 * 1000U;
139 component_config(ccfg);
145 virtual bool begin()
override;
146 virtual void update(
const bool force =
false)
override;
167 return !empty() ? oldest().temperature() : std::numeric_limits<float>::quiet_NaN();
172 return !empty() ? oldest().celsius() : std::numeric_limits<float>::quiet_NaN();
177 return !empty() ? oldest().fahrenheit() : std::numeric_limits<float>::quiet_NaN();
182 return !empty() ? oldest().humidity() : std::numeric_limits<float>::quiet_NaN();
196 return PeriodicMeasurementAdapter<UnitSHT30, sht30::Data>::startPeriodicMeasurement(mps, rep);
205 return PeriodicMeasurementAdapter<UnitSHT30, sht30::Data>::startPeriodicMeasurement();
213 return PeriodicMeasurementAdapter<UnitSHT30, sht30::Data>::stopPeriodicMeasurement();
232 const bool stretch =
false);
316 inline bool start_periodic_measurement()
318 return start_periodic_measurement(_mps, _rep);
320 bool stop_periodic_measurement();
321 bool read_measurement(sht30::Data& d);
323 M5_UNIT_COMPONENT_PERIODIC_MEASUREMENT_ADAPTER_HPP_BUILDER(UnitSHT30, sht30::Data);
326 std::unique_ptr<m5::container::CircularBuffer<sht30::Data>> _data{};
329 sht30::Repeatability _rep{};
336constexpr uint16_t SINGLE_SHOT_ENABLE_STRETCH_HIGH{0x2C06};
337constexpr uint16_t SINGLE_SHOT_ENABLE_STRETCH_MEDIUM{0x2C0D};
338constexpr uint16_t SINGLE_SHOT_ENABLE_STRETCH_LOW{0x2C10};
339constexpr uint16_t SINGLE_SHOT_DISABLE_STRETCH_HIGH{0x2400};
340constexpr uint16_t SINGLE_SHOT_DISABLE_STRETCH_MEDIUM{0x240B};
341constexpr uint16_t SINGLE_SHOT_DISABLE_STRETCH_LOW{0x2416};
343constexpr uint16_t START_PERIODIC_MPS_HALF_HIGH{0x2032};
344constexpr uint16_t START_PERIODIC_MPS_HALF_MEDIUM{0x2024};
345constexpr uint16_t START_PERIODIC_MPS_HALF_LOW{0x202f};
347constexpr uint16_t START_PERIODIC_MPS_1_HIGH{0x2130};
348constexpr uint16_t START_PERIODIC_MPS_1_MEDIUM{0x2126};
349constexpr uint16_t START_PERIODIC_MPS_1_LOW{0x212D};
351constexpr uint16_t START_PERIODIC_MPS_2_HIGH{0x2236};
352constexpr uint16_t START_PERIODIC_MPS_2_MEDIUM{0x2220};
353constexpr uint16_t START_PERIODIC_MPS_2_LOW{0x222B};
355constexpr uint16_t START_PERIODIC_MPS_4_HIGH{0x2334};
356constexpr uint16_t START_PERIODIC_MPS_4_MEDIUM{0x2322};
357constexpr uint16_t START_PERIODIC_MPS_4_LOW{0x2329};
359constexpr uint16_t START_PERIODIC_MPS_10_HIGH{0x2737};
360constexpr uint16_t START_PERIODIC_MPS_10_MEDIUM{0x2721};
361constexpr uint16_t START_PERIODIC_MPS_10_LOW{0x272A};
363constexpr uint16_t STOP_PERIODIC_MEASUREMENT{0x3093};
364constexpr uint16_t ACCELERATED_RESPONSE_TIME{0x2B32};
365constexpr uint16_t READ_MEASUREMENT{0xE000};
367constexpr uint16_t SOFT_RESET{0x30A2};
369constexpr uint16_t START_HEATER{0x306D};
370constexpr uint16_t STOP_HEATER{0x3066};
372constexpr uint16_t READ_STATUS{0xF32D};
373constexpr uint16_t CLEAR_STATUS{0x3041};
375constexpr uint16_t GET_SERIAL_NUMBER_ENABLE_STRETCH{0x3780};
376constexpr uint16_t GET_SERIAL_NUMBER_DISABLE_STRETCH{0x3682};
Temperature and humidity, sensor unit.
Definition unit_SHT30.hpp:115
bool writeModeAccelerateResponseTime()
Write the mode to ART.
Definition unit_SHT30.cpp:227
bool readSerialNumber(uint32_t &serialNumber)
Read the serial number value.
Definition unit_SHT30.cpp:311
bool softReset()
Soft reset.
Definition unit_SHT30.cpp:257
float celsius() const
Oldest measured temperature (Celsius)
Definition unit_SHT30.hpp:170
bool stopHeater()
Stop heater.
Definition unit_SHT30.cpp:306
void config(const config_t &cfg)
Set the configuration.
Definition unit_SHT30.hpp:156
float humidity() const
Oldest measured humidity (RH)
Definition unit_SHT30.hpp:180
bool startPeriodicMeasurement(const sht30::MPS mps, const sht30::Repeatability rep)
Start periodic measurement.
Definition unit_SHT30.hpp:194
float fahrenheit() const
Oldest measured temperature (Fahrenheit)
Definition unit_SHT30.hpp:175
bool readStatus(sht30::Status &s)
Read status.
Definition unit_SHT30.cpp:241
bool stopPeriodicMeasurement()
Stop periodic measurement.
Definition unit_SHT30.hpp:211
bool measureSingleshot(sht30::Data &d, const sht30::Repeatability rep=sht30::Repeatability::High, const bool stretch=false)
Measurement single shot.
Definition unit_SHT30.cpp:150
bool clearStatus()
Clear status.
Definition unit_SHT30.cpp:252
bool startHeater()
Start heater.
Definition unit_SHT30.cpp:301
bool startPeriodicMeasurement()
Start periodic measurement using previous settings.
Definition unit_SHT30.hpp:203
config_t config() const
Gets the configuration.
Definition unit_SHT30.hpp:151
float temperature() const
Oldest measured temperature (Celsius)
Definition unit_SHT30.hpp:165
bool generalReset()
General reset.
Definition unit_SHT30.cpp:274
Top level namespace of M5Stack.
Settings for begin.
Definition unit_SHT30.hpp:123
bool start_heater
start heater on begin?
Definition unit_SHT30.hpp:131
sht30::Repeatability repeatability
Repeatability accuracy level if start on begin.
Definition unit_SHT30.hpp:129
bool start_periodic
Start periodic measurement on begin?
Definition unit_SHT30.hpp:125
sht30::MPS mps
Measuring frequency if start on begin.
Definition unit_SHT30.hpp:127
Light sensor measurement data.
Definition unit_HatYun.hpp:32
Measurement data group.
Definition unit_SHT30.hpp:97
float humidity() const
humidity (RH)
Definition unit_SHT30.cpp:83
std::array< uint8_t, 6 > raw
Definition unit_SHT30.hpp:98
float temperature() const
temperature (Celsius)
Definition unit_SHT30.hpp:100
float celsius() const
temperature (Celsius)
Definition unit_SHT30.cpp:73
float fahrenheit() const
temperature (Fahrenheit)
Definition unit_SHT30.cpp:78
Accessor for Status.
Definition unit_SHT30.hpp:54
bool trackingAlertRH() const
RH tracking alert (*)
Definition unit_SHT30.hpp:66
bool trackingAlert() const
Tracking alert (*)
Definition unit_SHT30.hpp:71
bool alertPending() const
Alert pending status (*)
Definition unit_SHT30.hpp:56
bool heater() const
Heater status.
Definition unit_SHT30.hpp:61
bool command() const
Command status.
Definition unit_SHT30.hpp:81
bool reset() const
System reset detected (*)
Definition unit_SHT30.hpp:76
bool checksum() const
Write data checksum status.
Definition unit_SHT30.hpp:86
MPS
Measuring frequency.
Definition unit_SHT30.hpp:39
@ One
1 measurement per second
@ Four
4 measurement per second
@ Ten
10 measurement per second
@ Two
2 measurement per second
@ Half
0.5 measurement per second
Repeatability
Repeatability accuracy level.
Definition unit_SHT30.hpp:29
@ High
High repeatability.
@ Medium
Medium repeatability.