Mini-teletekst

      Geen reacties op Mini-teletekst

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

weerstation3_4

Het mini-weerstation met het oled-schermpje van 0,9 inch op de bodem van het kastje onder een vergrootglas.

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

 

TT101_reloaded

In de bovenste regel duwt de html-code Ï voor de i met een trema  in het woord ‘beïnvloedde’ het laatste woord buiten beeld.

teletekst 101

NOS-Teletekst pagina 101. Dankzij recode is de tekst bevrijd van html-opmaakcode, zoals voor letters met een trema.

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:

  1. html-code voor trema’s (bv: ë),  zie boven,
  2. getallen in de tekst
  3. 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.

weerstation3_knoppen

Het mini-weerstation werd al snel uitgebreid met drukknoppen aan de achterkant voor het oproepen van de 2 schermen met weerdata. De derde knop is er bijgezet voor Teletekst p.101. (De knop bij de kabel is voor de shutdown.)