├── 3DModel ├── Eink_Display_Back.stl ├── Eink_Display_Front.stl ├── Eink_Display_Stand.stl └── README.md ├── ESPHome ├── README.md ├── esphome-eink-display.yaml ├── fonts │ ├── GoogleSans-Bold.ttf │ ├── GoogleSans-Medium.ttf │ ├── README.md │ └── materialdesignicons-webfont.ttf └── images │ ├── HDMI1.png │ ├── HDMI2.png │ ├── HDMI3.jpg │ ├── HDMI3.png │ ├── HDMI4.png │ ├── Page2_bg.png │ ├── README.md │ ├── USB1.png │ ├── USB2.png │ ├── USB3.png │ ├── USB4.png │ └── main_background.png ├── README.md └── images ├── Eink_Display.jpg ├── Home_Assistant_Server.jpg └── README.md /3DModel/Eink_Display_Back.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidz-yt/eink-desk-display/cfbd7326bcd3fb06e84b11c7e59a10d1cce414ca/3DModel/Eink_Display_Back.stl -------------------------------------------------------------------------------- /3DModel/Eink_Display_Front.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidz-yt/eink-desk-display/cfbd7326bcd3fb06e84b11c7e59a10d1cce414ca/3DModel/Eink_Display_Front.stl -------------------------------------------------------------------------------- /3DModel/Eink_Display_Stand.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidz-yt/eink-desk-display/cfbd7326bcd3fb06e84b11c7e59a10d1cce414ca/3DModel/Eink_Display_Stand.stl -------------------------------------------------------------------------------- /3DModel/README.md: -------------------------------------------------------------------------------- 1 | Remixed 3D Printed Case based on this 3D Model 2 | https://www.printables.com/model/272575-case-for-lilygo-t5-47-inch-e-paper 3 | -------------------------------------------------------------------------------- /ESPHome/README.md: -------------------------------------------------------------------------------- 1 | YAML and image graphics 2 | -------------------------------------------------------------------------------- /ESPHome/esphome-eink-display.yaml: -------------------------------------------------------------------------------- 1 | substitutions: 2 | esp_name: ESP Display #Device Name 3 | esp_hostname: esphome-einkt5 4 | 5 | esphome: 6 | name: ${esp_hostname} 7 | platform: ESP32 8 | board: esp32dev 9 | 10 | # Enable logging 11 | logger: 12 | 13 | # Enable Home Assistant API 14 | api: 15 | encryption: 16 | key: "...REPLACE_KEY..." 17 | 18 | ota: 19 | password: "...REPLACE_PASSWORD..." 20 | 21 | wifi: 22 | ssid: !secret wifi_ssid 23 | password: !secret wifi_password 24 | 25 | captive_portal: 26 | 27 | time: 28 | - platform: homeassistant 29 | id: ntp 30 | on_time: 31 | - seconds: 0 32 | then: 33 | - component.update: t5_display 34 | 35 | spi: 36 | clk_pin: 18 37 | mosi_pin: 23 38 | 39 | button: 40 | - platform: restart 41 | name: "${esp_name} Restart" 42 | 43 | - platform: template 44 | name: "${esp_name} Refresh" 45 | icon: "mdi:update" 46 | 47 | - platform: template 48 | name: "${esp_name} Next Page" 49 | icon: "mdi:update" 50 | on_press: 51 | then: 52 | - display.page.show_next: t5_display 53 | - component.update: t5_display 54 | 55 | binary_sensor: 56 | - platform: gpio 57 | pin: 58 | number: GPIO39 59 | inverted: true 60 | name: "${esp_name} Button 1" 61 | on_press: 62 | then: 63 | - display.page.show_next: t5_display 64 | - component.update: t5_display 65 | 66 | 67 | sensor: 68 | - platform: homeassistant 69 | entity_id: sensor.openweathermap_feels_like_temperature 70 | id: feel_temp 71 | internal: true 72 | 73 | - platform: homeassistant 74 | entity_id: sensor.openweathermap_forecast_precipitation_probability 75 | id: prec_perc 76 | internal: true 77 | 78 | - platform: homeassistant 79 | entity_id: input_number.usbswitchcontroller_current_output 80 | id: usb_output 81 | internal: true 82 | on_value: 83 | then: 84 | - component.update: t5_display 85 | 86 | - platform: homeassistant 87 | entity_id: input_number.lgtv_hdmi_output 88 | id: hdmi_output 89 | internal: true 90 | on_value: 91 | then: 92 | - component.update: t5_display 93 | 94 | - platform: homeassistant 95 | entity_id: sensor.homepc_amd_ryzen_5_5600x_temperatures_core_tctl_tdie 96 | id: hw_cpu_temp 97 | internal: true 98 | 99 | - platform: homeassistant 100 | entity_id: sensor.homepc_amd_ryzen_5_5600x_load_cpu_total 101 | id: hw_cpu_load 102 | internal: true 103 | 104 | - platform: homeassistant 105 | entity_id: sensor.homepc_amd_radeon_rx_6800_xt_temperatures_gpu_core 106 | id: hw_gpu_temp 107 | internal: true 108 | 109 | - platform: homeassistant 110 | entity_id: sensor.homepc_amd_radeon_rx_6800_xt_load_gpu_core 111 | id: hw_gpu_load 112 | internal: true 113 | 114 | - platform: homeassistant 115 | entity_id: sensor.homepc_generic_memory_load_memory 116 | id: hw_mem_load 117 | internal: true 118 | 119 | - platform: homeassistant 120 | entity_id: sensor.homepc_generic_memory_data_memory_used 121 | id: hw_mem_usage 122 | internal: true 123 | 124 | - platform: homeassistant 125 | entity_id: sensor.yahoofinance_xeqt_to 126 | id: stock1_price 127 | internal: true 128 | 129 | - platform: homeassistant 130 | entity_id: sensor.yahoofinance_xeqt_to 131 | attribute: regularMarketDayHigh 132 | id: stock1_high 133 | internal: true 134 | 135 | - platform: homeassistant 136 | entity_id: sensor.yahoofinance_xeqt_to 137 | attribute: regularMarketDayLow 138 | id: stock1_low 139 | internal: true 140 | 141 | - platform: homeassistant 142 | entity_id: sensor.yahoofinance_gspc 143 | id: stock2_price 144 | internal: true 145 | 146 | - platform: homeassistant 147 | entity_id: sensor.yahoofinance_gspc 148 | attribute: regularMarketDayHigh 149 | id: stock2_high 150 | internal: true 151 | 152 | - platform: homeassistant 153 | entity_id: sensor.yahoofinance_gspc 154 | attribute: regularMarketDayLow 155 | id: stock2_low 156 | internal: true 157 | 158 | - platform: homeassistant 159 | entity_id: sensor.yahoofinance_gsptse 160 | id: stock3_price 161 | internal: true 162 | 163 | - platform: homeassistant 164 | entity_id: sensor.yahoofinance_gsptse 165 | attribute: regularMarketDayHigh 166 | id: stock3_high 167 | internal: true 168 | 169 | - platform: homeassistant 170 | entity_id: sensor.yahoofinance_gsptse 171 | attribute: regularMarketDayLow 172 | id: stock3_low 173 | internal: true 174 | 175 | - platform: homeassistant 176 | entity_id: sensor.yahoofinance_cad_x 177 | id: currency_USDCAD 178 | internal: true 179 | 180 | 181 | text_sensor: 182 | # More (Text Based) Weather Sensors 183 | - platform: homeassistant 184 | entity_id: sensor.openweathermap_precipitation_kind 185 | id: fc_prec 186 | internal: true 187 | 188 | - platform: homeassistant 189 | entity_id: sensor.openweathermap_forecast_condition 190 | id: fc_weather 191 | internal: true 192 | 193 | - platform: homeassistant 194 | entity_id: sensor.yahoofinance_xeqt_to 195 | attribute: trending 196 | id: stock1_trending 197 | internal: true 198 | 199 | - platform: homeassistant 200 | entity_id: sensor.yahoofinance_gspc 201 | attribute: trending 202 | id: stock2_trending 203 | internal: true 204 | 205 | - platform: homeassistant 206 | entity_id: sensor.yahoofinance_gsptse 207 | attribute: trending 208 | id: stock3_trending 209 | internal: true 210 | 211 | # NOTE: Make sure these images fit the screen resolution. I was encountering crashes when the image extended beyond the edge of the screen. 212 | image: 213 | - file: "images/main_background.png" 214 | id: bg_image 215 | - file: "images/Page2_bg.png" 216 | id: page2_bg_image 217 | - file: "images/HDMI1.png" 218 | id: hdmi1_image 219 | - file: "images/HDMI2.png" 220 | id: hdmi2_image 221 | - file: "images/HDMI3.png" 222 | id: hdmi3_image 223 | - file: "images/HDMI4.png" 224 | id: hdmi4_image 225 | - file: "images/USB1.png" 226 | id: usb1_image 227 | - file: "images/USB2.png" 228 | id: usb2_image 229 | - file: "images/USB3.png" 230 | id: usb3_image 231 | - file: "images/USB4.png" 232 | id: usb4_image 233 | 234 | 235 | font: 236 | - file: "fonts/GoogleSans-Medium.ttf" 237 | id: font_date 238 | size: 58 239 | - file: "fonts/GoogleSans-Bold.ttf" 240 | id: font_time 241 | size: 105 242 | - file: "fonts/GoogleSans-Bold.ttf" 243 | id: font_value 244 | size: 50 245 | - file: "fonts/GoogleSans-Bold.ttf" 246 | id: font_value_small 247 | size: 40 248 | - file: "fonts/GoogleSans-Bold.ttf" 249 | id: font_stock_title 250 | size: 40 251 | - file: "fonts/GoogleSans-Bold.ttf" 252 | id: font_stock_price 253 | size: 60 254 | - file: "fonts/GoogleSans-Bold.ttf" 255 | id: font_stock_price_small 256 | size: 50 257 | - file: "fonts/GoogleSans-Medium.ttf" 258 | id: font_stock_highlow 259 | size: 30 260 | 261 | # https://pictogrammers.github.io/@mdi/font/5.3.45/ 262 | - file: 'fonts/materialdesignicons-webfont.ttf' 263 | id: font_icons 264 | size: 130 265 | glyphs: 266 | - "\U000F0594" # clear-night 267 | - "\U000F0590" # cloudy 268 | - "\U000F0595" # partlycloudy 269 | - "\U000F0591" # fog 270 | - "\U000F0592" # hail 271 | - "\U000F0593" # lightning 272 | - "\U000F067E" # lightning-rainy 273 | - "\U000F0596" # pouring 274 | - "\U000F0597" # rainy 275 | - "\U000F0F36" # snowy 276 | - "\U000F067F" # snowy-rainy 277 | - "\U000F0599" # sunny 278 | - "\U000F059D" # windy 279 | - "\U000F059E" # windy-variant 280 | - "\U000F0F38" # exceptional 281 | 282 | - file: 'fonts/materialdesignicons-webfont.ttf' 283 | id: font_icons_small 284 | size: 56 285 | glyphs: 286 | - "\U000F050F" # Temperature 287 | - "\U000F07E4" # CO2 288 | - "\U000F054B" # umbrella 289 | - "\U000F0592" # hail 290 | - "\U000F0593" # lightning 291 | - "\U000F067E" # lightning-rainy 292 | - "\U000F0597" # rainy 293 | - "\U000F0F36" # snowy 294 | - "\U000F0594" # clear-night 295 | - "\U000F0599" # sunny 296 | - "\U000F059D" # wind 297 | - "\U000F058E" # humidity 298 | - "\U000F0D43" # air filter 299 | - "\U000F0533" # trending down 300 | - "\U000F0534" # trending neutral 301 | - "\U000F0535" # trending up 302 | 303 | color: 304 | - id: white 305 | white: 100% 306 | 307 | 308 | external_components: 309 | - source: github://madimadi/esphome-lilygo-t5-47@lilygo-t5-47 310 | components: ["lilygo_t5_47"] 311 | 312 | display: 313 | - platform: lilygo_t5_47 314 | id: t5_display 315 | rotation: 90 316 | update_interval: 3600s 317 | full_update_every: 5 # optional (default: 1): 0 - never, 1 (default) - every, 2+ - throttled 318 | pages: 319 | - id: page1 320 | lambda: |- 321 | #define xres 540 322 | #define yres 960 323 | 324 | it.image(0, 0, id(bg_image)); 325 | 326 | it.strftime(xres/2, 10, id(font_date), TextAlign::TOP_CENTER, "%A %b %d ", id(ntp).now()); 327 | it.strftime(xres/2, 80, id(font_time), TextAlign::TOP_CENTER, "%I:%M %p ", id(ntp).now()); 328 | 329 | 330 | // Weather Icon 331 | #define weather_icon_x 122 332 | #define weather_icon_y 316 333 | //Weather forecast Icon 334 | if (id(fc_weather).state == "clear-night") { 335 | it.printf(weather_icon_x, weather_icon_y, id(font_icons), TextAlign::CENTER, "\U000F0594");} 336 | if (id(fc_weather).state == "cloudy") { 337 | it.printf(weather_icon_x, weather_icon_y, id(font_icons), TextAlign::CENTER, "\U000F0590");} 338 | if (id(fc_weather).state == "partlycloudy") { 339 | it.printf(weather_icon_x, weather_icon_y, id(font_icons), TextAlign::CENTER, "\U000F0595");} 340 | if (id(fc_weather).state == "fog") { 341 | it.printf(weather_icon_x, weather_icon_y, id(font_icons), TextAlign::CENTER, "\U000F0591");} 342 | if (id(fc_weather).state == "hail") { 343 | it.printf(weather_icon_x, weather_icon_y, id(font_icons), TextAlign::CENTER, "\U000F0592");} 344 | if (id(fc_weather).state == "lightning") { 345 | it.printf(weather_icon_x, weather_icon_y, id(font_icons), TextAlign::CENTER, "\U000F0593");} 346 | if (id(fc_weather).state == "lightning-rainy") { 347 | it.printf(weather_icon_x, weather_icon_y, id(font_icons), TextAlign::CENTER, "\U000F067E");} 348 | if (id(fc_weather).state == "pouring") { 349 | it.printf(weather_icon_x, weather_icon_y, id(font_icons), TextAlign::CENTER, "\U000F0596");} 350 | if (id(fc_weather).state == "rainy") { 351 | it.printf(weather_icon_x, weather_icon_y, id(font_icons), TextAlign::CENTER, "\U000F0597");} 352 | if (id(fc_weather).state == "snowy") { 353 | it.printf(weather_icon_x, weather_icon_y, id(font_icons), TextAlign::CENTER, "\U000F0F36");} 354 | if (id(fc_weather).state == "snowy-rainy") { 355 | it.printf(weather_icon_x, weather_icon_y, id(font_icons), TextAlign::CENTER, "\U000F067F");} 356 | if (id(fc_weather).state == "sunny") { 357 | it.printf(weather_icon_x, weather_icon_y, id(font_icons), TextAlign::CENTER, "\U000F0599");} 358 | if (id(fc_weather).state == "windy") { 359 | it.printf(weather_icon_x, weather_icon_y, id(font_icons), TextAlign::CENTER, "\U000F059D");} 360 | if (id(fc_weather).state == "windy-variant") { 361 | it.printf(weather_icon_x, weather_icon_y, id(font_icons), TextAlign::CENTER, "\U000F059E");} 362 | if (id(fc_weather).state == "exceptional") { 363 | it.printf(weather_icon_x, weather_icon_y, id(font_icons), TextAlign::CENTER, "\U000F0F38");} 364 | 365 | 366 | // Feels Like Temp 367 | #define temp_icon_y 285 368 | it.printf(290, temp_icon_y, id(font_icons_small), TextAlign::CENTER, "\U000F050F"); // temperature 369 | it.printf(409, temp_icon_y, id(font_value), TextAlign::CENTER, "%.1f°C", id(feel_temp).state); 370 | 371 | // Input + HDMI Selection 372 | #define input_icon_x 0 373 | #define input_icon_y 428 374 | if (id(hdmi_output).state == 1) { 375 | it.image(input_icon_x, input_icon_y, id(hdmi1_image));} 376 | if (id(hdmi_output).state == 2) { 377 | it.image(input_icon_x, input_icon_y, id(hdmi2_image));} 378 | if (id(hdmi_output).state == 3) { 379 | it.image(input_icon_x, input_icon_y, id(hdmi3_image));} 380 | if (id(hdmi_output).state == 4) { 381 | it.image(input_icon_x, input_icon_y, id(hdmi4_image));} 382 | 383 | // USB Selection 384 | #define usb_icon_x 232 385 | #define usb_icon_y 523 386 | if (id(usb_output).state == 1) { 387 | it.image(usb_icon_x, usb_icon_y, id(usb1_image));} 388 | if (id(usb_output).state == 2) { 389 | it.image(usb_icon_x, usb_icon_y, id(usb2_image));} 390 | if (id(usb_output).state == 3) { 391 | it.image(usb_icon_x, usb_icon_y, id(usb3_image));} 392 | if (id(usb_output).state == 4) { 393 | it.image(usb_icon_x, usb_icon_y, id(usb4_image));} 394 | 395 | 396 | // Precipitation 397 | #define prec_icon_x 290 398 | #define prec_icon_y 349 399 | if (id(fc_prec).state == "None") { 400 | it.printf(prec_icon_x, prec_icon_y, id(font_icons_small), TextAlign::CENTER, "\U000F054B");} 401 | if (id(fc_prec).state == "Hail") { 402 | it.printf(prec_icon_x, prec_icon_y, id(font_icons_small), TextAlign::CENTER, "\U000F0592");} 403 | if (id(fc_prec).state == "Rain") { 404 | it.printf(prec_icon_x, prec_icon_y, id(font_icons_small), TextAlign::CENTER, "\U000F0597");} 405 | if (id(fc_prec).state == "Snow") { 406 | it.printf(prec_icon_x, prec_icon_y, id(font_icons_small), TextAlign::CENTER, "\U000F0F36");} 407 | 408 | it.printf(409, prec_icon_y, id(font_value), TextAlign::CENTER, "%3.0f %%", id(prec_perc).state); 409 | 410 | // Hardware Sensors 411 | it.printf(342, 679, id(font_value_small), TextAlign::CENTER, "%1.0f%% %.1f°C", id(hw_cpu_load).state, id(hw_cpu_temp).state ); 412 | it.filled_rectangle(36, 710, id(hw_cpu_load).state*4.67, 16); 413 | 414 | it.printf(342, 779, id(font_value_small), TextAlign::CENTER, "%1.0f%% %.1f°C", id(hw_gpu_load).state, id(hw_gpu_temp).state ); 415 | it.filled_rectangle(36, 810, id(hw_gpu_load).state*4.67, 16); 416 | 417 | it.printf(342, 879, id(font_value_small), TextAlign::CENTER, "%1.0f%% %.1fGB", id(hw_mem_load).state, id(hw_mem_usage).state ); 418 | it.filled_rectangle(36, 910, id(hw_mem_load).state*4.67, 16); 419 | 420 | - id: page2 421 | lambda: |- 422 | #define xres 540 423 | #define yres 960 424 | 425 | it.image(0, 0, id(page2_bg_image)); 426 | 427 | it.strftime(xres/2, 10, id(font_date), TextAlign::TOP_CENTER, "%A %b %d ", id(ntp).now()); 428 | it.strftime(xres/2, 80, id(font_time), TextAlign::TOP_CENTER, "%I:%M %p ", id(ntp).now()); 429 | 430 | // Stock 1 431 | it.print(272, 251, id(font_stock_title), id(white), TextAlign::CENTER, "XEQT" ); 432 | it.printf(262, 336, id(font_stock_price), TextAlign::CENTER_RIGHT, "%1.2f", id(stock1_price).state ); 433 | it.printf(376, 318, id(font_stock_highlow), TextAlign::CENTER_LEFT, "%1.2f", id(stock1_high).state ); 434 | it.printf(376, 355, id(font_stock_highlow), TextAlign::CENTER_LEFT, "%1.2f", id(stock1_low).state ); 435 | 436 | #define stock1_trending_x 305 437 | #define stock1_trending_y 336 438 | if (id(stock1_trending).state == "up") { 439 | it.printf(stock1_trending_x, stock1_trending_y, id(font_icons_small), TextAlign::CENTER, "\U000F0535");} 440 | if (id(stock1_trending).state == "neutral") { 441 | it.printf(stock1_trending_x, stock1_trending_y, id(font_icons_small), TextAlign::CENTER, "\U000F0534");} 442 | if (id(stock1_trending).state == "down") { 443 | it.printf(stock1_trending_x, stock1_trending_y, id(font_icons_small), TextAlign::CENTER, "\U000F0533");} 444 | 445 | // Stock 2 446 | it.print(272, 457, id(font_stock_title), id(white), TextAlign::CENTER, "S+P 500" ); 447 | it.printf(262, 543, id(font_stock_price), TextAlign::CENTER_RIGHT, "%1.2f", id(stock2_price).state ); 448 | it.printf(376, 525, id(font_stock_highlow), TextAlign::CENTER_LEFT, "%1.2f", id(stock2_high).state ); 449 | it.printf(376, 562, id(font_stock_highlow), TextAlign::CENTER_LEFT, "%1.2f", id(stock2_low).state ); 450 | 451 | #define stock2_trending_x 305 452 | #define stock2_trending_y 543 453 | if (id(stock2_trending).state == "up") { 454 | it.printf(stock2_trending_x, stock2_trending_y, id(font_icons_small), TextAlign::CENTER, "\U000F0535");} 455 | if (id(stock2_trending).state == "neutral") { 456 | it.printf(stock2_trending_x, stock2_trending_y, id(font_icons_small), TextAlign::CENTER, "\U000F0534");} 457 | if (id(stock2_trending).state == "down") { 458 | it.printf(stock2_trending_x, stock2_trending_y, id(font_icons_small), TextAlign::CENTER, "\U000F0533");} 459 | 460 | // Stock 3 461 | it.print(272, 663, id(font_stock_title), id(white), TextAlign::CENTER, "S+P TSX" ); 462 | it.printf(262, 752, id(font_stock_price_small), TextAlign::CENTER_RIGHT, "%1.2f", id(stock3_price).state ); 463 | it.printf(376, 734, id(font_stock_highlow), TextAlign::CENTER_LEFT, "%1.2f", id(stock3_high).state ); 464 | it.printf(376, 770, id(font_stock_highlow), TextAlign::CENTER_LEFT, "%1.2f", id(stock3_low).state ); 465 | 466 | #define stock3_trending_x 305 467 | #define stock3_trending_y 752 468 | if (id(stock3_trending).state == "up") { 469 | it.printf(stock3_trending_x, stock3_trending_y, id(font_icons_small), TextAlign::CENTER, "\U000F0535");} 470 | if (id(stock3_trending).state == "neutral") { 471 | it.printf(stock3_trending_x, stock3_trending_y, id(font_icons_small), TextAlign::CENTER, "\U000F0534");} 472 | if (id(stock3_trending).state == "down") { 473 | it.printf(stock3_trending_x, stock3_trending_y, id(font_icons_small), TextAlign::CENTER, "\U000F0533");} 474 | 475 | // Currency 476 | it.print(272, 865, id(font_stock_title), id(white), TextAlign::CENTER, "USD CAD" ); 477 | it.printf(xres/2, 912, id(font_stock_highlow), TextAlign::CENTER, "%1.3f", id(currency_USDCAD).state ); 478 | -------------------------------------------------------------------------------- /ESPHome/fonts/GoogleSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidz-yt/eink-desk-display/cfbd7326bcd3fb06e84b11c7e59a10d1cce414ca/ESPHome/fonts/GoogleSans-Bold.ttf -------------------------------------------------------------------------------- /ESPHome/fonts/GoogleSans-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidz-yt/eink-desk-display/cfbd7326bcd3fb06e84b11c7e59a10d1cce414ca/ESPHome/fonts/GoogleSans-Medium.ttf -------------------------------------------------------------------------------- /ESPHome/fonts/README.md: -------------------------------------------------------------------------------- 1 | Required fonts 2 | 3 | Refer to https://pictogrammers.com/library/mdi/ for the latest version of the Material Design Icon. 4 | -------------------------------------------------------------------------------- /ESPHome/fonts/materialdesignicons-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidz-yt/eink-desk-display/cfbd7326bcd3fb06e84b11c7e59a10d1cce414ca/ESPHome/fonts/materialdesignicons-webfont.ttf -------------------------------------------------------------------------------- /ESPHome/images/HDMI1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidz-yt/eink-desk-display/cfbd7326bcd3fb06e84b11c7e59a10d1cce414ca/ESPHome/images/HDMI1.png -------------------------------------------------------------------------------- /ESPHome/images/HDMI2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidz-yt/eink-desk-display/cfbd7326bcd3fb06e84b11c7e59a10d1cce414ca/ESPHome/images/HDMI2.png -------------------------------------------------------------------------------- /ESPHome/images/HDMI3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidz-yt/eink-desk-display/cfbd7326bcd3fb06e84b11c7e59a10d1cce414ca/ESPHome/images/HDMI3.jpg -------------------------------------------------------------------------------- /ESPHome/images/HDMI3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidz-yt/eink-desk-display/cfbd7326bcd3fb06e84b11c7e59a10d1cce414ca/ESPHome/images/HDMI3.png -------------------------------------------------------------------------------- /ESPHome/images/HDMI4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidz-yt/eink-desk-display/cfbd7326bcd3fb06e84b11c7e59a10d1cce414ca/ESPHome/images/HDMI4.png -------------------------------------------------------------------------------- /ESPHome/images/Page2_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidz-yt/eink-desk-display/cfbd7326bcd3fb06e84b11c7e59a10d1cce414ca/ESPHome/images/Page2_bg.png -------------------------------------------------------------------------------- /ESPHome/images/README.md: -------------------------------------------------------------------------------- 1 | image graphics 2 | -------------------------------------------------------------------------------- /ESPHome/images/USB1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidz-yt/eink-desk-display/cfbd7326bcd3fb06e84b11c7e59a10d1cce414ca/ESPHome/images/USB1.png -------------------------------------------------------------------------------- /ESPHome/images/USB2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidz-yt/eink-desk-display/cfbd7326bcd3fb06e84b11c7e59a10d1cce414ca/ESPHome/images/USB2.png -------------------------------------------------------------------------------- /ESPHome/images/USB3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidz-yt/eink-desk-display/cfbd7326bcd3fb06e84b11c7e59a10d1cce414ca/ESPHome/images/USB3.png -------------------------------------------------------------------------------- /ESPHome/images/USB4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidz-yt/eink-desk-display/cfbd7326bcd3fb06e84b11c7e59a10d1cce414ca/ESPHome/images/USB4.png -------------------------------------------------------------------------------- /ESPHome/images/main_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidz-yt/eink-desk-display/cfbd7326bcd3fb06e84b11c7e59a10d1cce414ca/ESPHome/images/main_background.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # E-ink Desk Display 2 | ![](images/Eink_Display.jpg) 3 | I made this E-ink display for my computer desk setup as an Always On display to show me information such as the date, time, weather, HDMI settings, USB settings, and CPU/GPU/Memory temperature information. 4 | 5 | You can see a demonstration of the E-ink Display on YouTube: [The E-ink Desk Accessory.](https://youtu.be/d9forDotXkI) 6 | 7 | 8 | # Home Assistant Requirement 9 | This E-ink display has ESPHome installed and retrieves all live data (timesync, weather, etc..) directly from the Home Assistant (HA) server. Only code for the E-ink display (ESPHome) has been provided. The following integrations/services were used on HA for their respective data: 10 | - ESPHome (HA Integration) 11 | - OpenWeather (HA Integration) 12 | - Yahoo Finance (HACS Component) 13 | - Libre Hardware Monitor (Software on PC) 14 | - [My DIY Macropad](https://github.com/davidz-yt/desk-controller) 15 | 16 | ![](images/Home_Assistant_Server.jpg) 17 | 18 | 19 | # Hardware 20 | - LilyGo T5 4.7" Epaper ([Old Version Used](https://www.lilygo.cc/en-ca/products/t5-4-7-inch-e-paper), NOT New V2.3) 21 | - Remixed 3D Printed Case based on this [3D Model](https://www.printables.com/model/272575-case-for-lilygo-t5-47-inch-e-paper) 22 | 23 | 24 | # Credits and additional reading 25 | I referred to the following (and more) to get this working. 26 | 27 | https://github.com/esphome/feature-requests/issues/1109 28 | https://www.reddit.com/r/homeassistant/comments/xt5vdj/the_lilygo_t5_bandwagon_fridge_display/ 29 | https://www.reddit.com/r/homeassistant/comments/rm71z4/lilygo_t5_epaper_display_now_using_esphome/ 30 | -------------------------------------------------------------------------------- /images/Eink_Display.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidz-yt/eink-desk-display/cfbd7326bcd3fb06e84b11c7e59a10d1cce414ca/images/Eink_Display.jpg -------------------------------------------------------------------------------- /images/Home_Assistant_Server.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidz-yt/eink-desk-display/cfbd7326bcd3fb06e84b11c7e59a10d1cce414ca/images/Home_Assistant_Server.jpg -------------------------------------------------------------------------------- /images/README.md: -------------------------------------------------------------------------------- 1 | Various image files for reference purposes. 2 | --------------------------------------------------------------------------------