Raspberry Pi: RSS Reader für HD44780 Display
erschienen in der Kategorie Technik, am 12.10.2012

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.
Mein Python Skript bietet bisher Folgendes:
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.
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.
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:
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.
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.
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:
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
# 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
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
kolo, am 21.06.2013 um 00:34 Uhr
Danke! Hat geholfen :-)
Dennis, am 28.11.2013 um 22:35 Uhr
Hallo,
ist es möglich dasSkript so zu schreiben, dass der RSS-Reader nur einmal durchläuft und dann via chronjob nochmal neu angestoßen werden muss?
Hintergrund ist nämlich, dass ich nach einem RSS-Reader Durchlauf noch andere Informationen einblenden wollen würden.
Schon einmal Danke im Voraus.
ist es möglich dasSkript so zu schreiben, dass der RSS-Reader nur einmal durchläuft und dann via chronjob nochmal neu angestoßen werden muss?
Hintergrund ist nämlich, dass ich nach einem RSS-Reader Durchlauf noch andere Informationen einblenden wollen würden.
Schon einmal Danke im Voraus.
Antwort: Dazu musst du nur das "while True:" aus dem Code rausschmeißen.
Jan-Niklas, am 23.12.2013 um 12:43 Uhr
Hallo ich muss nochmal was fargen :D
Wenn ich "tar -zxvf feedparser-5.1.2.tar.gz" ausführe zeigt er mir an das "tar" mit einem fehler aufgrund vorheriger fehler beended wurde... Ich hab beim durchgucken ein paar mal gelesen das nicht genug speicherplatz verfügbar ist, kann das sein? Hab noch 130 kb freien speicher ?
Wenn ich "tar -zxvf feedparser-5.1.2.tar.gz" ausführe zeigt er mir an das "tar" mit einem fehler aufgrund vorheriger fehler beended wurde... Ich hab beim durchgucken ein paar mal gelesen das nicht genug speicherplatz verfügbar ist, kann das sein? Hab noch 130 kb freien speicher ?
Fefe, am 20.01.2014 um 23:34 Uhr
Cooles Skript. :)
Pieper, am 04.03.2014 um 22:23 Uhr
Hi,
Klasse Anleitung hier.
Aber da ich meinen RPI schon mit div. anderer HW betreibe, bleibt mir nur der Ausweg über I2C.
Deine Anleitung beschreibt aber nur 4-Bit.
Kann man darauf hoffen, das das evtl. noch kommt?
Klasse Anleitung hier.
Aber da ich meinen RPI schon mit div. anderer HW betreibe, bleibt mir nur der Ausweg über I2C.
Deine Anleitung beschreibt aber nur 4-Bit.
Kann man darauf hoffen, das das evtl. noch kommt?
Teichbewohner, am 06.05.2014 um 00:45 Uhr
Super Anleitungen hier. Tausend Dank!
Habe das 4-Zeilen-Display bei mir auch dran. Die Sonderzeichen sind für westliche Konsumenten wirklich gewöhnungsbedürftig. Aber dank deinem Skript hat alles (bis auf das ë in Tiësto) tiptop hingehauen. Da habe ich jetzt das verschnörkelte e aus chr(227) genommen.
Habe das 4-Zeilen-Display bei mir auch dran. Die Sonderzeichen sind für westliche Konsumenten wirklich gewöhnungsbedürftig. Aber dank deinem Skript hat alles (bis auf das ë in Tiësto) tiptop hingehauen. Da habe ich jetzt das verschnörkelte e aus chr(227) genommen.
Lennard, am 10.05.2014 um 00:10 Uhr
amazing thing, just works great! thank you so much for sharing this.
Es gelten die Regelungen der Datenschutzerklärung.