Nokia 5110 Display am Raspberry Pi, Beleuchtung und Anzeige drehen

Da ich den Raspberry meistens headless betreibe (also ohne Monitor nur übers Netzwerk) und das ganze auch noch in wechselnden Umgebungen (also ohne das ich so auf Anhieb wissen kann was er gerade für eine IP bekommen hat) steht vor jeder anderen Interaktion erstmal die Suche im jeweiligen Netzwerk an wo er denn gerade ist. Nicht cool. Es gibt zwar reichlich Displays für den Raspberry, nur sind die meistens entweder zu groß um noch handlich zu sein, zu teuer, zu stromfressend, nicht beleuchtet oder eine beliebige Kombination von Ausschlusskritierien. Auch nicht cool.
Abhilfe schafft da ein Hardware-Recycling Projekt das mir richtig gut gefällt. Ende der 90er Jahre des letzten Jahrtausends (...Ja. Ich wollte diesen Satz IMMER mal schreiben :) ) produzierte Nokia das 5110 mit einem für damalige Verhältnisse richtig modernem 84x48 Dot-Matrix LCD-Display. Vom heutigen Blickwinkel gesehen quasi als Anzeigeinstrument nicht vorhanden, aber im Kontext meines Anforderungsprofiles ideal. Die Displays sind beleuchtet, haben eine Stromaufnahme von so um die 300 Mikroampere, sind so etwa so in den Abmessungen des Raspberry-Gehäuses und gehen für fast nichts über die Theke. Genauer- Ich habe meine Displays für etwa 1,- Euro im zu erwartenden Online-Auktionshaus bekommen. Die Qualität direkt beim Hardware-Harvester mag allerdings schwankend sein, stabliere Ergebnisse sollten bei beispielsweise Adafruit zu bekommen sein. Der Hardware-Anschluss des Displays an sich, exklusive der Beleuchtung (!!!), ist simpel, bevor ich jetzt einfach wiedergebe was da eh schon steht verweise ich einfach mal auf Adafruit. Deren Python-Lib wird eh benötigt. Für echte Tieftaucher sei da zusätzlich noch auf das Datasheet von Phillips zum PCD8544 verwieden.
Die Beleuchtung ist, speziell im China-Fall, ein kleines bischen tricky. Zumindest auf meinen Boards sind 4 SMD-LEDs drauf die NICHT Teil des ursprünglichen Displays sind. Das macht die Frage nach deren Stromaufnahme zum Fall für das Multimeter (Dokumentation? China? Sonst noch was?). Ergo, die LEDs an 3,3V dranhängen und Stromaufnahme messen. Zur Not tut es der 3,3V Pin auf der GPIO-Leiste. Die Stromaufnahme sollte nicht über 8mA hinausgehen (unter Berücksichtigung der höchstzulässigen Summenstromaufnahme aller Pins und so.). Unter 8mA sind meine LEDs arg finster, mehr taugt nicht für mein Setup. Vereinfacht- ich habe einen 80 Ohm Widerstand in die Zuleitung der LEDs gelötet und gut ist. Damit kann ich die LEDs per GPIO ein- bzw. ausschalten. Wobei da noch eine Besonderheit besteht- je nachdem welches Display man erwischt werden die LEDs eingeschaltet indem man den GPIO auf LOW zieht, nicht auf HIGH. Nur so nebenbei mal erwähnt.
Bei der Montage des Displays hat sich mal wieder bewahrheitet das ich dringend die Gremlins aus dem Keller werfen sollte- NATÜRLICH habe ich es um 180Grad verdreht montiert. Und anstatt alles wieder auseinanderzulöten und abzumontieren habe ich die total günstige Gelegenheit genutzt um rauszufrickeln wie die Anzeige gedreht werden kann.
Bei der Adafruit Python-Lib wird eigentlich alles was auf dem Display dargestellt werden soll als BILD behandelt, das heist, es werden nicht einzelne Zeichen zum Display geschickt sondern es wird mittels der PIL (Python Imaging Lib) ein vorgegebener Text oder eine zeichenanweisung (klein, weil wegen -> draw) in ein Bild (-> daher steht im Beispielcode auch so oft *image* ;) umgewandelt, und das dann als Bit-Map zum Display geschickt. Hat man das dann erstmal verinnerlicht ist der Rest kein Problem. Einfach das erzeugte Bild drehen bevor es zum Display geschickt wird, fertig.

Backlight Code Beleuchtung

Der Beispielcode sind die Ergänzungen zum "Shapes" Beispiel von Adafruit

Python Datei lesen Datei einlesen

Flip Image Code Bild drehen

Das ganze dann noch in der /etc/rc.local eingebunden (passt fürs Backlight) und den IP-Anzeigekram beliebig zur Laufzeit wenn sich die IP ändert aufgerufen, fertig.