Net als de actuele weerinformatie is het handig om met één druk op de knop en in één oogopslag het laatste nieuws te kunnen zien. De online NOS-Teletekst is daar de aangewezen bron voor.
In het verleden hadden we al het project Teletekst 101 dat continue het laatste nieuws (alleen pagina 101) op een heel klein e-paper display van Waveshare liet zien (zie daar).
Nieuwe uitdaging
Maar zou Teletekstpagina 101 ook op een mini-oled display met 64×128 pixels passen? Dat werd een nieuwe uitdaging. Op het kleine e-paper display van Waveshare moest ik al het kleinst mogelijke font gebruiken om alle negen regels van pagina 101 er op te krijgen.
Ongelooflijk klein
Het mini-oled display ssd1306 (64×128 pixels) is zó klein, dat het onvoorstelbaar is dat daar een teletekstpagina op zou passen en nog leesbaar zou zijn ook.
Maar de voordelen van het oled-scherm zijn groots: het heeft een helder wit, scherp beeld en het is zeer gemakkelijk aan te sturen met de Luma.OLED drivers en Python.
Nog kleiner
Met het standaardfont en minimale regelafstand lukt het niet om de (toch al korte) regels van NOS-Teletekst pagina 101 op het scherm te krijgen. Alleen de helft van iedere regel past op een schermregel. En dan nog alleen 8 van de 9 regels…
We hebben dus een kleiner font nodig. Het truetypefont tiny.ttf op grootte 7 misschien? Een leuk font maar niet tiny genoeg, zeker niet als de hele regel erop moet.
De volgende kandidaat is DejaVuSans.ttf. Dat ziet er op grootte 7 nog net leesbaar uit en laat de volledige regels zien. Zou het er nog beter uit zien met de condensed-versie (dejavu-sans.condensed) ? Maar nee, het piggelmee-effect treedt op: beter bestaat niet.
Onder de loep
Omdat de tekst op het scherm superklein is, kun je hem bijna alleen lezen met een loep. Toevallig is het Mini-weerstation al met hetzelfde scherm en met een vergrootglas uitgerust. Dus kon de Teletekst-101 pagina in dat project meteen ook een plaatsje krijgen onder een eigen knop. Overigens werd Teletekst op 1 april 1980 in Nederland geïntroduceerd, dus qua nostalgie past het heel goed bij een ‘nostalgisch’ design zoals van het mini-weerstation.
Die vervelende trema’s
Sommige regels passen maar net aan op het display, en de in NL veelgebruikte ï en ë maken met hun html-codes Ï en ë de regel al helemaal te lang. Maar dat was uiteindelijk simpel op te lossen, door in het voortraject deze html-code te vervangen door de normale tekens. De aangewezen tool hiervoor bleek recode te zijn:
sudo apt install recode cat /run/user/1000/tt101ext.txt | recode HTML_4.0 > /run/user/1000/tt101.txt
Code
Om het voor mezelf makkelijk en overzichtelijk te houden bestaat de code net als die van het originele Teletekst 101-project uit enkele bash-scripts en een Python-script om de tekst op het scherm te zetten. De tijdelijke tekstbestanden (.txt), die de verschillende stappen van de voorbewerking tijdelijk opslaan, staan in een filesystem in het RAM-geheugen dat door Pi-OS al automatisch aangemaakt is (/run/user/1000/).
Debuggen
Een aantal problemen zijn altijd terug te voeren op ‘no permission’ (dus: verkeerde rechten), slordige typfouten en fouten in de syntaxis. In dit geval kwamen daar nog problemen met de weergave op het display bij. Dat waren er drie:
- html-code voor trema’s (bv: ë), zie boven,
- getallen in de tekst
- te weinig regels
In de gevallen 1 en 3 bleef het display leeg en gaf de code een error op de commandline. In geval 2 werd alleen de betreffende regel(s) niet weergegeven.
\n
Oplossing voor #3: in het bash-script tt101down.sh , dat de html-brontekst van teletekstpagina 101 downloadt, worden daarom meteen 3 dummy-regels toegevoegd voor het geval er te weinig nieuwsregels zouden zijn. Ik heb printf gebruikt, omdat dat beter overweg zou kunnen met de regeleindecode \n dan echo.
printf '\n<span class="cyan "> . </span>\n<span class="cyan "> . </span>\n<span class="cyan "> . </span>' >> /run/user/1000/tt101down.txt
Het eventuele teveel aan regels, het mogen er niet meer, maar dus ook niet minder dan 8 zijn (standaard voor pagina 101 is 9), wordt in het volgende bash-script (tt101ext.sh) afgeknipt met awk :
awk 'FNR <=8'
Drukknop
Het begint met het bash-script voor de drukknop dat via de cron van root gestart wordt. Dit script activeert op zijn beurt het bash-startscript dat twee andere bash-scripts en het Python-script aantikt: de eerste voor het downloaden van de betreffende html-pagina van teletekst, en de tweede voor het fatsoeneren van de tekst, die dan door Python op het scherm getoverd wordt. Het experimenteerboard heeft nog genoeg ruimte voor uitbreiding, bv een sensor voor de binnentemperatuur.