ESPHome 2026.6.0-dev
Loading...
Searching...
No Matches
sn74hc595.h
Go to the documentation of this file.
1#pragma once
2
5#include "esphome/core/hal.h"
7
8#ifdef USE_SPI
10#endif
11
12#include <vector>
13
14namespace esphome::sn74hc595 {
15
17 public:
18 SN74HC595Component() = default;
19
20 void setup() override = 0;
21 float get_setup_priority() const override;
22 void dump_config() override;
23
24 void set_latch_pin(GPIOPin *pin) { this->latch_pin_ = pin; }
25 void set_oe_pin(GPIOPin *pin) {
26 this->oe_pin_ = pin;
27 this->have_oe_pin_ = true;
28 }
29 void set_sr_count(uint8_t count) {
30 this->sr_count_ = count;
31 this->output_bytes_.resize(count);
32 }
33
34 protected:
35 friend class SN74HC595GPIOPin;
36 void digital_write_(uint16_t pin, bool value);
37 virtual void write_gpio();
38
39 void pre_setup_();
40 void post_setup_();
41
44 uint8_t sr_count_;
45 bool have_oe_pin_{false};
46 std::vector<uint8_t> output_bytes_;
47};
48
50class SN74HC595GPIOPin : public GPIOPin, public Parented<SN74HC595Component> {
51 public:
52 void setup() override {}
53 void pin_mode(gpio::Flags flags) override {}
54 bool digital_read() override { return false; }
55 void digital_write(bool value) override;
56 size_t dump_summary(char *buffer, size_t len) const override;
57
58 void set_pin(uint16_t pin) { pin_ = pin; }
59 void set_inverted(bool inverted) { inverted_ = inverted; }
60
62 gpio::Flags get_flags() const override { return gpio::Flags::FLAG_OUTPUT; }
63
64 protected:
65 uint16_t pin_;
67};
68
70 public:
71 void setup() override;
72 void set_data_pin(GPIOPin *pin) { data_pin_ = pin; }
73 void set_clock_pin(GPIOPin *pin) { clock_pin_ = pin; }
74
75 protected:
76 void write_gpio() override;
77
80};
81
82#ifdef USE_SPI
84 public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW,
85 spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_4MHZ> {
86 public:
87 void setup() override;
88
89 protected:
90 void write_gpio() override;
91};
92
93#endif
94
95} // namespace esphome::sn74hc595
Helper class to easily give an object a parent of type T.
Definition helpers.h:1861
void digital_write_(uint16_t pin, bool value)
Definition sn74hc595.cpp:42
float get_setup_priority() const override
Definition sn74hc595.cpp:90
std::vector< uint8_t > output_bytes_
Definition sn74hc595.h:46
Helper class to expose a SC74HC595 pin as an internal output GPIO pin.
Definition sn74hc595.h:50
void digital_write(bool value) override
Definition sn74hc595.cpp:92
gpio::Flags get_flags() const override
Always returns gpio::Flags::FLAG_OUTPUT.
Definition sn74hc595.h:62
size_t dump_summary(char *buffer, size_t len) const override
Definition sn74hc595.cpp:95
void pin_mode(gpio::Flags flags) override
Definition sn74hc595.h:53
void set_inverted(bool inverted)
Definition sn74hc595.h:59
The SPIDevice is what components using the SPI will create.
Definition spi.h:429
uint16_t flags
@ FLAG_OUTPUT
Definition gpio.h:28
const void size_t len
Definition hal.h:64