mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	Add support for Waveshare 5.65" ACeP 7-Color display (#8557)
This commit is contained in:
		| @@ -70,6 +70,9 @@ WaveshareEPaper4P2InBV2 = waveshare_epaper_ns.class_( | |||||||
| WaveshareEPaper4P2InBV2BWR = waveshare_epaper_ns.class_( | WaveshareEPaper4P2InBV2BWR = waveshare_epaper_ns.class_( | ||||||
|     "WaveshareEPaper4P2InBV2BWR", WaveshareEPaperBWR |     "WaveshareEPaper4P2InBV2BWR", WaveshareEPaperBWR | ||||||
| ) | ) | ||||||
|  | WaveshareEPaper5P65InF = waveshare_epaper_ns.class_( | ||||||
|  |     "WaveshareEPaper5P65InF", WaveshareEPaper7C | ||||||
|  | ) | ||||||
| WaveshareEPaper5P8In = waveshare_epaper_ns.class_( | WaveshareEPaper5P8In = waveshare_epaper_ns.class_( | ||||||
|     "WaveshareEPaper5P8In", WaveshareEPaper |     "WaveshareEPaper5P8In", WaveshareEPaper | ||||||
| ) | ) | ||||||
| @@ -150,6 +153,7 @@ MODELS = { | |||||||
|     "4.20in": ("b", WaveshareEPaper4P2In), |     "4.20in": ("b", WaveshareEPaper4P2In), | ||||||
|     "4.20in-bv2": ("b", WaveshareEPaper4P2InBV2), |     "4.20in-bv2": ("b", WaveshareEPaper4P2InBV2), | ||||||
|     "4.20in-bv2-bwr": ("b", WaveshareEPaper4P2InBV2BWR), |     "4.20in-bv2-bwr": ("b", WaveshareEPaper4P2InBV2BWR), | ||||||
|  |     "5.65in-f": ("b", WaveshareEPaper5P65InF), | ||||||
|     "5.83in": ("b", WaveshareEPaper5P8In), |     "5.83in": ("b", WaveshareEPaper5P8In), | ||||||
|     "5.83inv2": ("b", WaveshareEPaper5P8InV2), |     "5.83inv2": ("b", WaveshareEPaper5P8InV2), | ||||||
|     "7.30in-f": ("b", WaveshareEPaper7P3InF), |     "7.30in-f": ("b", WaveshareEPaper7P3InF), | ||||||
|   | |||||||
| @@ -258,6 +258,47 @@ void WaveshareEPaper7C::fill(Color color) { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | void WaveshareEPaper7C::send_buffers_() { | ||||||
|  |   if (this->buffers_[0] == nullptr) { | ||||||
|  |     ESP_LOGE(TAG, "Buffer unavailable!"); | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   uint32_t small_buffer_length = this->get_buffer_length_() / NUM_BUFFERS; | ||||||
|  |   uint8_t byte_to_send; | ||||||
|  |   for (auto &buffer : this->buffers_) { | ||||||
|  |     for (uint32_t buffer_pos = 0; buffer_pos < small_buffer_length; buffer_pos += 3) { | ||||||
|  |       std::bitset<24> triplet = | ||||||
|  |           buffer[buffer_pos + 0] << 16 | buffer[buffer_pos + 1] << 8 | buffer[buffer_pos + 2] << 0; | ||||||
|  |       // 8 bitset<3> are stored in 3 bytes | ||||||
|  |       // |aaabbbaa|abbbaaab|bbaaabbb| | ||||||
|  |       // | byte 1 | byte 2 | byte 3 | | ||||||
|  |       byte_to_send = ((triplet >> 17).to_ulong() & 0b01110000) | ((triplet >> 18).to_ulong() & 0b00000111); | ||||||
|  |       this->data(byte_to_send); | ||||||
|  |  | ||||||
|  |       byte_to_send = ((triplet >> 11).to_ulong() & 0b01110000) | ((triplet >> 12).to_ulong() & 0b00000111); | ||||||
|  |       this->data(byte_to_send); | ||||||
|  |  | ||||||
|  |       byte_to_send = ((triplet >> 5).to_ulong() & 0b01110000) | ((triplet >> 6).to_ulong() & 0b00000111); | ||||||
|  |       this->data(byte_to_send); | ||||||
|  |  | ||||||
|  |       byte_to_send = ((triplet << 1).to_ulong() & 0b01110000) | ((triplet << 0).to_ulong() & 0b00000111); | ||||||
|  |       this->data(byte_to_send); | ||||||
|  |     } | ||||||
|  |     App.feed_wdt(); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | void WaveshareEPaper7C::reset_() { | ||||||
|  |   if (this->reset_pin_ != nullptr) { | ||||||
|  |     this->reset_pin_->digital_write(true); | ||||||
|  |     delay(20); | ||||||
|  |     this->reset_pin_->digital_write(false); | ||||||
|  |     delay(1); | ||||||
|  |     this->reset_pin_->digital_write(true); | ||||||
|  |     delay(20); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
| void HOT WaveshareEPaper::draw_absolute_pixel_internal(int x, int y, Color color) { | void HOT WaveshareEPaper::draw_absolute_pixel_internal(int x, int y, Color color) { | ||||||
|   if (x >= this->get_width_internal() || y >= this->get_height_internal() || x < 0 || y < 0) |   if (x >= this->get_width_internal() || y >= this->get_height_internal() || x < 0 || y < 0) | ||||||
|     return; |     return; | ||||||
| @@ -3307,6 +3348,175 @@ void WaveshareEPaper7P5In::dump_config() { | |||||||
|   LOG_PIN("  Busy Pin: ", this->busy_pin_); |   LOG_PIN("  Busy Pin: ", this->busy_pin_); | ||||||
|   LOG_UPDATE_INTERVAL(this); |   LOG_UPDATE_INTERVAL(this); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Waveshare 5.65F ======================================================== | ||||||
|  |  | ||||||
|  | namespace cmddata_5P65InF { | ||||||
|  | // WaveshareEPaper5P65InF commands | ||||||
|  | // https://www.waveshare.com/wiki/5.65inch_e-Paper_Module_(F) | ||||||
|  |  | ||||||
|  | // R00H (PSR): Panel setting Register | ||||||
|  | // UD(1): scan up | ||||||
|  | // SHL(1) shift right | ||||||
|  | // SHD_N(1) DC-DC on | ||||||
|  | // RST_N(1) no reset | ||||||
|  | static const uint8_t R00_CMD_PSR[] = {0x00, 0xEF, 0x08}; | ||||||
|  |  | ||||||
|  | // R01H (PWR): Power setting Register | ||||||
|  | // internal DC-DC power generation | ||||||
|  | static const uint8_t R01_CMD_PWR[] = {0x01, 0x07, 0x00, 0x00, 0x00}; | ||||||
|  |  | ||||||
|  | // R02H (POF): Power OFF Command | ||||||
|  | static const uint8_t R02_CMD_POF[] = {0x02}; | ||||||
|  |  | ||||||
|  | // R03H (PFS): Power off sequence setting Register | ||||||
|  | // T_VDS_OFF (00) = 1 frame | ||||||
|  | static const uint8_t R03_CMD_PFS[] = {0x03, 0x00}; | ||||||
|  |  | ||||||
|  | // R04H (PON): Power ON Command | ||||||
|  | static const uint8_t R04_CMD_PON[] = {0x04}; | ||||||
|  |  | ||||||
|  | // R06h (BTST): Booster Soft Start | ||||||
|  | static const uint8_t R06_CMD_BTST[] = {0x06, 0xC7, 0xC7, 0x1D}; | ||||||
|  |  | ||||||
|  | // R07H (DSLP): Deep sleep# | ||||||
|  | // Note Documentation @  Waveshare shows cmd code as 0x10 in table, but | ||||||
|  | // 0x10 is DTM1. | ||||||
|  | static const uint8_t R07_CMD_DSLP[] = {0x07, 0xA5}; | ||||||
|  |  | ||||||
|  | // R10H (DTM1): Data Start Transmission 1 | ||||||
|  |  | ||||||
|  | static const uint8_t R10_CMD_DTM1[] = {0x10}; | ||||||
|  |  | ||||||
|  | // R11H (DSP): Data Stop | ||||||
|  | static const uint8_t R11_CMD_DSP[] = {0x11}; | ||||||
|  |  | ||||||
|  | // R12H (DRF): Display Refresh | ||||||
|  | static const uint8_t R12_CMD_DRF[] = {0x12}; | ||||||
|  |  | ||||||
|  | // R13H (IPC): Image Process Command | ||||||
|  | static const uint8_t R13_CMD_IPC[] = {0x13, 0x00}; | ||||||
|  |  | ||||||
|  | // R30H (PLL): PLL Control | ||||||
|  | // 0x3C = 50Hz | ||||||
|  | static const uint8_t R30_CMD_PLL[] = {0x30, 0x3C}; | ||||||
|  |  | ||||||
|  | // R41H (TSE): Temperature Sensor Enable | ||||||
|  | // TSE(0) enable, TO(0000) +0 degree offset | ||||||
|  | static const uint8_t R41_CMD_TSE[] = {0x41, 0x00}; | ||||||
|  |  | ||||||
|  | // R50H (CDI) VCOM and Data interval setting | ||||||
|  | // CDI(0111) 10 | ||||||
|  | // DDX(1), VBD(001) Border output "White" | ||||||
|  | static const uint8_t R50_CMD_CDI[] = {0x50, 0x37}; | ||||||
|  |  | ||||||
|  | // R60H (TCON) Gate and Source non overlap period command | ||||||
|  | // S2G(10) 12 units | ||||||
|  | // G2S(10) 12 units | ||||||
|  | static const uint8_t R60_CMD_TCON[] = {0x60, 0x22}; | ||||||
|  |  | ||||||
|  | // R61H (TRES) Resolution Setting | ||||||
|  | // 0x258 = 600 | ||||||
|  | // 0x1C0 = 448 | ||||||
|  | static const uint8_t R61_CMD_TRES[] = {0x61, 0x02, 0x58, 0x01, 0xC0}; | ||||||
|  |  | ||||||
|  | // RE3H (PWS) Power Savings | ||||||
|  | static const uint8_t RE3_CMD_PWS[] = {0xE3, 0xAA}; | ||||||
|  | }  // namespace cmddata_5P65InF | ||||||
|  |  | ||||||
|  | void WaveshareEPaper5P65InF::initialize() { | ||||||
|  |   if (this->buffers_[0] == nullptr) { | ||||||
|  |     ESP_LOGE(TAG, "Buffer unavailable!"); | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   this->reset_(); | ||||||
|  |   delay(20); | ||||||
|  |   this->wait_until_(IDLE); | ||||||
|  |  | ||||||
|  |   using namespace cmddata_5P65InF; | ||||||
|  |  | ||||||
|  |   this->cmd_data(R00_CMD_PSR, sizeof(R00_CMD_PSR)); | ||||||
|  |   this->cmd_data(R01_CMD_PWR, sizeof(R01_CMD_PWR)); | ||||||
|  |   this->cmd_data(R03_CMD_PFS, sizeof(R03_CMD_PFS)); | ||||||
|  |   this->cmd_data(R06_CMD_BTST, sizeof(R06_CMD_BTST)); | ||||||
|  |   this->cmd_data(R30_CMD_PLL, sizeof(R30_CMD_PLL)); | ||||||
|  |   this->cmd_data(R41_CMD_TSE, sizeof(R41_CMD_TSE)); | ||||||
|  |   this->cmd_data(R50_CMD_CDI, sizeof(R50_CMD_CDI)); | ||||||
|  |   this->cmd_data(R60_CMD_TCON, sizeof(R60_CMD_TCON)); | ||||||
|  |   this->cmd_data(R61_CMD_TRES, sizeof(R61_CMD_TRES)); | ||||||
|  |   this->cmd_data(RE3_CMD_PWS, sizeof(RE3_CMD_PWS)); | ||||||
|  |  | ||||||
|  |   delay(100);  // NOLINT | ||||||
|  |   this->cmd_data(R50_CMD_CDI, sizeof(R50_CMD_CDI)); | ||||||
|  |  | ||||||
|  |   ESP_LOGI(TAG, "Display initialized successfully"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void HOT WaveshareEPaper5P65InF::display() { | ||||||
|  |   // INITIALIZATION | ||||||
|  |   ESP_LOGI(TAG, "Initialise the display"); | ||||||
|  |   this->initialize(); | ||||||
|  |  | ||||||
|  |   using namespace cmddata_5P65InF; | ||||||
|  |  | ||||||
|  |   // COMMAND DATA START TRANSMISSION | ||||||
|  |   ESP_LOGI(TAG, "Sending data to the display"); | ||||||
|  |   this->cmd_data(R61_CMD_TRES, sizeof(R61_CMD_TRES)); | ||||||
|  |   this->cmd_data(R10_CMD_DTM1, sizeof(R10_CMD_DTM1)); | ||||||
|  |   this->send_buffers_(); | ||||||
|  |  | ||||||
|  |   // COMMAND POWER ON | ||||||
|  |   ESP_LOGI(TAG, "Power on the display"); | ||||||
|  |   this->cmd_data(R04_CMD_PON, sizeof(R04_CMD_PON)); | ||||||
|  |   this->wait_until_(IDLE); | ||||||
|  |  | ||||||
|  |   // COMMAND REFRESH SCREEN | ||||||
|  |   ESP_LOGI(TAG, "Refresh the display"); | ||||||
|  |   this->cmd_data(R12_CMD_DRF, sizeof(R12_CMD_DRF)); | ||||||
|  |   this->wait_until_(IDLE); | ||||||
|  |  | ||||||
|  |   // COMMAND POWER OFF | ||||||
|  |   ESP_LOGI(TAG, "Power off the display"); | ||||||
|  |   this->cmd_data(R02_CMD_POF, sizeof(R02_CMD_POF)); | ||||||
|  |   this->wait_until_(BUSY); | ||||||
|  |  | ||||||
|  |   if (this->deep_sleep_between_updates_) { | ||||||
|  |     ESP_LOGI(TAG, "Set the display to deep sleep"); | ||||||
|  |     this->cmd_data(R07_CMD_DSLP, sizeof(R07_CMD_DSLP)); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int WaveshareEPaper5P65InF::get_width_internal() { return 600; } | ||||||
|  | int WaveshareEPaper5P65InF::get_height_internal() { return 448; } | ||||||
|  | uint32_t WaveshareEPaper5P65InF::idle_timeout_() { return 35000; } | ||||||
|  |  | ||||||
|  | void WaveshareEPaper5P65InF::dump_config() { | ||||||
|  |   LOG_DISPLAY("", "Waveshare E-Paper", this); | ||||||
|  |   ESP_LOGCONFIG(TAG, "  Model: 5.65in-F"); | ||||||
|  |   LOG_PIN("  Reset Pin: ", this->reset_pin_); | ||||||
|  |   LOG_PIN("  DC Pin: ", this->dc_pin_); | ||||||
|  |   LOG_PIN("  Busy Pin: ", this->busy_pin_); | ||||||
|  |   LOG_UPDATE_INTERVAL(this); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool WaveshareEPaper5P65InF::wait_until_(WaitForState busy_state) { | ||||||
|  |   if (this->busy_pin_ == nullptr) { | ||||||
|  |     return true; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   const uint32_t start = millis(); | ||||||
|  |   while (busy_state != this->busy_pin_->digital_read()) { | ||||||
|  |     if (millis() - start > this->idle_timeout_()) { | ||||||
|  |       ESP_LOGE(TAG, "Timeout while displaying image!"); | ||||||
|  |       return false; | ||||||
|  |     } | ||||||
|  |     App.feed_wdt(); | ||||||
|  |     delay(10); | ||||||
|  |   } | ||||||
|  |   return true; | ||||||
|  | } | ||||||
|  |  | ||||||
| void WaveshareEPaper7P3InF::initialize() { | void WaveshareEPaper7P3InF::initialize() { | ||||||
|   if (this->buffers_[0] == nullptr) { |   if (this->buffers_[0] == nullptr) { | ||||||
|     ESP_LOGE(TAG, "Buffer unavailable!"); |     ESP_LOGE(TAG, "Buffer unavailable!"); | ||||||
| @@ -3411,11 +3621,6 @@ void WaveshareEPaper7P3InF::initialize() { | |||||||
|   ESP_LOGI(TAG, "Display initialized successfully"); |   ESP_LOGI(TAG, "Display initialized successfully"); | ||||||
| } | } | ||||||
| void HOT WaveshareEPaper7P3InF::display() { | void HOT WaveshareEPaper7P3InF::display() { | ||||||
|   if (this->buffers_[0] == nullptr) { |  | ||||||
|     ESP_LOGE(TAG, "Buffer unavailable!"); |  | ||||||
|     return; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // INITIALIZATION |   // INITIALIZATION | ||||||
|   ESP_LOGI(TAG, "Initialise the display"); |   ESP_LOGI(TAG, "Initialise the display"); | ||||||
|   this->initialize(); |   this->initialize(); | ||||||
| @@ -3423,29 +3628,7 @@ void HOT WaveshareEPaper7P3InF::display() { | |||||||
|   // COMMAND DATA START TRANSMISSION |   // COMMAND DATA START TRANSMISSION | ||||||
|   ESP_LOGI(TAG, "Sending data to the display"); |   ESP_LOGI(TAG, "Sending data to the display"); | ||||||
|   this->command(0x10); |   this->command(0x10); | ||||||
|   uint32_t small_buffer_length = this->get_buffer_length_() / NUM_BUFFERS; |   this->send_buffers_(); | ||||||
|   uint8_t byte_to_send; |  | ||||||
|   for (auto &buffer : this->buffers_) { |  | ||||||
|     for (uint32_t buffer_pos = 0; buffer_pos < small_buffer_length; buffer_pos += 3) { |  | ||||||
|       std::bitset<24> triplet = |  | ||||||
|           buffer[buffer_pos + 0] << 16 | buffer[buffer_pos + 1] << 8 | buffer[buffer_pos + 2] << 0; |  | ||||||
|       // 8 bitset<3> are stored in 3 bytes |  | ||||||
|       // |aaabbbaa|abbbaaab|bbaaabbb| |  | ||||||
|       // | byte 1 | byte 2 | byte 3 | |  | ||||||
|       byte_to_send = ((triplet >> 17).to_ulong() & 0b01110000) | ((triplet >> 18).to_ulong() & 0b00000111); |  | ||||||
|       this->data(byte_to_send); |  | ||||||
|  |  | ||||||
|       byte_to_send = ((triplet >> 11).to_ulong() & 0b01110000) | ((triplet >> 12).to_ulong() & 0b00000111); |  | ||||||
|       this->data(byte_to_send); |  | ||||||
|  |  | ||||||
|       byte_to_send = ((triplet >> 5).to_ulong() & 0b01110000) | ((triplet >> 6).to_ulong() & 0b00000111); |  | ||||||
|       this->data(byte_to_send); |  | ||||||
|  |  | ||||||
|       byte_to_send = ((triplet << 1).to_ulong() & 0b01110000) | ((triplet << 0).to_ulong() & 0b00000111); |  | ||||||
|       this->data(byte_to_send); |  | ||||||
|     } |  | ||||||
|     App.feed_wdt(); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // COMMAND POWER ON |   // COMMAND POWER ON | ||||||
|   ESP_LOGI(TAG, "Power on the display"); |   ESP_LOGI(TAG, "Power on the display"); | ||||||
| @@ -3464,10 +3647,12 @@ void HOT WaveshareEPaper7P3InF::display() { | |||||||
|   this->data(0x00); |   this->data(0x00); | ||||||
|   this->wait_until_idle_(); |   this->wait_until_idle_(); | ||||||
|  |  | ||||||
|  |   if (this->deep_sleep_between_updates_) { | ||||||
|     ESP_LOGI(TAG, "Set the display to deep sleep"); |     ESP_LOGI(TAG, "Set the display to deep sleep"); | ||||||
|     this->command(0x07); |     this->command(0x07); | ||||||
|     this->data(0xA5); |     this->data(0xA5); | ||||||
|   } |   } | ||||||
|  | } | ||||||
| int WaveshareEPaper7P3InF::get_width_internal() { return 800; } | int WaveshareEPaper7P3InF::get_width_internal() { return 800; } | ||||||
| int WaveshareEPaper7P3InF::get_height_internal() { return 480; } | int WaveshareEPaper7P3InF::get_height_internal() { return 480; } | ||||||
| uint32_t WaveshareEPaper7P3InF::idle_timeout_() { return 35000; } | uint32_t WaveshareEPaper7P3InF::idle_timeout_() { return 35000; } | ||||||
|   | |||||||
| @@ -94,7 +94,10 @@ class WaveshareEPaper7C : public WaveshareEPaperBase { | |||||||
|   void draw_absolute_pixel_internal(int x, int y, Color color) override; |   void draw_absolute_pixel_internal(int x, int y, Color color) override; | ||||||
|   uint32_t get_buffer_length_() override; |   uint32_t get_buffer_length_() override; | ||||||
|   void setup() override; |   void setup() override; | ||||||
|  |  | ||||||
|   void init_internal_7c_(uint32_t buffer_length); |   void init_internal_7c_(uint32_t buffer_length); | ||||||
|  |   void send_buffers_(); | ||||||
|  |   void reset_(); | ||||||
|  |  | ||||||
|   static const int NUM_BUFFERS = 10; |   static const int NUM_BUFFERS = 10; | ||||||
|   uint8_t *buffers_[NUM_BUFFERS]; |   uint8_t *buffers_[NUM_BUFFERS]; | ||||||
| @@ -683,6 +686,29 @@ class WaveshareEPaper5P8InV2 : public WaveshareEPaper { | |||||||
|   int get_height_internal() override; |   int get_height_internal() override; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | class WaveshareEPaper5P65InF : public WaveshareEPaper7C { | ||||||
|  |  public: | ||||||
|  |   void initialize() override; | ||||||
|  |  | ||||||
|  |   void display() override; | ||||||
|  |  | ||||||
|  |   void dump_config() override; | ||||||
|  |  | ||||||
|  |  protected: | ||||||
|  |   int get_width_internal() override; | ||||||
|  |  | ||||||
|  |   int get_height_internal() override; | ||||||
|  |  | ||||||
|  |   uint32_t idle_timeout_() override; | ||||||
|  |  | ||||||
|  |   void deep_sleep() override { ; } | ||||||
|  |  | ||||||
|  |   enum WaitForState { BUSY = true, IDLE = false }; | ||||||
|  |   bool wait_until_(WaitForState state); | ||||||
|  |  | ||||||
|  |   bool deep_sleep_between_updates_{true}; | ||||||
|  | }; | ||||||
|  |  | ||||||
| class WaveshareEPaper7P3InF : public WaveshareEPaper7C { | class WaveshareEPaper7P3InF : public WaveshareEPaper7C { | ||||||
|  public: |  public: | ||||||
|   void initialize() override; |   void initialize() override; | ||||||
| @@ -703,17 +729,6 @@ class WaveshareEPaper7P3InF : public WaveshareEPaper7C { | |||||||
|   bool wait_until_idle_(); |   bool wait_until_idle_(); | ||||||
|  |  | ||||||
|   bool deep_sleep_between_updates_{true}; |   bool deep_sleep_between_updates_{true}; | ||||||
|  |  | ||||||
|   void reset_() { |  | ||||||
|     if (this->reset_pin_ != nullptr) { |  | ||||||
|       this->reset_pin_->digital_write(true); |  | ||||||
|       delay(20); |  | ||||||
|       this->reset_pin_->digital_write(false); |  | ||||||
|       delay(1); |  | ||||||
|       this->reset_pin_->digital_write(true); |  | ||||||
|       delay(20); |  | ||||||
|     } |  | ||||||
|   }; |  | ||||||
| }; | }; | ||||||
|  |  | ||||||
| class WaveshareEPaper7P5In : public WaveshareEPaper { | class WaveshareEPaper7P5In : public WaveshareEPaper { | ||||||
|   | |||||||
| @@ -541,6 +541,26 @@ display: | |||||||
|     lambda: |- |     lambda: |- | ||||||
|       it.rectangle(0, 0, it.get_width(), it.get_height()); |       it.rectangle(0, 0, it.get_width(), it.get_height()); | ||||||
|  |  | ||||||
|  |   # 5.65 inch displays | ||||||
|  |   - platform: waveshare_epaper | ||||||
|  |     id: epd_5_65 | ||||||
|  |     model: 5.65in-f | ||||||
|  |     spi_id: spi_waveshare_epaper | ||||||
|  |     cs_pin: | ||||||
|  |       allow_other_uses: true | ||||||
|  |       number: ${cs_pin} | ||||||
|  |     dc_pin: | ||||||
|  |       allow_other_uses: true | ||||||
|  |       number: ${dc_pin} | ||||||
|  |     busy_pin: | ||||||
|  |       allow_other_uses: true | ||||||
|  |       number: ${busy_pin} | ||||||
|  |     reset_pin: | ||||||
|  |       allow_other_uses: true | ||||||
|  |       number: ${reset_pin} | ||||||
|  |     lambda: |- | ||||||
|  |       it.rectangle(0, 0, it.get_width(), it.get_height()); | ||||||
|  |  | ||||||
|   # 5.83 inch displays |   # 5.83 inch displays | ||||||
|   - platform: waveshare_epaper |   - platform: waveshare_epaper | ||||||
|     id: epd_5_83 |     id: epd_5_83 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user