ESPHome 2026.11.0-dev
Loading...
Searching...
No Matches
uart_component_esp8266.h
Go to the documentation of this file.
1#pragma once
2
3#ifdef USE_ESP8266
4
5#include <HardwareSerial.h>
6#include <vector>
8#include "esphome/core/hal.h"
9#include "esphome/core/log.h"
11#include "uart_component.h"
12
13namespace esphome::uart {
14
16 public:
17 void setup(InternalGPIOPin *tx_pin, InternalGPIOPin *rx_pin, uint32_t baud_rate, uint8_t stop_bits,
18 uint32_t data_bits, UARTParityOptions parity, size_t rx_buffer_size);
19
20 uint8_t read_byte();
21 uint8_t peek_byte();
22
23 void flush();
24
25 void write_byte(uint8_t data);
26
27 size_t available();
28
29 protected:
31 static void gpio_intr(ESP8266SoftwareSerial *arg);
32 static void gpio_intr_edge(ESP8266SoftwareSerial *arg);
33
34 void wait_(uint32_t *wait, const uint32_t &start, uint32_t bit_time);
35 bool read_bit_(uint32_t *wait, const uint32_t &start, uint32_t bit_time);
36 void write_bit_(bool bit, uint32_t *wait, const uint32_t &start, uint32_t bit_time);
37
39 void ESPHOME_ALWAYS_INLINE rx_sync_() {
40 if (this->rx_.pending())
42 }
43
44 // Members ordered largest to smallest to minimize padding
52 uint8_t stop_bits_;
53 uint8_t data_bits_;
54};
55
56class ESP8266UartComponent final : public UARTComponent, public Component {
57 public:
58 void setup() override;
59 void dump_config() override;
60 float get_setup_priority() const override { return setup_priority::BUS; }
61
62 void write_array(const uint8_t *data, size_t len) override;
63
64 bool peek_byte(uint8_t *data) override;
65 bool read_array(uint8_t *data, size_t len) override;
66
67 size_t available() override;
68 size_t available_for_write() override;
69 UARTFlushResult flush() override;
70
72
85 void load_settings(bool dump_config) override;
86 using UARTComponent::load_settings; // also bring in the no-arg overload for convenience
87
88 protected:
89 void check_logger_conflict() override;
90
91 HardwareSerial *hw_serial_{nullptr};
93
94 private:
95 static bool serial0_in_use; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
96 static bool serial0_swapped; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
97};
98
99} // namespace esphome::uart
100#endif // USE_ESP8266
Copy of GPIOPin that is safe to use from ISRs (with no virtual functions)
Definition gpio_pin.h:98
void write_bit_(bool bit, uint32_t *wait, const uint32_t &start, uint32_t bit_time)
static void gpio_intr_edge(ESP8266SoftwareSerial *arg)
bool read_bit_(uint32_t *wait, const uint32_t &start, uint32_t bit_time)
void wait_(uint32_t *wait, const uint32_t &start, uint32_t bit_time)
static void gpio_intr(ESP8266SoftwareSerial *arg)
Above SW_SERIAL_EDGE_MODE_MAX_BAUD; reads the whole byte in the ISR.
void load_settings()
Load the UART settings.
bool read_array(uint8_t *data, size_t len) override
void write_array(const uint8_t *data, size_t len) override
Software serial RX decoder: on_edge() counts bits from the time between edges; finalize() completes a...
void load_settings()
Load the UART settings.
void setup()
constexpr float BUS
For communication buses like i2c/spi.
Definition component.h:39
UARTFlushResult
Result of a flush() call.
const void size_t len
Definition hal.h:68
static void uint32_t