mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 15:12:06 +00:00 
			
		
		
		
	Add GDEY029T94 support (#7931)
Co-authored-by: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com>
This commit is contained in:
		| @@ -52,6 +52,7 @@ WaveshareEPaper2P9InV2R2 = waveshare_epaper_ns.class_( | |||||||
|     "WaveshareEPaper2P9InV2R2", WaveshareEPaper |     "WaveshareEPaper2P9InV2R2", WaveshareEPaper | ||||||
| ) | ) | ||||||
| GDEW029T5 = waveshare_epaper_ns.class_("GDEW029T5", WaveshareEPaper) | GDEW029T5 = waveshare_epaper_ns.class_("GDEW029T5", WaveshareEPaper) | ||||||
|  | GDEY029T94 = waveshare_epaper_ns.class_("GDEY029T94", WaveshareEPaper) | ||||||
| WaveshareEPaper2P9InDKE = waveshare_epaper_ns.class_( | WaveshareEPaper2P9InDKE = waveshare_epaper_ns.class_( | ||||||
|     "WaveshareEPaper2P9InDKE", WaveshareEPaper |     "WaveshareEPaper2P9InDKE", WaveshareEPaper | ||||||
| ) | ) | ||||||
| @@ -136,6 +137,7 @@ MODELS = { | |||||||
|     "2.70inv2": ("b", WaveshareEPaper2P7InV2), |     "2.70inv2": ("b", WaveshareEPaper2P7InV2), | ||||||
|     "2.90in-b": ("b", WaveshareEPaper2P9InB), |     "2.90in-b": ("b", WaveshareEPaper2P9InB), | ||||||
|     "2.90in-bv3": ("b", WaveshareEPaper2P9InBV3), |     "2.90in-bv3": ("b", WaveshareEPaper2P9InBV3), | ||||||
|  |     "gdey029t94": ("c", GDEY029T94), | ||||||
|     "2.90inv2-r2": ("c", WaveshareEPaper2P9InV2R2), |     "2.90inv2-r2": ("c", WaveshareEPaper2P9InV2R2), | ||||||
|     "2.90in-d": ("b", WaveshareEPaper2P9InD), |     "2.90in-d": ("b", WaveshareEPaper2P9InD), | ||||||
|     "2.90in-dke": ("c", WaveshareEPaper2P9InDKE), |     "2.90in-dke": ("c", WaveshareEPaper2P9InDKE), | ||||||
|   | |||||||
| @@ -1677,9 +1677,82 @@ int WaveshareEPaper2P9InV2R2::get_width_controller() { return this->get_width_in | |||||||
| void WaveshareEPaper2P9InV2R2::set_full_update_every(uint32_t full_update_every) { | void WaveshareEPaper2P9InV2R2::set_full_update_every(uint32_t full_update_every) { | ||||||
|   this->full_update_every_ = full_update_every; |   this->full_update_every_ = full_update_every; | ||||||
| } | } | ||||||
|  | // ======================================================== | ||||||
|  | //     Good Display 2.9in black/white | ||||||
|  | // Datasheet: | ||||||
|  | //  - https://files.seeedstudio.com/wiki/Other_Display/29-epaper/GDEY029T94.pdf | ||||||
|  | //  - | ||||||
|  | //  https://github.com/Allen-Kuang/e-ink_Demo/blob/main/2.9%20inch%20E-paper%20-%20monocolor%20128x296/example/Display_EPD_W21.cpp | ||||||
|  | // ======================================================== | ||||||
|  |  | ||||||
|  | void GDEY029T94::initialize() { | ||||||
|  |   // EPD hardware init start | ||||||
|  |   this->reset_(); | ||||||
|  |  | ||||||
|  |   this->wait_until_idle_(); | ||||||
|  |   this->command(0x12);  // SWRESET | ||||||
|  |   this->wait_until_idle_(); | ||||||
|  |  | ||||||
|  |   this->command(0x01);  // Driver output control | ||||||
|  |   this->data((this->get_height_internal() - 1) % 256); | ||||||
|  |   this->data((this->get_height_internal() - 1) / 256); | ||||||
|  |   this->data(0x00); | ||||||
|  |  | ||||||
|  |   this->command(0x11);  // data entry mode | ||||||
|  |   this->data(0x03); | ||||||
|  |  | ||||||
|  |   this->command(0x44);  // set Ram-X address start/end position | ||||||
|  |   this->data(0x00); | ||||||
|  |   this->data(this->get_width_internal() / 8 - 1); | ||||||
|  |  | ||||||
|  |   this->command(0x45);  // set Ram-Y address start/end position | ||||||
|  |   this->data(0x00); | ||||||
|  |   this->data(0x00); | ||||||
|  |   this->data((this->get_height_internal() - 1) % 256); | ||||||
|  |   this->data((this->get_height_internal() - 1) / 256); | ||||||
|  |  | ||||||
|  |   this->command(0x3C);  // BorderWavefrom | ||||||
|  |   this->data(0x05); | ||||||
|  |  | ||||||
|  |   this->command(0x21);  //  Display update control | ||||||
|  |   this->data(0x00); | ||||||
|  |   this->data(0x80); | ||||||
|  |  | ||||||
|  |   this->command(0x18);  // Read built-in temperature sensor | ||||||
|  |   this->data(0x80); | ||||||
|  |  | ||||||
|  |   this->command(0x4E);  // set RAM x address count to 0; | ||||||
|  |   this->data(0x00); | ||||||
|  |   this->command(0x4F);  // set RAM y address count to 0X199; | ||||||
|  |   this->command(0x00); | ||||||
|  |   this->command(0x00); | ||||||
|  |   this->wait_until_idle_(); | ||||||
|  | } | ||||||
|  | void HOT GDEY029T94::display() { | ||||||
|  |   this->command(0x24);  // write RAM for black(0)/white (1) | ||||||
|  |   this->start_data_(); | ||||||
|  |   for (uint32_t i = 0; i < this->get_buffer_length_(); i++) { | ||||||
|  |     this->write_byte(this->buffer_[i]); | ||||||
|  |   } | ||||||
|  |   this->end_data_(); | ||||||
|  |   this->command(0x22);  // Display Update Control | ||||||
|  |   this->data(0xF7); | ||||||
|  |   this->command(0x20);  // Activate Display Update Sequence | ||||||
|  |   this->wait_until_idle_(); | ||||||
|  | } | ||||||
|  | int GDEY029T94::get_width_internal() { return 128; } | ||||||
|  | int GDEY029T94::get_height_internal() { return 296; } | ||||||
|  | void GDEY029T94::dump_config() { | ||||||
|  |   LOG_DISPLAY("", "E-Paper (Good Display)", this); | ||||||
|  |   ESP_LOGCONFIG(TAG, "  Model: 2.9in GDEY029T94"); | ||||||
|  |   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); | ||||||
|  | } | ||||||
|  |  | ||||||
| // ======================================================== | // ======================================================== | ||||||
| //     Good Display 2.9in black/white/grey | //     Good Display 2.9in black/white | ||||||
| // Datasheet: | // Datasheet: | ||||||
| //  - https://v4.cecdn.yun300.cn/100001_1909185148/SSD1680.pdf | //  - https://v4.cecdn.yun300.cn/100001_1909185148/SSD1680.pdf | ||||||
| //  - https://github.com/adafruit/Adafruit_EPD/blob/master/src/panels/ThinkInk_290_Grayscale4_T5.h | //  - https://github.com/adafruit/Adafruit_EPD/blob/master/src/panels/ThinkInk_290_Grayscale4_T5.h | ||||||
|   | |||||||
| @@ -277,6 +277,25 @@ class GDEW029T5 : public WaveshareEPaper { | |||||||
|   uint8_t *old_buffer_{nullptr}; |   uint8_t *old_buffer_{nullptr}; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | class GDEY029T94 : public WaveshareEPaper { | ||||||
|  |  public: | ||||||
|  |   void initialize() override; | ||||||
|  |  | ||||||
|  |   void display() override; | ||||||
|  |  | ||||||
|  |   void dump_config() override; | ||||||
|  |  | ||||||
|  |   void deep_sleep() override { | ||||||
|  |     this->command(0x10);  // Enter deep sleep | ||||||
|  |     this->data(0x01); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |  protected: | ||||||
|  |   int get_width_internal() override; | ||||||
|  |  | ||||||
|  |   int get_height_internal() override; | ||||||
|  | }; | ||||||
|  |  | ||||||
| class WaveshareEPaper2P7InV2 : public WaveshareEPaper { | class WaveshareEPaper2P7InV2 : public WaveshareEPaper { | ||||||
|  public: |  public: | ||||||
|   void initialize() override; |   void initialize() override; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user