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 2/6 > >>
butterspekulatius, am 25.10.2012 um 23:06 Uhr
klappt super, danke
Holger, am 05.11.2012 um 18:21 Uhr
extrem coole Idee. Ich werd es ausprobieren!
hein bloed, am 03.01.2013 um 22:02 Uhr
Hallo Lieber Erpel,

bei meinem PI hatte ich ein Timing Problem mit dem RSS Feeder und der Feed LIbrary. Seltsam. Alles funktioniert bei orginal takt, probleme gibts bei overlocking.
Super sonst freu ich mich ueber diese News auf dem LCD.

Viele Liebe Gruesse.
Antwort: Interessant, wie äußerten sich die Timing Probleme? Ich habe noch nie versucht meinen Pi zu Übertakten. :)
jason , am 26.01.2013 um 08:58 Uhr
works a treat this thanks. what about displaying current date n time ?. I have also been using LCDproc on the Raspberry Pi. What about sending RSS feeds from your python script to LCDproc ?. I have found some examples using telnet. Just thinking the display could then display current time, and info from other clients on your network ?. please keep us posted on developments.
Antwort: Interesting idea. Which information from other clients do you want to show on the display?
Jason, am 03.02.2013 um 04:56 Uhr
Would be useful for your reader to show the current day date and time. Also your current wifi , lan , or even wan ip address. Want to use your script as an interesting clock weather RSS feed

Afafruit guide http://learn.adafruit.com/drive-a-16x2-lcd-directly-with-a-raspberry-pi/python-code shows IP address n time

Good lcdproc guide here http://www.tech-fruits.com/archives/4388 Lcdproc client was just thinking longer RSS feeds would scroll.
Antwort: Hi Jason! It's up to you to modify the code as you like it. You could buy a display with 4 rows and just use 2 or 3 rows for the rss feeds and the other one/s for showing ip addresses or date and time.
Jason, am 04.02.2013 um 05:00 Uhr
Thanks for your reply I have bought a 4 line display but I am struggling to combine your code with something to display time.

Could you provide an option in your code to display date and time on an say lines 1 and 2 and have a true / false option in the python for people not interested. I think most people viewing your blog would be interested.

Anyway once again thanks for sharing
Felix, am 30.03.2013 um 14:38 Uhr
Hey,
einfach mal wieder super!!! Funktioniert einwandfrei! :)
Und noch was andres, ist es möglich, das nach einem Feedurl wechsel Datum und Uhrezit auf dem Display ausgeben wird?! Bekomme es einfach nicht hin :(
Wäre cool wenn du mir da helfen könntest!