├── 3D ├── eink_Front.stl ├── eink_esp.stl ├── eink_rahmen.stl └── eink_ruecken.stl ├── Aufmacher_quer.JPG ├── README.md ├── Schaltplan └── epaper.png └── YAML-Musterdatei └── epaper.yaml /3D/eink_Front.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MakeMagazinDE/e-Ink-Display/68146749d0c2fb8fec6a414f34af70bf6bc4deb5/3D/eink_Front.stl -------------------------------------------------------------------------------- /3D/eink_esp.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MakeMagazinDE/e-Ink-Display/68146749d0c2fb8fec6a414f34af70bf6bc4deb5/3D/eink_esp.stl -------------------------------------------------------------------------------- /3D/eink_rahmen.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MakeMagazinDE/e-Ink-Display/68146749d0c2fb8fec6a414f34af70bf6bc4deb5/3D/eink_rahmen.stl -------------------------------------------------------------------------------- /3D/eink_ruecken.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MakeMagazinDE/e-Ink-Display/68146749d0c2fb8fec6a414f34af70bf6bc4deb5/3D/eink_ruecken.stl -------------------------------------------------------------------------------- /Aufmacher_quer.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MakeMagazinDE/e-Ink-Display/68146749d0c2fb8fec6a414f34af70bf6bc4deb5/Aufmacher_quer.JPG -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![GitHub Logo](http://www.heise.de/make/icons/make_logo.png) 2 | 3 | Maker Media GmbH 4 | *** 5 | 6 | # e-Ink-Display fürs Smarthome 7 | Display für Sensordaten von Home Assistant mit ESP32 und Rotary-Encoder 8 | 9 | ### Dieses e-Ink-Display zeigt Ihnen Sensordaten Ihres Smarthomes an ohne permanent zu leuchten. Mit dem Drehwähler schalten Sie zwischen mehreren Bildschirmseiten um. 10 | 11 | Ein passendes 3D-Druck-Gehäuse finden Sie im Ordner 3D. 12 | 13 | ![Picture](https://github.com/MakeMagazinDE/e-Ink-Display/blob/main/Aufmacher_quer.JPG) 14 | 15 | Den vollständigen Artikel mit der Bauanleitung gibt es in der **[Make-Ausgabe 3/23 ab Seite xx](https://www.heise.de/select/make/2023/2/2304606541489724045)** zu lesen. 16 | 17 | **[Hier](https://www.thingiverse.com/thing:4828448)** der Link zu passenden Knöpfen für den Rotary-Encoder. 18 | -------------------------------------------------------------------------------- /Schaltplan/epaper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MakeMagazinDE/e-Ink-Display/68146749d0c2fb8fec6a414f34af70bf6bc4deb5/Schaltplan/epaper.png -------------------------------------------------------------------------------- /YAML-Musterdatei/epaper.yaml: -------------------------------------------------------------------------------- 1 | esphome: 2 | name: epaper 3 | 4 | esp32: 5 | board: az-delivery-devkit-v4 6 | framework: 7 | type: arduino 8 | 9 | # Enable logging 10 | logger: 11 | 12 | # Enable Home Assistant API 13 | api: 14 | encryption: 15 | key: "Hier setzt ESPHome den Schlüssel automatisch ein" 16 | 17 | ota: 18 | password: "Hier setzt ESPHome das Passwort automatisch ein" 19 | 20 | wifi: 21 | ssid: !secret wifi_ssid 22 | password: !secret wifi_password 23 | 24 | # Enable fallback hotspot (captive portal) in case wifi connection fails 25 | ap: 26 | ssid: "Epaper Fallback Hotspot" 27 | password: "xxxxxxxxxxx" 28 | 29 | captive_portal: 30 | 31 | sensor: 32 | - platform: homeassistant 33 | id: flurtemp 34 | entity_id: sensor.temperature_humidity_sensor_2dd9_temperature 35 | internal: true 36 | 37 | - platform: homeassistant 38 | id: badtemp 39 | entity_id: sensor.temperature_humidity_sensor_d2e4_temperature 40 | internal: true 41 | 42 | - platform: homeassistant 43 | id: schlaftemp 44 | entity_id: sensor.temperature_humidity_sensor_d349_temperature 45 | internal: true 46 | 47 | - platform: homeassistant 48 | id: wohntemp 49 | entity_id: sensor.temperature_humidity_sensor_ba90_temperature 50 | internal: true 51 | 52 | - platform: homeassistant 53 | id: kuechetemp 54 | entity_id: sensor.temperature_humidity_sensor_0411_temperature 55 | internal: true 56 | 57 | - platform: homeassistant 58 | id: aussentemp 59 | entity_id: sensor.temperature_humidity_sensor_e628_temperature 60 | internal: true 61 | 62 | - platform: homeassistant 63 | id: flurfeucht 64 | entity_id: sensor.temperature_humidity_sensor_2dd9_humidity 65 | internal: true 66 | 67 | - platform: homeassistant 68 | id: badfeucht 69 | entity_id: sensor.temperature_humidity_sensor_d2e4_humidity 70 | internal: true 71 | 72 | - platform: homeassistant 73 | id: schlaffeucht 74 | entity_id: sensor.temperature_humidity_sensor_d349_humidity 75 | internal: true 76 | 77 | - platform: homeassistant 78 | id: wohnfeucht 79 | entity_id: sensor.temperature_humidity_sensor_ba90_humidity 80 | internal: true 81 | 82 | - platform: homeassistant 83 | id: kuechefeucht 84 | entity_id: sensor.temperature_humidity_sensor_0411_humidity 85 | internal: true 86 | 87 | - platform: homeassistant 88 | id: aussenfeucht 89 | entity_id: sensor.temperature_humidity_sensor_e628_humidity 90 | internal: true 91 | 92 | 93 | - platform: rotary_encoder 94 | name: "Rotary Encoder" 95 | pin_a: 17 96 | pin_b: 5 97 | min_value: 1 98 | max_value: 2 99 | publish_initial_value: True 100 | id: rotary 101 | 102 | on_clockwise: 103 | - display.page.show_next: my_display 104 | - component.update: my_display 105 | on_anticlockwise: 106 | - display.page.show_previous: my_display 107 | - component.update: my_display 108 | 109 | switch: 110 | - platform: gpio 111 | pin: 112 | number: 19 113 | inverted: true 114 | id: e_voltage 115 | 116 | time: 117 | - platform: homeassistant 118 | id: hass_time 119 | 120 | 121 | font: 122 | - file: 'fonts/Antenna-Bold.ttf' 123 | id: font1 124 | size: 36 125 | 126 | - file: 'fonts/Antenna-Bold.ttf' 127 | id: font2 128 | size: 24 129 | 130 | - file: 'fonts/Antenna-Bold.ttf' 131 | id: font3 132 | size: 48 133 | 134 | spi: 135 | clk_pin: 33 136 | mosi_pin: 32 137 | 138 | display: 139 | - platform: waveshare_epaper 140 | cs_pin: 25 141 | dc_pin: 26 142 | busy_pin: 14 143 | reset_pin: 27 144 | model: 7.50inv2 145 | update_interval: 60s 146 | reset_duration: 2ms 147 | id: my_display 148 | pages: 149 | - id: page1 150 | lambda: |- 151 | int breite = 799; 152 | int hoehe = 479; 153 | it.line(0, 0, breite, 0); 154 | it.line(breite, 0, breite, hoehe); 155 | it.line(breite, hoehe, 0, hoehe); 156 | it.line(0, hoehe, 0, 0); 157 | 158 | it.line(2*(breite/3),hoehe,2*(breite/3),0); 159 | it.line(breite/3,hoehe,breite/3,0); 160 | it.line(0,hoehe/3,breite,hoehe/3); 161 | it.line(0,2*(hoehe/3),breite,2*(hoehe/3)); 162 | 163 | it.printf(20,50, id(font1), "Temperatur"); 164 | 165 | it.strftime(552, 100, id(font3),TextAlign::BOTTOM_LEFT, "%H:%M", id(hass_time).now()); 166 | 167 | it.printf(20,(hoehe/3)+10, id(font2), "Wohnzimmer"); 168 | it.printf(20,(hoehe/3)+50, id(font3), "%4.1f", id(wohntemp).state); 169 | it.printf(165,(hoehe/3)+50, id(font3), "°C"); 170 | 171 | it.printf(breite/3+20,(hoehe/3)+10, id(font2), "Schlafzimmer"); 172 | it.printf(breite/3+20,(hoehe/3)+50, id(font3), "%4.1f", id(schlaftemp).state); 173 | it.printf(breite/3+165,(hoehe/3)+50, id(font3), "°C"); 174 | 175 | it.printf((breite/3)*2+20,(hoehe/3)+10, id(font2), "Kueche"); 176 | it.printf((breite/3)*2+20,(hoehe/3)+50, id(font3), "%4.1f", id(kuechetemp).state); 177 | it.printf((breite/3)*2+165,(hoehe/3)+50, id(font3), "°C"); 178 | 179 | it.printf(20,(hoehe/3)*2+10, id(font2), "Badezimmer"); 180 | it.printf(20,(hoehe/3)*2+50, id(font3), "%4.1f", id(badtemp).state); 181 | it.printf(165,(hoehe/3)*2+50, id(font3), "°C"); 182 | 183 | it.printf(breite/3+20,(hoehe/3)*2+10, id(font2), "Flur"); 184 | it.printf(breite/3+20,(hoehe/3)*2+50, id(font3), "%4.1f", id(flurtemp).state); 185 | it.printf(breite/3+165,(hoehe/3)*2+50, id(font3), "°C"); 186 | 187 | it.printf(breite/3*2+20,(hoehe/3)*2+10, id(font2), "Balkon"); 188 | it.printf(breite/3*2+20,(hoehe/3)*2+50, id(font3), "%4.1f", id(aussentemp).state); 189 | it.printf(breite/3*2+165,(hoehe/3)*2+50, id(font3), "°C"); 190 | 191 | - id: page2 192 | lambda: |- 193 | int breite = 799; 194 | int hoehe = 479; 195 | it.line(0, 0, breite, 0); 196 | it.line(breite, 0, breite, hoehe); 197 | it.line(breite, hoehe, 0, hoehe); 198 | it.line(0, hoehe, 0, 0); 199 | 200 | it.line(2*(breite/3),hoehe,2*(breite/3),0); 201 | it.line(breite/3,hoehe,breite/3,0); 202 | it.line(0,hoehe/3,breite,hoehe/3); 203 | it.line(0,2*(hoehe/3),breite,2*(hoehe/3)); 204 | 205 | it.printf(20,50, id(font1), "Feuchtigkeit"); 206 | 207 | it.strftime(552, 100, id(font3),TextAlign::BOTTOM_LEFT, "%H:%M", id(hass_time).now()); 208 | 209 | it.printf(20,(hoehe/3)+10, id(font2), "Wohnzimmer"); 210 | it.printf(20,(hoehe/3)+50, id(font3), "%4.1f", id(wohnfeucht).state); 211 | it.printf(165,(hoehe/3)+50, id(font2), "Prozent"); 212 | 213 | it.printf(breite/3+20,(hoehe/3)+10, id(font2), "Schlafzimmer"); 214 | it.printf(breite/3+20,(hoehe/3)+50, id(font3), "%4.1f", id(schlaffeucht).state); 215 | it.printf(breite/3+165,(hoehe/3)+50, id(font2), "Prozent"); 216 | 217 | it.printf((breite/3)*2+20,(hoehe/3)+10, id(font2), "Kueche"); 218 | it.printf((breite/3)*2+20,(hoehe/3)+50, id(font3), "%4.1f", id(kuechefeucht).state); 219 | it.printf((breite/3)*2+165,(hoehe/3)+50, id(font2), "Prozent"); 220 | 221 | it.printf(20,(hoehe/3)*2+10, id(font2), "Badezimmer"); 222 | it.printf(20,(hoehe/3)*2+50, id(font3), "%4.1f", id(badfeucht).state); 223 | it.printf(165,(hoehe/3)*2+50, id(font2), "Prozent"); 224 | 225 | it.printf(breite/3+20,(hoehe/3)*2+10, id(font2), "Flur"); 226 | it.printf(breite/3+20,(hoehe/3)*2+50, id(font3), "%4.1f", id(flurfeucht).state); 227 | it.printf(breite/3+165,(hoehe/3)*2+50, id(font2), "Prozent"); 228 | 229 | it.printf(breite/3*2+20,(hoehe/3)*2+10, id(font2), "Balkon"); 230 | it.printf(breite/3*2+20,(hoehe/3)*2+50, id(font3), "%4.1f", id(aussenfeucht).state); 231 | it.printf(breite/3*2+165,(hoehe/3)*2+50, id(font2), "Prozent"); 232 | 233 | 234 | --------------------------------------------------------------------------------