Display voor het tonen van tijd en meldingen

Voor de handige knutselaar is er met een paar onderdelen en wat materialen uit de knipselbak eenvoudig een praktisch display te realiseren dat internettijd en boodschappen kan tonen. Met een beetje moeite een parel voor in de woonkamer of keuken; met iets minder moeite een uitbreiding van de werkplaatsuitrusting of hobbykamer.

Het display dat ik in dit artikel beschrijf bestaat uit twee aan te schaffen onderdelen (drie, als je de 5 volt netvoeding meerekent) en wat restmaterialen zoals een vel A4 papier. Als je een 3D printer tot je beschikking hebt kun je die ook gebruiken. In dit project maak ik gebruik van ESPhome, een raamwerk om ESP8266 en ESP32 microcontrollers te besturen met eenvoudige configuratiebestanden en (zeer) weinig programmeerwerk, bedoeld om apparaten van afstand ‘over the air’ te besturen en te updaten:

De twee belangrijkste onderdelen zijn de led matrix, die bestaat uit 256 in serie geschakelde RGB leds van het type WS2812 op een flexibel paneeltje verlijmd (ca. € 12,50), en het Wemos D1 mini microcontrollerbordje  (ca. € 2,50). De led matrix heeft drie aansluitingen: +5V, GND en een data ingang. GND en de data ingang worden met de microcontroller verbonden aan respectievelijk GND en D2/GPIO4. De +5V wordt verbonden met de 5V netvoeding. De +5V van de D1 mini wordt hier ook mee verbonden. Op deze wijze trekken de led matrix en de microcontroller los van elkaar stroom en kan de microcontroller de led matrix aansturen, zonder dat de microcontroller de volledige stroom van de leds moet ‘ophoesten’.

De ESP8266 microcontroller is al sinds jaar en dag het meest praktische onderdeel om sensoren mee aan het internet te knopen: laag stroomverbruik, ingebouwde wifi en meer dan uitstekende ondersteuning van de open source community. Via de Arduino ontwikkelstack te programmeren. ESPhome, een initiatief van ontwikkelaar Otto Winter en tegenwoordig in handen van Nabu Casa, heeft daaroverheen een magische schil gelegd die het mogelijk maakt om kale ESP8266’s via de webbrowser en een kabeltje te voorzien van ESPhome firmware en vanaf dan alle nieuwe functies ‘over the air’ te versturen. En die nieuwe functies maak je met ESPhome vanuit de browser, met YAML en wat C++ instructies en de gehele codeboom wordt voor je gegenereerd en als nieuwe firmware naar je ESP8266 ge-upload.

De led matrix bestaat uit WS2812 leds, die voorzien zijn van een seriele ingang en uitgang. De eerste led wordt aangesloten op de microcontroller en ontvangt de instructie, die bestaat uit een lednummer en een kleur. De leds geven de instructies onderling door totdat de juiste led is bereikt.

Ik gebruik in ESPhome de volgende configuratie om de led matrix aan te sturen. In het eerste deel light wordt een lichtslang gedefinieerd die bestaat uit 256 WS2812 leds die de naam led_matrix krijgt. In het tweede deel display wordt een adresseerbare lichtkrant gedefinieerd die wordt gebaseerd op de lichtslang met de naam led_matrix en die als eigenschappen 8 x 32 pixels heeft. Met de pixel_mapper worden de x en y coordinaten omgerekend naar een serieel lednummer 0-255. Het display updatet iedere 45 ms, voldoende voor vloeiende animaties en lopende teksten. Zowel light als display erven eigenschappen en methoden van ESPhome, zoals lichteffecten en het kunnen tonen van tekst en beeld:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
light:
  - platform: neopixelbus
    variant: WS2812
    pin: GPIO4
    num_leds: 256
    type: GRB
    name: led_matrix
    id: led_light_32x8
 
display:
  - platform: addressable_light
    id: led_matrix_display
    addressable_light_id: led_light_32x8
    width: 32
    height: 8
    update_interval: 45ms
    pixel_mapper: |-
        if (y % 2 == 0) {
          return (y * 32) + x;
        }
        return (y * 32) + (31 - x);

Zelf heb ik eerst gebruik gemaakt van de led matrix, de microcontroller, een vel papier en wat plakband om het geheel wat structurele stevigheid te geven. De code hierboven definieert het display als een basis van adresseerbare leds en zorgt ervoor dat iedere pixel met een x en y coordinaat kan worden aangesproken. Dat is echter niet waar ESPhome ophoudt: het display kan beschreven worden met lijnstukken, tekst, afbeeldingen, animaties en grafieken, uiteraard in alle denkbare kleuren. Met lambda kan C++ (Arduino) worden ‘gesproken’:

1
2
3
4
5
6
7
8
9
10
11
12
13
font:
  - id: pixel_font
    file: "fonts/pixelmix.ttf"
    size: 8
 
time:
  - platform: sntp
    id: rtctime
 
display:
    ...
    lambda: |-
        it.strftime(16, 4, id(pixel_font), Color(0xFFFFFF), TextAlign::CENTER, "%H:%M", id(rtctime).now());

Nadat het geheel zich bewezen heeft wordt het tijd voor een wat steviger behuizing. Ik heb van thingiverse één van de vele ‘grids’ ge-3D-print en daaromheen met wat MDF restjes een doosje inelkaar gelijmd. Een laagje van (halfdoorzichtig) plastic verpakkingsmateriaal of een stukje wit perspex maakt het geheel af. De diffuser is ervoor om te zorgen dat er mooie kleuren zichtbaar worden; de grid is ervoor zodat er ondanks de diffuser onderscheidbare beeldpunten ontstaan. Note to self: als je gebruik maakt van superlijm, laat het geheel dan uitgebreid luchten voordat je het kastje sluit om het zichtbaar maken van vingerafdrukken op het perspex met de cyano-acrylaat te voorkomen.

Ik heb altijd een paar stukken MDF van 4 en 6 millimeter op voorraad: het materiaal is erg eenvoudig te verwerken met zaag en schuurpapier en verlijmt tot solide voorwerpen met de bekende witte houtlijm van Bison (bouwmarkt) of Pattex (Action). Het schuren van MDF levert wel veel stof op dus draag een stofmasker en stofzuig de werkplek na het schuren grondig. Ik heb de maten proefondervindelijk vastgesteld volgens het volgende procédé:

  • Diffuser en bodem (achterkant) zelfde maat als het grid
  • Lange wand ‘een paar centimeter’ hoog en even lang als diffuser en bodem
  • Zijkanten even hoog als de lang wand en zo breed als de diffuser en bodem, plus twee keer de plaatdikte

Alles verlijmen met houtlijm, fixeren met plakband en paar uurtjes laten drogen. Met wat blokjes MDF aan de binnenkant het grid en diffuser vlak met de voorkant laten lopen en het geheel grondig schuren met een schuurblokje, korrel 120 of fijner. Met goed schuren, houtplamuur-uit-een-tube, spuitplamuur en spuitverf krijg je een mooie gladde afwerking.

ESPhome heeft prachtige voorzieningen voor het gebruik van sensorinformatie van andere bronnen, zoals Home Assistant, en ondersteunt het gebruik van True Type fonts. Met een timer blader ik om de 30 seconden tussen pagina’s die de (internet-)tijd, de buitentemperatuur van het Netatmo weerstation, informatie over de afvalophaaldiensten, het weerbericht (in tekst) van het KNMI en headlines van de NOS tonen.

Plaats een reactie