Gefällt dir dieser Artikel?

Raspberry Pi: RSS Reader für HD44780 Display

erschienen in der Kategorie Technik, am 12.10.2012
Schnatterente
English speaking people should have a look at this.


So, das ging jetzt schneller als ich selbst gedacht hätte. Ich habe eine erste Version meines RasPi RSS Readers fertiggestellt. Das Programm erlaubt die Anzeige von aktuellen RSS News Feeds auf einem HD44780 Display, das an die GPIO Pins eines Raspberry Pi angeschlossen ist.




(Video nachträglich eingefügt, am 17. Oktober 2012)

Mein Python Skript bietet bisher Folgendes:
  • Es können beliebig viele RSS Feeds angezeigt werden. Genauer gesagt werden nur die Überschriften der Feeds angezeigt. Den im Feed enthaltenen Text anzuzeigen wäre zwar technisch kein Problem, aber doch ein bisschen zu viel für das kleine Display.
  • Es funktioniert mit allen HD44780 Displays.
  • Es bringt die wichtigsten Einstellungen zur Darstellung der Feeds mit (Anzeigedauer eines Displayinhalts; maximale Anzahl der anzuzeigenden Einträge je Feed; die Möglichkeit nur Feeds des aktuellen Tages anzuzeigen; Wörter am Zeilenende trennen oder auf die nächste Zeile schieben; Zeitintervall, bis der Feed neu geladen werden soll).
  • Korrektur der wichtigsten Umlaute (mein Display kann die meisten Umlaute gar nicht darstellen und jene, die es gibt, sind an einer anderen Stelle des Zeichensatzes versteckt).


RasPi RSS Reader installieren

Wer sich auch ein Display an seinen Raspberry Pi gebastelt hat, kann das Programm benutzen. Damit es läuft müssen zuvor noch zwei Libraries installiert werden: RPi.GPIO und Feedparser. Für die Installation der Feedparser-Bibliothek werden noch die Python Setuptools benötigt. Die Installation kann wie folgt via Konsole oder SSH Zugang erfolgen (als root):
# mkdir rss
# cd rss

# wget http://raspberry-gpio-python.googlecode.com/files/python-rpi.gpio_0.3.1a-1_armhf.deb
# dpkg -i python-rpi.gpio_0.3.1a-1_armhf.deb

# wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c9.tar.gz
# tar -zxvf setuptools-0.6c9.tar.gz
# cd setuptools-0.6c9/
# python setup.py build
# python setup.py install
# cd ..

# wget http://feedparser.googlecode.com/files/feedparser-5.1.2.tar.gz
# tar -zxvf feedparser-5.1.2.tar.gz
# cd feedparser-5.1.2/
# python setup.py build
# python setup.py install
# cd ..

# wget http://www.schnatterente.net/code/raspberrypi/rssreader-1.3.py
# chmod +x rssreader-1.3.py

HINWEIS: Ich halte die Versionsnummern der RPi.GPIO-Library, der Setuptools und von Feedparser hier nicht aktuell. Verwendet am besten immer die aktuellsten Versionen der Pakete (welche das sind, erfahrt ihr, wenn ihr die Links anklickt) und passt die oben aufgeführten Kommandos entsprechend an.

RasPi RSS konfigurieren

Das heruntergeladene Python Skript rssreader.py sollte noch auf die eigenen Bedürfnisse angepasst werden. Dazu kann man es z.B. mit nano bearbeiten:
# nano rssreader.py

Zuerst sollte man die Belegung der GPIO Pins anpassen. Falls der Hardwareaufbau jedoch dem gleicht, den ich in meinem letzten Beitrag vorgestellt habe, kann alles so bleiben wie es voreingestellt ist. Falls nicht, sind in dem Beitrag weitere Informationen zu finden.
# GPIO Pins Config
DISPLAY_RS = 7
DISPLAY_E = 8
DISPLAY_DATA4 = 25
DISPLAY_DATA5 = 24
DISPLAY_DATA6 = 23
DISPLAY_DATA7 = 18

Danach können die Feeds und die Anzeige konfiguriert werden. Unter der Variable FEEDURLS können beliebig viele Feeds angegeben werden. Das sieht dann z.B. so aus:
FEEDURLS = ['http://www.schnatterente.net/rss.xml', 'http://www.heise.de/newsticker/heise-atom.xml']

MAXITEMS gibt an, wie viele Einträge eines Feeds maximal angezeigt werden sollen.

MINTIMEPERITEM und MAXTIMEPERITEM legen (in Sekunden) fest, wie lange ein Displayinhalt angezeigt wird, bevor der nächste erscheint. Die Anzeigedauer ist von der Anzahl der Zeichen im Display abhängig. Um einen festen, also nicht variierenden, Zeitslot zu erhalten, müssen beide Variablen auf den gleichen Wert gesetzt werden.

REFETCH legt in Sekunden fest, wie lange bis zum erneuten Herunterladen eines Feeds mindestens gewartet werden soll. Ein Wert von 0 sorgt dafür, dass die Feeds bei jedem Durchlauf neu geladen werden.

