M5Unit-ENV 1.4.0 git rev:c1b5980
Loading...
Searching...
No Matches
unit_SHT20.hpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
3 *
4 * SPDX-License-Identifier: MIT
5 */
10#ifndef M5_UNIT_ENV_UNIT_SHT20_HPP
11#define M5_UNIT_ENV_UNIT_SHT20_HPP
12
13#include <M5UnitComponent.hpp>
14#include <m5_utility/container/circular_buffer.hpp>
15#include <limits> // NaN
16
17namespace m5 {
18namespace unit {
19
24namespace sht20 {
25
30enum class Resolution : uint8_t {
31 RH12_T14 = 0x00,
32 RH8_T12 = 0x01,
33 RH10_T13 = 0x80,
34 RH11_T11 = 0x81,
35};
36
41struct Data {
42 std::array<uint8_t, 6> raw{};
44 inline float temperature() const
45 {
46 return celsius();
47 }
48 float celsius() const;
49 float fahrenheit() const;
50 float humidity() const;
51};
52
53} // namespace sht20
54
60class UnitSHT20 : public Component, public PeriodicMeasurementAdapter<UnitSHT20, sht20::Data> {
61 M5_UNIT_COMPONENT_HPP_BUILDER(UnitSHT20, 0x40);
62
63public:
68 struct config_t {
70 bool start_periodic{true};
72 sht20::Resolution resolution{sht20::Resolution::RH12_T14};
74 bool start_heater{false};
76 uint32_t periodic_interval{1000};
77 };
78
79 explicit UnitSHT20(const uint8_t addr = DEFAULT_ADDRESS)
80 : Component(addr), _data{new m5::container::CircularBuffer<sht20::Data>(1)}
81 {
82 auto ccfg = component_config();
83 ccfg.clock = 400 * 1000U;
84 component_config(ccfg);
85 }
86 virtual ~UnitSHT20()
87 {
88 }
89
90 virtual bool begin() override;
91 virtual void update(const bool force = false) override;
92
95
96 inline config_t config() const
97 {
98 return _cfg;
99 }
101 inline void config(const config_t& cfg)
102 {
103 _cfg = cfg;
104 }
106
110 inline float temperature() const
111 {
112 return !empty() ? oldest().temperature() : std::numeric_limits<float>::quiet_NaN();
113 }
115 inline float celsius() const
116 {
117 return !empty() ? oldest().celsius() : std::numeric_limits<float>::quiet_NaN();
118 }
120 inline float fahrenheit() const
121 {
122 return !empty() ? oldest().fahrenheit() : std::numeric_limits<float>::quiet_NaN();
123 }
125 inline float humidity() const
126 {
127 return !empty() ? oldest().humidity() : std::numeric_limits<float>::quiet_NaN();
128 }
130
133
138 {
139 return PeriodicMeasurementAdapter<UnitSHT20, sht20::Data>::startPeriodicMeasurement();
140 }
146 {
147 return PeriodicMeasurementAdapter<UnitSHT20, sht20::Data>::stopPeriodicMeasurement();
148 }
150
153
161
164
175 bool writeResolution(const sht20::Resolution res);
177
180
184 bool startHeater();
189 bool stopHeater();
191
194
198 bool softReset();
200
201protected:
202 bool start_periodic_measurement();
203 bool stop_periodic_measurement();
204 bool read_measurement(sht20::Data& d);
205
206 M5_UNIT_COMPONENT_PERIODIC_MEASUREMENT_ADAPTER_HPP_BUILDER(UnitSHT20, sht20::Data);
207
208protected:
209 std::unique_ptr<m5::container::CircularBuffer<sht20::Data>> _data{};
210 config_t _cfg{};
211
212private:
213 bool read_user_register(uint8_t& reg);
214 bool write_user_register(const uint8_t reg);
215 bool trigger_measurement(const uint8_t cmd, uint16_t& raw);
216};
217
219namespace sht20 {
220namespace command {
221constexpr uint8_t TRIGGER_TEMP_HOLD{0xE3};
222constexpr uint8_t TRIGGER_HUMD_HOLD{0xE5};
223constexpr uint8_t TRIGGER_TEMP_NOHOLD{0xF3};
224constexpr uint8_t TRIGGER_HUMD_NOHOLD{0xF5};
225constexpr uint8_t WRITE_USER_REG{0xE6};
226constexpr uint8_t READ_USER_REG{0xE7};
227constexpr uint8_t SOFT_RESET{0xFE};
228
229constexpr uint8_t REG_RESOLUTION_MASK{0x81};
230constexpr uint8_t REG_HEATER_BIT{0x04};
231} // namespace command
232} // namespace sht20
234
235} // namespace unit
236} // namespace m5
237#endif
Temperature and humidity sensor unit (SHT20)
Definition unit_SHT20.hpp:60
bool startPeriodicMeasurement()
Start periodic measurement.
Definition unit_SHT20.hpp:137
bool writeResolution(const sht20::Resolution res)
Write measurement resolution.
Definition unit_SHT20.cpp:237
float celsius() const
Oldest measured temperature (Celsius)
Definition unit_SHT20.hpp:115
bool measureSingleshot(sht20::Data &d)
Measurement single shot.
Definition unit_SHT20.cpp:143
float fahrenheit() const
Oldest measured temperature (Fahrenheit)
Definition unit_SHT20.hpp:120
float temperature() const
Oldest measured temperature (Celsius)
Definition unit_SHT20.hpp:110
float humidity() const
Oldest measured humidity (RH)
Definition unit_SHT20.hpp:125
bool startHeater()
Enable on-chip heater.
Definition unit_SHT20.cpp:247
bool softReset()
Soft reset.
Definition unit_SHT20.cpp:267
void config(const config_t &cfg)
Set the configuration.
Definition unit_SHT20.hpp:101
bool readResolution(sht20::Resolution &res)
Read measurement resolution.
Definition unit_SHT20.cpp:227
bool stopPeriodicMeasurement()
Stop periodic measurement.
Definition unit_SHT20.hpp:145
config_t config() const
Gets the configuration.
Definition unit_SHT20.hpp:96
bool stopHeater()
Disable on-chip heater.
Definition unit_SHT20.cpp:257
Top level namespace of M5Stack.
For SHT20.
Unit-related namespace.
Settings for begin.
Definition unit_SHT20.hpp:68
sht20::Resolution resolution
Measurement resolution.
Definition unit_SHT20.hpp:72
uint32_t periodic_interval
Periodic measurement interval (ms). Clamped to resolution minimum.
Definition unit_SHT20.hpp:76
bool start_heater
Start heater on begin?
Definition unit_SHT20.hpp:74
bool start_periodic
Start periodic measurement on begin?
Definition unit_SHT20.hpp:70
Light sensor measurement data.
Definition unit_HatYun.hpp:32
Measurement data group.
Definition unit_SHT20.hpp:41
float fahrenheit() const
temperature (Fahrenheit)
Definition unit_SHT20.cpp:69
float temperature() const
temperature (Celsius)
Definition unit_SHT20.hpp:44
float celsius() const
temperature (Celsius)
Definition unit_SHT20.cpp:61
float humidity() const
humidity (RH)
Definition unit_SHT20.cpp:74
std::array< uint8_t, 6 > raw
Definition unit_SHT20.hpp:42
Resolution
Measurement resolution (humidity bits / temperature bits)
Definition unit_SHT20.hpp:30
@ RH11_T11
RH 11 bit, T 11 bit.
@ RH12_T14
RH 12 bit, T 14 bit (default)
@ RH10_T13
RH 10 bit, T 13 bit.
@ RH8_T12
RH 8 bit, T 12 bit.