Het is niet overdreven om te stellen dat je in 2022 prima elektronische prototypes van fancy gadgets in een paar uur kunt realiseren en zo is ook dit leuke apparaatje ontstaan. Uitgerust met vier 8×8 led matrix modules die in serie verbonden zijn met een Wemos D1mini, een leuke 3D geprinte behuizing en wat handige ESPhome-gebaseerde software is dit 32×8 led matrix display een toonbeeld van neo-traditionele functionaliteit.
Het is geen geheim dat ik sinds het uitkomen van de eerste rode 5mm led in 1975 gefascineerd ben door de vele toepassingsmogelijkheden ervan. Rode dot-matrix displays zijn daarom al tientallen jaren geen nieuws meer voor me, maar daar zelf even iets mee knutselen heeft nog nooit iets aan aantrekkingskracht ingeboet. Ik heb een speciale projectdoos met allerlei in de loop der jaren verzamelde leds, led displays en op leds gebaseerde halfproducten, waaronder een voorraadje MAX7219 8*8 Dot Matrix LED Display Modules. Dit zijn kleine (3,2 x 3,2cm) modules met 8×8 leds, die worden aangestuurd door een speciaal IC genaamd MAX7219. Dit IC wordt zelf weer aangestuurd door een microprocessor of microcontroller.
Het project bestaat uit de volgende onderdelen:
- Vier 8×8 led matrix modules met MAX7219 driver
- Een Wemos D1mini met ESP32 microcontroller
- Een 3D geprinte behuizing
- Een USB chassisdeel voor de stroomverzorging van D1mini en led displays
- Software in ESPhome
De software is als volgt geworden:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | # MAX7219 matrix clock 4 x 64 pixels # ORANJE / GRIJS esphome: name: esphome-web-180e68 esp8266: board: d1_mini restore_from_flash: true # Enable logging logger: level: debug # Enable Home Assistant API api: ota: wifi: ssid: !secret wifi_ssid password: !secret wifi_password # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Esphome-Web-180E68" password: !secret wifi_ap_password captive_portal: globals: - id: shpm_internal type: float restore_value: yes initial_value: "0.0000" sensor: - platform: homeassistant name: "Passanten" id: passanten entity_id: counter.passanten_voorzijde accuracy_decimals: 0 internal: true - platform: homeassistant name: "Gas verbruikt totaal" id: gas_totaal entity_id: sensor.totaal_gasconsumptie internal: true accuracy_decimals: 3 unit_of_measurement: "m³" - platform: homeassistant name: "Gas verbruikt vandaag" id: gas_vandaag entity_id: sensor.daily_gas_usage internal: true accuracy_decimals: 3 unit_of_measurement: "m³" - platform: homeassistant name: "Zonnecellen energieproductie" id: zonnecellen_productie entity_id: sensor.huidige_elektriciteitsproductie internal: true accuracy_decimals: 3 - platform: homeassistant name: "Net energieconsumptie" id: afname_energienet entity_id: sensor.huidige_elektriciteitsconsumptie internal: true accuracy_decimals: 3 - platform: template name: "Netto productie" id: netto_productie internal: true accuracy_decimals: 3 lambda: |- if (id(zonnecellen_productie).state > 0) { return id(zonnecellen_productie).state; } else { return 0 - id(afname_energienet).state; } - platform: homeassistant name: "SolarEdge productie" id: solaredge_productie entity_id: sensor.solaredge_current_power internal: true accuracy_decimals: 4 - platform: homeassistant name: "SolarEdge productie vandaag" id: solaredge_productie_vandaag entity_id: sensor.solaredge_energy_today internal: true accuracy_decimals: 2 - platform: homeassistant name: "Dremel 3D45 Print Voortgang" id: dremel_3d45_progress entity_id: sensor.dremel_3d45_progress internal: true accuracy_decimals: 1 unit_of_measurement: "%" - platform: template name: "SolarEdge Historical Maximum Power Output" id: solaredge_historical_power_max unit_of_measurement: "W" accuracy_decimals: 4 lambda: |- if (id(solaredge_productie).state > id(shpm_internal)) { id(shpm_internal) = id(solaredge_productie).state; } return id(shpm_internal); - platform: homeassistant name: "Gaskosten vandaag" id: kosten_gas_vandaag entity_id: sensor.gasverbruikskosten_vandaag unit_of_measurement: "€" accuracy_decimals: 2 internal: true - platform: homeassistant name: "Dremel 3D45 Resterend" id: dremel_3d45_resterend entity_id: sensor.dremel_3d45_remaining_print_time_human_readable internal: true # https://www.energievergelijk.nl/energieprijzen spi: clk_pin: D0 mosi_pin: D1 # pixelmix.ttf toont prima in 6 punten, maar enkele cijfers vertonen 'gaten', 8 punten is 'native' # monobit.ttf werkt niet bij 6 punten # slkscr.ttf toont okee bij 8 punten maar heeft een rare horizontale spatiëring font: # Mooie volle letters voor klokweergave - file: "fonts/eight-bit-dragon.ttf" id: dragon_font size: 8 glyphs: '.,:0123456789abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ' # Nette 3x6 font voor kleine teksten en getallen - file: "fonts/uncle_lee3x6.ttf" id: uncle_lee_font size: 11 glyphs: '€-.,:%0123456789abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ' # Nette 3x6 font voor kleine teksten en getallen - file: "fonts/Toy.ttf" id: toy_font size: 16 glyphs: '€-.,:0123456789abcdefghijklmnopqrstuvwxyz' time: - platform: sntp id: ntptime display: - platform: max7219digit id: multidisplay cs_pin: D2 num_chips: 4 intensity: 5 update_interval: 500ms lambda: |- //it.strftime(16, 4, id(dragon_font), TextAlign::CENTER, "%H:%M", id(ntptime).now()); //it.printf(33, 4, id(uncle_lee_font), TextAlign::CENTER_RIGHT, "%.1f W", id(solaredge_productie).state); it.printf(33, 4, id(uncle_lee_font), TextAlign::CENTER_RIGHT, "%.1f kWh", id(solaredge_productie_vandaag).state); // it.printf(33, 2, id(toy_font), TextAlign::CENTER_RIGHT, "€%.2f", id(kosten_gas_vandaag).state); //it.printf(33, 4, id(uncle_lee_font), TextAlign::CENTER_RIGHT, "3D %.1f%%", id(dremel_3d45_progress).state); //it.printf(it.get_width(), 4, id(uncle_lee_font), TextAlign::CENTER_RIGHT, "%s", id(dremel_3d45_resterend).state); |