In ONLYCURRENTDAY kann angegeben werden, ob nur Nachrichten des aktuellen Tages angezeigt werden sollen. Der Wert dieser und der folgenden Variablen muss "True" oder "False" sein (Groß-/Kleinschreibung beachten).

Ist SHOWFEEDTITLE auf True gesetzt, wird beim Durchschalten der Nachrichten, vor den Einträgen eines Newsfeeds, dessen Titel angezeigt, z.B. "Schnatterente.net - Technik".

BREAKWORDS erlaubt das zerreißen von Wörtern am Zeilenende. Ist es aktiviert, werden Wörter, die nicht mehr auf die aktuelle Zeile passen, nicht auf die nächste Zeile gesetzt, sondern einfach zerstückelt. Dies geschieht ansonsten nur mit Wörtern, welche mehr Zeichen enthalten, als auf eine Displayzeile passen.

Setzt man den Wert von SHOWOVERFLOW gleich False, wird von jeder Nachricht nur der Inhalt angezeigt, der auf eine Displayseite passt. Passt die Nachricht nicht komplett aufs Display, wird der Rest dann abgeschnitten und nicht angezeigt. Stattdessen erscheint nachfolgend der nächste Feed-Eintrag.

Wie geht's weiter?

Ich habe mir ein 4x20 Display bestellt, da ich ja nun weiß, dass sich der Rasperry Pi mit den Dingern verträgt. Da passt dann ein bisschen mehr drauf. Sobald ich es angeschlossen habe, werde ich hier noch mal ein paar Worte dazu verlieren.

UPDATE 17. Oktober 2012: Inzwischen habe ich das 4-zeilige Display, den Eintrag dazu gibt es hier.

Mit dem Programm zur Anzeige kommender Kalendertermine habe ich noch nicht angefangen. Ich denke das mache ich, wenn das neue Display da ist. Ich werde dann auf dem großen Display die RSS Feeds laufen lassen und auf dem kleinen meine Termine aus dem Google Kalender.

Feedback, Feature Requests und Bugmeldungen werden dankbar entgegen genommen!

UPDATE 19.01.2013: Es kam die Frage auf, wie man den Raspberry Pi dazu kriegt, den RSS Reader beim Booten automatisch zu starten. Die Antwort findet ihr hier.
Und ich habe gerade noch zwei kleine Änderungen am Skript vorgenommen, um Probleme mit ASCII, bzw. UTF-8 zu beheben. Falls das Skript bei dir bisher immer mal abgestürzt ist: neue Version ausprobieren!

UPDATE 10.08.2014: Ich habe zwei kleine Änderungen am RSS-Reader-Skript vorgenommen. Die neue Version (1.1) ist online und oben im Tutorial verlinkt. Die alte Version (1.0) ist hier noch verfügbar.
In den alten Version wurden, wenn der Parameter ONLYCURRENTDAY auf True gesetzt war, auch Feeds angezeigt, die keine Einträge enthalten. Die neue Version macht das nicht mehr.
Danke an Marcel für den Hinweis.

UPDATE 19.05.2015: Ich habe wieder Mal ein paar Kleinigkeiten am Skript verändert, weil manche HD44780-Displays am neuen Raspberry Pi 2 nicht so richtig wollten. Das sollte nun gelöst sein. Die aktuelle Version ist jetzt die 1.2.

UPDATE 20.05.2015: Da ich mich nun schon mal wieder in den Code eingearbeitet hatte, habe ich gleich noch ein bisschen weitergebastelt und die Textausgabe optimiert. Die aktuelle Version ist jetzt also die 1.3.


Weitere Artikel in Sachen Raspberry Pi und HD44780-Display:

Geschnatter

41 Kommentare, selbst mitschnattern << < Seite 1/6 > >>
Anonym, am 12.10.2012 um 14:38 Uhr
Nice.
Anonym, am 12.10.2012 um 17:16 Uhr
Was ist ein "4x20 Display"?
Antwort: Ein Display mit 4 Zeilen à 20 Zeichen.
Milar, am 12.10.2012 um 21:30 Uhr
Wie cool ist das denn! Ich habe leider noch keinen Raspberrypi bekommen, aber jetzt gerade voll Lust drauf.
Anonym, am 12.10.2012 um 23:32 Uhr
Ich habe ein vierzeiliges Display dran hängen - zeigt aber nur auf 2 Zeilen was an? Bug?!
Antwort: Möglich. Könnte aber auch sein, dass du die vergessen hast die Adressen für die zwei zusätzlichen Zeilen in die Liste zu schreiben?

DISPLAYROWADR = [0x80, 0xC0, 0x94, 0xD4]
Eugene, am 13.10.2012 um 09:57 Uhr
Sorry, but why isn't that working?

FEEDURLS = [http://rssnewsapps.ziffdavis.com/pcmag.xml]
Antwort:
Because it has to be
FEEDURLS = ['http://rssnewsapps.ziffdavis.com/pcmag.xml']
Anonym von weiter oben, am 13.10.2012 um 14:36 Uhr
:D Upps. Ja, mit dem DISPLAYROWADR läufts jetzt.
Rick, am 18.10.2012 um 08:03 Uhr
I love this idea and the output looks amazing! So great! Thank you!