M5Unit-ENV 1.4.0 git rev:c1b5980
Loading...
Searching...
No Matches
unit_HatYun.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_HATYUN_HPP
11#define M5_UNIT_ENV_UNIT_HATYUN_HPP
12
13#include <M5UnitComponent.hpp>
14#include <m5_utility/container/circular_buffer.hpp>
15#include "unit_SHT20.hpp"
16#include "unit_BMP280.hpp"
17
18namespace m5 {
19namespace unit {
20
25namespace hatyun {
26constexpr uint8_t NUM_LEDS{14};
27
32struct Data {
33 uint16_t light{};
34};
35
36} // namespace hatyun
37
45class HatYun : public Component, public PeriodicMeasurementAdapter<HatYun, hatyun::Data> {
46 M5_UNIT_COMPONENT_HPP_BUILDER(HatYun, 0x38);
47
48public:
53 struct config_t {
55 bool start_periodic{true};
57 uint32_t periodic_interval{1000};
58 };
59
62
63 explicit HatYun(const uint8_t addr = DEFAULT_ADDRESS);
64 virtual ~HatYun()
65 {
66 }
67
68 virtual bool begin() override;
69 virtual void update(const bool force = false) override;
70
73
74 inline config_t config() const
75 {
76 return _cfg;
77 }
79 inline void config(const config_t& cfg)
80 {
81 _cfg = cfg;
82 }
84
88 inline uint16_t light() const
89 {
90 return !empty() ? oldest().light : 0;
91 }
93
96
101 inline bool startPeriodicMeasurement(const uint32_t interval = 1000)
102 {
103 return PeriodicMeasurementAdapter<HatYun, hatyun::Data>::startPeriodicMeasurement(interval);
104 }
110 {
111 return PeriodicMeasurementAdapter<HatYun, hatyun::Data>::stopPeriodicMeasurement();
112 }
114
119
127 bool writeLED(const uint8_t num, const uint8_t r, const uint8_t g, const uint8_t b);
135 bool writeAllLED(const uint8_t r, const uint8_t g, const uint8_t b);
142 bool writeRainbow(const uint8_t offset = 0, const uint8_t brightness = 255);
144
147
152 bool readLight(uint16_t& value);
154
155protected:
156 bool start_periodic_measurement(const uint32_t interval);
157 bool stop_periodic_measurement();
158 bool read_measurement(hatyun::Data& d);
159
160 M5_UNIT_COMPONENT_PERIODIC_MEASUREMENT_ADAPTER_HPP_BUILDER(HatYun, hatyun::Data);
161
162 virtual std::shared_ptr<Adapter> ensure_adapter(const uint8_t ch);
163
164protected:
165 std::unique_ptr<m5::container::CircularBuffer<hatyun::Data>> _data{};
166 config_t _cfg{};
167
168private:
169 bool _valid{}; // Did the constructor correctly add the child unit?
170 Component* _children[2]{&sht20, &bmp280};
171};
172
174namespace hatyun {
175namespace command {
176constexpr uint8_t LIGHT_REG{0x00};
177constexpr uint8_t LED_REG{0x01};
178} // namespace command
179} // namespace hatyun
181
182} // namespace unit
183} // namespace m5
184#endif
Hat Yun is an environmental sensor hat that integrates SHT20, BMP280, and STM32 LED/Light controller.
Definition unit_HatYun.hpp:45
void config(const config_t &cfg)
Set the configuration.
Definition unit_HatYun.hpp:79
bool readLight(uint16_t &value)
Read light sensor value.
Definition unit_HatYun.cpp:171
bool writeAllLED(const uint8_t r, const uint8_t g, const uint8_t b)
Write all LEDs to the same color.
Definition unit_HatYun.cpp:111
bool writeLED(const uint8_t num, const uint8_t r, const uint8_t g, const uint8_t b)
Write a single LED color.
Definition unit_HatYun.cpp:102
UnitBMP280 bmp280
BMP280 instance (pressure)
Definition unit_HatYun.hpp:61
UnitSHT20 sht20
SHT20 instance (temperature/humidity)
Definition unit_HatYun.hpp:60
bool stopPeriodicMeasurement()
Stop periodic light sensor polling.
Definition unit_HatYun.hpp:109
config_t config() const
Gets the configuration.
Definition unit_HatYun.hpp:74
bool startPeriodicMeasurement(const uint32_t interval=1000)
Start periodic light sensor polling.
Definition unit_HatYun.hpp:101
uint16_t light() const
Oldest light sensor value.
Definition unit_HatYun.hpp:88
bool writeRainbow(const uint8_t offset=0, const uint8_t brightness=255)
Write rainbow pattern across all LEDs.
Definition unit_HatYun.cpp:122
Pressure and temperature sensor unit.
Definition unit_BMP280.hpp:150
Temperature and humidity sensor unit (SHT20)
Definition unit_SHT20.hpp:60
For BMP280.
For HatYun.
Top level namespace of M5Stack.
Unit-related namespace.
Settings for begin.
Definition unit_HatYun.hpp:53
bool start_periodic
Start periodic measurement on begin?
Definition unit_HatYun.hpp:55
uint32_t periodic_interval
Periodic measurement interval (ms)
Definition unit_HatYun.hpp:57
Light sensor measurement data.
Definition unit_HatYun.hpp:32
uint16_t light
Raw light sensor value.
Definition unit_HatYun.hpp:33
BMP280 Unit for M5UnitUnified.
constexpr uint8_t NUM_LEDS
Number of RGB LEDs on Hat Yun.
Definition unit_HatYun.hpp:26
SHT20 Unit for M5UnitUnified.