ESPHome 2025.5.0
Loading...
Searching...
No Matches
pcf8574_display.cpp
Go to the documentation of this file.
1#include "pcf8574_display.h"
2#include "esphome/core/log.h"
3#include "esphome/core/hal.h"
4
5namespace esphome {
6namespace lcd_pcf8574 {
7
8static const char *const TAG = "lcd_pcf8574";
9
10static const uint8_t LCD_DISPLAY_BACKLIGHT_ON = 0x08;
11static const uint8_t LCD_DISPLAY_BACKLIGHT_OFF = 0x00;
12
14 ESP_LOGCONFIG(TAG, "Setting up PCF8574 LCD Display...");
15 this->backlight_value_ = LCD_DISPLAY_BACKLIGHT_ON;
16 if (!this->write_bytes(this->backlight_value_, nullptr, 0)) {
17 this->mark_failed();
18 return;
19 }
20
21 LCDDisplay::setup();
22}
24 ESP_LOGCONFIG(TAG, "PCF8574 LCD Display:");
25 ESP_LOGCONFIG(TAG, " Columns: %u, Rows: %u", this->columns_, this->rows_);
26 LOG_I2C_DEVICE(this);
27 LOG_UPDATE_INTERVAL(this);
28 if (this->is_failed()) {
29 ESP_LOGE(TAG, "Communication with LCD Display failed!");
30 }
31}
32void PCF8574LCDDisplay::write_n_bits(uint8_t value, uint8_t n) {
33 if (n == 4) {
34 // Ugly fix: in the super setup() with n == 4 value needs to be shifted left
35 value <<= 4;
36 }
37 uint8_t data = value | this->backlight_value_; // Set backlight state
38 this->write_bytes(data, nullptr, 0);
39 // Pulse ENABLE
40 this->write_bytes(data | 0x04, nullptr, 0);
41 delayMicroseconds(1); // >450ns
42 this->write_bytes(data, nullptr, 0);
43 delayMicroseconds(100); // >37us
44}
45void PCF8574LCDDisplay::send(uint8_t value, bool rs) {
46 this->write_n_bits((value & 0xF0) | rs, 0);
47 this->write_n_bits(((value << 4) & 0xF0) | rs, 0);
48}
50 this->backlight_value_ = LCD_DISPLAY_BACKLIGHT_ON;
51 this->write_bytes(this->backlight_value_, nullptr, 0);
52}
54 this->backlight_value_ = LCD_DISPLAY_BACKLIGHT_OFF;
55 this->write_bytes(this->backlight_value_, nullptr, 0);
56}
57
58} // namespace lcd_pcf8574
59} // namespace esphome
virtual void mark_failed()
Mark this component as failed.
bool is_failed() const
bool write_bytes(uint8_t a_register, const uint8_t *data, uint8_t len, bool stop=true)
Definition i2c.h:252
void send(uint8_t value, bool rs) override
void write_n_bits(uint8_t value, uint8_t n) override
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
void IRAM_ATTR HOT delayMicroseconds(uint32_t us)
Definition core.cpp:30