ESPHome 2026.6.0-dev
Loading...
Searching...
No Matches
sm2135.h
Go to the documentation of this file.
1#pragma once
2
3#include <vector>
6#include "esphome/core/hal.h"
7
8namespace esphome::sm2135 {
9
23
24class SM2135 : public Component {
25 public:
26 class Channel;
27
28 void set_data_pin(GPIOPin *data_pin) { this->data_pin_ = data_pin; }
29 void set_clock_pin(GPIOPin *clock_pin) { this->clock_pin_ = clock_pin; }
30
31 void set_rgb_current(SM2135Current rgb_current) {
32 this->rgb_current_ = rgb_current;
33 this->current_mask_ = (this->rgb_current_ << 4) | this->cw_current_;
34 }
35
36 void set_cw_current(SM2135Current cw_current) {
37 this->cw_current_ = cw_current;
38 this->current_mask_ = (this->rgb_current_ << 4) | this->cw_current_;
39 }
40
41 void set_separate_modes(bool separate_modes) { this->separate_modes_ = separate_modes; }
42
43 void setup() override;
44
45 void dump_config() override;
46
47 float get_setup_priority() const override { return setup_priority::HARDWARE; }
48
50 void loop() override;
51
53 public:
54 void set_parent(SM2135 *parent) { parent_ = parent; }
55 void set_channel(uint8_t channel) { channel_ = channel; }
56
57 protected:
58 void write_state(float state) override {
59 auto amount = static_cast<uint8_t>(state * 0xff);
60 this->parent_->set_channel_value_(this->channel_, amount);
61 }
62
64 uint8_t channel_;
65 };
66
67 protected:
68 void set_channel_value_(uint8_t channel, uint8_t value);
69 void sm2135_set_low_(GPIOPin *pin);
70 void sm2135_set_high_(GPIOPin *pin);
71
72 void sm2135_start_();
73 void sm2135_stop_();
74 void write_byte_(uint8_t data);
75 void write_buffer_(uint8_t *buffer, uint8_t size);
76
84 std::vector<uint8_t> pwm_amounts_;
85 bool update_{true};
86};
87
88} // namespace esphome::sm2135
Base class for all output components that can output a variable level, like PWM.
void set_channel(uint8_t channel)
Definition sm2135.h:55
void write_state(float state) override
Definition sm2135.h:58
void set_parent(SM2135 *parent)
Definition sm2135.h:54
void set_cw_current(SM2135Current cw_current)
Definition sm2135.h:36
void write_byte_(uint8_t data)
Definition sm2135.cpp:45
void set_clock_pin(GPIOPin *clock_pin)
Definition sm2135.h:29
void loop() override
Send new values if they were updated.
Definition sm2135.cpp:92
uint8_t update_channel_
Definition sm2135.h:83
SM2135Current cw_current_
Definition sm2135.h:81
std::vector< uint8_t > pwm_amounts_
Definition sm2135.h:84
void set_data_pin(GPIOPin *data_pin)
Definition sm2135.h:28
void set_separate_modes(bool separate_modes)
Definition sm2135.h:41
void sm2135_set_high_(GPIOPin *pin)
Definition sm2135.cpp:146
void set_channel_value_(uint8_t channel, uint8_t value)
Definition sm2135.cpp:133
void write_buffer_(uint8_t *buffer, uint8_t size)
Definition sm2135.cpp:81
SM2135Current rgb_current_
Definition sm2135.h:80
GPIOPin * clock_pin_
Definition sm2135.h:78
void sm2135_set_low_(GPIOPin *pin)
Definition sm2135.cpp:141
void dump_config() override
Definition sm2135.cpp:35
GPIOPin * data_pin_
Definition sm2135.h:77
void setup() override
Definition sm2135.cpp:21
float get_setup_priority() const override
Definition sm2135.h:47
void set_rgb_current(SM2135Current rgb_current)
Definition sm2135.h:31
bool state
Definition fan.h:2
constexpr float HARDWARE
For components that deal with hardware and are very important like GPIO switch.
Definition component.h:41
@ SM2135_CURRENT_60MA
Definition sm2135.h:21
@ SM2135_CURRENT_20MA
Definition sm2135.h:13
@ SM2135_CURRENT_55MA
Definition sm2135.h:20
@ SM2135_CURRENT_15MA
Definition sm2135.h:12
@ SM2135_CURRENT_45MA
Definition sm2135.h:18
@ SM2135_CURRENT_50MA
Definition sm2135.h:19
@ SM2135_CURRENT_35MA
Definition sm2135.h:16
@ SM2135_CURRENT_30MA
Definition sm2135.h:15
@ SM2135_CURRENT_25MA
Definition sm2135.h:14
@ SM2135_CURRENT_40MA
Definition sm2135.h:17
@ SM2135_CURRENT_10MA
Definition sm2135.h:11
uint16_t size
Definition helpers.cpp:25