From c6ce6ce0164628f54cbdfb205d94342766496ae2 Mon Sep 17 00:00:00 2001 From: Michael Davidson Date: Sun, 11 Feb 2024 09:57:34 +1100 Subject: [PATCH] Support for 4.2in v2 display. Board is marked as Rev 2.2 --- esphome/components/waveshare_epaper/display.py | 4 ++++ .../components/waveshare_epaper/waveshare_epaper.cpp | 10 ++++++++++ esphome/components/waveshare_epaper/waveshare_epaper.h | 2 ++ 3 files changed, 16 insertions(+) diff --git a/esphome/components/waveshare_epaper/display.py b/esphome/components/waveshare_epaper/display.py index fa7c104951..240f61dcf1 100644 --- a/esphome/components/waveshare_epaper/display.py +++ b/esphome/components/waveshare_epaper/display.py @@ -52,6 +52,9 @@ WaveshareEPaper4P2In = waveshare_epaper_ns.class_( WaveshareEPaper4P2InBV2 = waveshare_epaper_ns.class_( "WaveshareEPaper4P2InBV2", WaveshareEPaper ) +WaveshareEPaper4P2InV2 = waveshare_epaper_ns.class_( + "WaveshareEPaper4P2InV2", WaveshareEPaper +) WaveshareEPaper5P8In = waveshare_epaper_ns.class_( "WaveshareEPaper5P8In", WaveshareEPaper ) @@ -109,6 +112,7 @@ MODELS = { "2.90in-bv3": ("b", WaveshareEPaper2P9InBV3), "4.20in": ("b", WaveshareEPaper4P2In), "4.20in-bv2": ("b", WaveshareEPaper4P2InBV2), + "4.20in-v2": ("a", WaveshareEPaperTypeAModel.WAVESHARE_EPAPER_4_2_IN_V2), "5.83in": ("b", WaveshareEPaper5P8In), "5.83inv2": ("b", WaveshareEPaper5P8InV2), "7.50in": ("b", WaveshareEPaper7P5In), diff --git a/esphome/components/waveshare_epaper/waveshare_epaper.cpp b/esphome/components/waveshare_epaper/waveshare_epaper.cpp index 9118475c36..ff5f9feaf1 100644 --- a/esphome/components/waveshare_epaper/waveshare_epaper.cpp +++ b/esphome/components/waveshare_epaper/waveshare_epaper.cpp @@ -219,6 +219,7 @@ void WaveshareEPaperTypeA::initialize() { // More models can be added here to enable deep sleep if eligible case WAVESHARE_EPAPER_1_54_IN: case WAVESHARE_EPAPER_1_54_IN_V2: + case WAVESHARE_EPAPER_4_2_IN_V2: this->deep_sleep_between_updates_ = true; ESP_LOGI(TAG, "Set the display to deep sleep"); this->deep_sleep(); @@ -272,6 +273,7 @@ void WaveshareEPaperTypeA::init_display_() { break; case TTGO_EPAPER_2_13_IN_B74: case WAVESHARE_EPAPER_2_9_IN_V2: + case WAVESHARE_EPAPER_4_2_IN_V2: this->data(0x03); // from top left to bottom right // RAM content option for Display Update this->command(0x21); @@ -312,6 +314,9 @@ void WaveshareEPaperTypeA::dump_config() { case WAVESHARE_EPAPER_2_9_IN_V2: ESP_LOGCONFIG(TAG, " Model: 2.9inV2"); break; + case WAVESHARE_EPAPER_4_2_IN_V2: + ESP_LOGCONFIG(TAG, " Model: 4.2inV2"); + break; } ESP_LOGCONFIG(TAG, " Full Update Every: %" PRIu32, this->full_update_every_); LOG_PIN(" Reset Pin: ", this->reset_pin_); @@ -435,6 +440,7 @@ void HOT WaveshareEPaperTypeA::display() { this->command(0x22); switch (this->model_) { case WAVESHARE_EPAPER_2_9_IN_V2: + case WAVESHARE_EPAPER_4_2_IN_V2: case WAVESHARE_EPAPER_1_54_IN_V2: case TTGO_EPAPER_2_13_IN_B74: this->data(full_update ? 0xF7 : 0xFF); @@ -473,6 +479,8 @@ int WaveshareEPaperTypeA::get_width_internal() { case WAVESHARE_EPAPER_2_9_IN: case WAVESHARE_EPAPER_2_9_IN_V2: return 128; + case WAVESHARE_EPAPER_4_2_IN_V2: + return 400; } return 0; } @@ -503,6 +511,8 @@ int WaveshareEPaperTypeA::get_height_internal() { case WAVESHARE_EPAPER_2_9_IN: case WAVESHARE_EPAPER_2_9_IN_V2: return 296; + case WAVESHARE_EPAPER_4_2_IN_V2: + return 300; } return 0; } diff --git a/esphome/components/waveshare_epaper/waveshare_epaper.h b/esphome/components/waveshare_epaper/waveshare_epaper.h index 47f0cb27b6..d12ceb9cdc 100644 --- a/esphome/components/waveshare_epaper/waveshare_epaper.h +++ b/esphome/components/waveshare_epaper/waveshare_epaper.h @@ -92,6 +92,7 @@ enum WaveshareEPaperTypeAModel { WAVESHARE_EPAPER_2_13_IN, WAVESHARE_EPAPER_2_9_IN, WAVESHARE_EPAPER_2_9_IN_V2, + WAVESHARE_EPAPER_4_2_IN_V2, TTGO_EPAPER_2_13_IN, TTGO_EPAPER_2_13_IN_B73, TTGO_EPAPER_2_13_IN_B1, @@ -114,6 +115,7 @@ class WaveshareEPaperTypeA : public WaveshareEPaper { case WAVESHARE_EPAPER_1_54_IN: case WAVESHARE_EPAPER_1_54_IN_V2: case WAVESHARE_EPAPER_2_9_IN_V2: + case WAVESHARE_EPAPER_4_2_IN_V2: // COMMAND DEEP SLEEP MODE this->command(0x10); this->data(0x01);