Een dun e-paperscherm kan niet alleen tekst, maar ook (in grijstinten) afbeeldingen weergeven. Prima geschikt dus voor het upcyclen van een oud houten fotolijstje !
Doel van dit project
Een leuke toepassing van een 7,5 inch e-paperscherm is om het samen met een Pi (Zero) in een fotolijstje te monteren, zodat het iedere dag een ander plaatje laat zien.
Digitale fotolijstjes lijken alweer passé, maar houten fotolijstjes zijn nooit weggeweest. Die zien er ook veel sfeervoller uit en de keuze is enorm. Het nadeel is alleen dat je voor elke foto een apart lijstje nodig hebt, én genoeg ruimte om ze allemaal neer te zetten of op te hangen.
Met een goedkoop e-paperscherm en een Raspberry Pi (Zero) maak je in een handomdraai een uniek digitaal fotolijstje dat er volstrekt niet digitaal uitziet!
Wat heb je nodig:
- houten fotolijstje (13×18)
- Ikea Bås vitrinekistje (13×18)
- 3 kleine hoekijzertjes
- 7.5inch HD e-Paper HAT van Waveshare
- Raspberry Pi (Zero W)
- snufje Python
- klontje Cron
Hoe doe je het:
Zorg dat je een nieuwe Pi-OS in de light- of desktop-versie op een microSD-kaartje hebt staan, met ssh geactiveerd en wpa_supplicant.conf bijgewerkt met de juiste wifi-gegevens. Sluit het scherm aan op de GPIO van de Raspberry Pi (Zero W), met de meegeleverde jumperkabels of rechtstreeks met de pinheader (zie de online-handleiding). Maak via ssh contact met de Pi vanaf een andere computer.
Download en installeer nu de Waveshare-software en democode van Github. In de directory Examples kun je vervolgens het voorbeeld Python-bestand vinden. Test daarmee het scherm.
De plaatjes
Het scherm heeft naast voordelen, goedkoop, superplat, verbruikt geen stroom (behalve een beetje bij het wisselen van de beeldinhoud), ook nadelen: de weergave is alleen in zwart-wit en grijstinten. Daarom is niet iedere foto of afbeelding geschikt. Het origineel moet namelijk een goed contrast hebben. Het beste werken tekeningen en cartoons.
Het voorbereiden van de plaatjes is niet moeilijk. De software van Waveshare zorgt automatisch voor het renderen. Je kunt dus gewoon plaatjes in kleur of grijswaarden gebruiken (.jpg). Maak de grootte 800 x 480 pixels (de resolutie van het scherm).
Als thema kozen we voor plaatjes van bekende games (promo-art en fan-art). Het resultaat is een artistieke fotogalerij die nooit saai wordt.
Code
Voor de Python-code kun je twee kanten op gaan: ofwel je maakt een script dat continu draait en alle plaatjes na elkaar laat zien in een oneindige lus, of je maakt een script dat eenmalig de gewenste afbeelding op het scherm zet en zichzelf vervolgens afsluit. Om het makkelijk en flexibel te houden, hebben we gekozen voor de tweede optie.
Omdat onze Waveshare-driver op het moment alleen Python 2.7 ondersteunt gebruiken we dus de oude Python-versie. De naam van het afbeeldingsbestand komt als argument achter het commando te staan:
python showpic.py pic01.jpg
#!/usr/bin/python import sys from PIL import Image from waveshare_epd import epd7in5_V2 epd = epd7in5_V2.EPD() epd.init() epd.Clear() directory = "/home/pi/Picshow/Pics/" filename = sys.argv[1] file = directory + filename picture = Image.open(file) epd.display(epd.getbuffer(picture))
Cron voor de tijdaansturing
We willen het plaatje iedere dag van de maand wisselen. Dus op de eerste van iedere maand begint de cyclus opnieuw.
In de cron van user Pi zet ik voor ieder van de in totaal 31 scripts een aparte regel:
0 0 01 * * python Picshow/showpic.py pic01.jpg
0 0 02 * * python Picshow/showpic.py pic02.jpg
0 0 03 * * python Picshow/showpic.py pic03.jpg
....
0 0 31 * * python Picshow/showpic.py pic_31.jpg
Dit betekent: start op minuut 0 van uur 0 van dag 1 (2, 3, etc) het commando ‘python …. ‘. Dus precies om twaalf uur ’s nachts wisselt het beeld. Je kunt daar natuurlijk ook elk ander tijdstip van maken.
Het voordeel van deze opzet is dat cron zelf de juiste dag en tijd in de gaten houdt, zolang er maar internetverbinding is voor de tijdsychronisatie (UTP), of de Pi voorzien is van een klokmodule (RTC).
Montage
Als de code getest is, kun je het fotolijstje in elkaar zetten. Haal de achterplaat van het lijstje af en verwijder de steun die eraan vast zit. Maak de flexkabel naar het driverboardje van het scherm los, zodat het scherm los is (zoals het in de doos zat). Bevestig de driverboard en het kleine board aan de buitenkant van de achterplaat (zie foto) en doe hetzelfde met de Raspberry Pi.
Trek de beschermfolie van het scherm af (via het gekleurde hoekje) en leg het scherm op de glasplaat in het lijstje. Maak met strookjes dun karton een soort passepartout om het scherm heen, zodat het precies in het midden zit en de kleine flexkabel aan de onderkant naar buiten kan uitsteken. Plak die strookjes met plakband aan elkaar zodat ze niet verschuiven.
Leg nu de achterplaat terug in het lijstje, waarschijnlijk moet je er nog een uitsparing in maken om genoeg ruimte te hebben voor het flexkabeltje. De achterplaat hoeft niet meer met de standaard buigklemmetjes vastgezet te worden.
Verbind het kleine flexkabeltje met de rest en koppel een usbkabel aan de Pi, die lang genoeg is.
Ikea-hack
Als laatste kan het vitrinekastje van de Ikea gemonteerd worden. Haal daar het kartonnen achterplaatje uit en leg het met het glas naar boven op de achterplaat van het fotolijstje. Via de gleuf die in het hout van het kastje zit kun je de usb-kabel naar buiten leiden, eventueel de gleuf groter maken.
Zet het kastje met de ijzeren hoekjes aan drie kanten vast aan de houten rand van het fotolijstje. Gebruik het vierde hoekje eventueel als steuntje aan de onderkant van het kastje zodat het in de juiste stand staat.
Extra toepassingen
De Pi heeft maar 1 keer om middernacht iets te doen, dus je zou hem de rest van de tijd voor heel andere dingen kunnen gebruiken. Als je in het fotolijstje een Pi 4 zet kun je het lijstje naast de tv zetten, aansluiten met hdmi en er een (verborgen) mediacenter van maken. Je kunt het digitale fotolijstje gebruiken voor alles waarvoor je genoeg hebt aan een headless Raspberry Pi (Zero): netwerkmonitor, NAS of fileserver, webserver, weerstation, basisstation voor diverse sensoren, MQTT-broker, etc.