Too Cool for Internet Explorer

Exklusive Auktion zu RadioPi

Saturday, 26. October 2013
15:27:16 (+0000)

RadioPiWie aus meinen letzten Blog-Einträgen zu entnehmen ist, arbeite ich seit einiger Zeit an RadioPi – einem Webradio auf Basis des Raspberry Pi (Modell B mit 512 MB RAM).

Das von Scratch aufgebaute Webradio ist in der Version 1.0 nun Feature Complete sowie stabil, und verrichtet erfolgreich seinen Dienst bei mir im Wohnzimmer.

Für meine Leser gibt es nun exklusiv den Hinweis einen Prototypen von RadioPi über ein großes Auktionshaus privat zu erwerben. Wer gerne Software entwickelt, mit Elektronik experimentiert oder einfach gerne Webradio hört, der sollte sich dies nicht entgehen lassen!

Hier der Link zur Auktion. Sie läuft ab sofort bis zum 9. November 2013 15:14:52 MEZ.

Happy bidding & good luck!

RadioPi: Signalverarbeitung

Thursday, 18. July 2013
20:30:55 (+0000)

turn_signals(Von xkcd: http://xkcd.com/165)

Da nun LIRC und TSOP4838 als Infrarot-Empfänger zusammenarbeiten und auch die Signale meiner Apple IR-Fernbedienung empfangen können, stellte sich als nächste Frage, wie ich nun die Schnittstelle zu meinem Python-Skript realisieren soll. Dazu gab es einige Möglichkeiten, von denen ich mich für eine entschieden habe. Aber alles der Reihe nach.

Zuerst einmal etwas über den Anwendungsfall. Es sollten per Fernbedienung ein paar einfache Funktionen realisiert werden, um meinem Webradio Signale zum Senderwechsel (nächster/vorheriger Kanal), zum Pausieren und Wiederabspielen geben zu können. Da die benutzte Fernbedienung maximal 6 Knöpfe mit 7 Funktionen (Pausieren und Wiederabspielen sind typischerweise auf einem Knopf untergebracht) bietet, ist die Anzahl zu steuernder Funktionen damit auf 7 limitiert. Für meine Anwendungszwecke reicht dies auch vollends. Ich erwarte nicht, dass ich mehr Funktionen von RadioPi fernsteuern können will.

Die zweite Anforderung sollte sein alle Signale volatil zu speichern, da die Anzahl der Schreibzyklen auf der SD-Karte – welche auf dem Raspberry Pi den bootfähigen Festspeicher definiert und demnach auch das Betriebssystem (in meinem Fall Raspdian) hostet – begrenzt sind. Es soll aber dennoch nicht zu Verlusten von mehreren kurzzeitig hintereinander abgegebenen Signalen kommen können, die nicht instantan abgearbeitet werden können.

Die dritte und letzte Anforderung war so wenig wie möglich Rechenzeit bei der Signalannahme und -verarbeitung zu verbrauchen, ohne dabei größere Latenzen in kauf nehmen zu müssen. Hintergrund ist, dass RadioPi schon jetzt während des laufenden Betriebs an Kapazitätsgrenzen stößt, insbesondere wenn das Frontend auf einem Full-Hd-Fernseher angezeigt werden muss.

Für diese Anforderungen gab es nur eine sinnvolle Lösungsmöglichkeit: Interrupts über die POSIX-Signale des Linux-Betriebssystems. Die Idee dabei war, für jede über Fernbedienung zu steuernde Funktion einen Signalhandler in meinem Python-Skript zu definieren, welcher die eigentliche Funktion triggert. Die Signale werden durch Shell-Skripte und dem kill-Kommando an die Prozess-Nummer des Webradio-Skripts geschickt. Die Shell-Skripte wiederum werden bei Signaleingang des IR-Sensors durch den Daemon lircd und die Konfiguration /etc/lirc/lircrc aufgerufen:

Read the rest of this entry »

RadioPi: Bier oder Chips?

Monday, 15. July 2013
20:40:32 (+0000)

Wir wissen: Die Gesellschaft wird immer älter. Und so kam, was kommen musste! RadioPi lässt sich über eine Infrarot-Fernbedienung steuern, sodass man auf der Couch nur noch zwischen zwei Aktionen wählen muss; stellt man nun den Bierkrug kurz ab oder legt temporär lieber die Chips-Tüte auf die Seite, um nach der Fernbedienung zu greifen. Doch der Weg dorthin war nicht so trivial, wie man durchgängig lesen kann ([1], [2], [3], [4], [5], …) und die Anleitungen lechzen nach Komplettierung.

Darum hier ein paar Fallstricke, die sich bei der Verwendung eines IR-Sensors (in meinem Fall ein TSOP4838) ergeben. Der Sensor hat drei Pins: Out, Vs und – wer hätte das gedacht – GND. Der erste Fallstrick ist demnach die Nomenklatur des LIRC-Kernelmoduls für den Raspberry Pi – lirc_rpi. Dieses hat 5 mögliche Argumente, welche bei einer vom Standard abweichenden Verschaltung des IR-Sensor nützlich sein können – nämlich debug, gpio_out_pin, gpio_in_pin, sense und softcarrier. Da ich auf meinem Raspberry Pi nur noch zwei freie GPIO-Pins hatte, GPIO-14 und GPIO-27, weiche ich zwangsweise von der Standard-Verdrahtung ab. Ich nutze Pin-1 (3.3V) für Vs, Pin-9 für GND sowie GPIO-14 (Pin-8) für Out. Wichtig ist, dass der Daten-Pin (lt. Datenblatt Out) für das LIRC-Kernelmodul über gpio_in_pin=14 spezifiziert werden muss. Wer versehentlich dafür gpio_out_pin verwendet läuft Gefahr den Sensor zu grillen.

Der zweite Fallstrick ergibt sich, wenn man – wie ich – den Vs-Pin des Sensors direkt an Pin-1 des Raspberry Pi anklemmt. Dann zwingt LIRC einen das Argument gpio_out_pin zu spezifizieren. Da dort GPIO- und keine Pin-Nummern angegeben werden, hat man mit Pin-1 (3.3V) ein Problem, da dieser Pin keine GPIO-Nummer besitzt. Da mit dem Modell-B der Himbeere GPIO-21 dem Anschluss GPIO-27 gewichen ist, spezifiziere ich – als Workaround – nun diesen nicht (mehr) existenten GPIO-Pin. Und da auf Pin-1 sowieso immer 3.3V anliegen, muss das Kernel-Modul an dieser Stelle nichts Weiteres tun. Vorsicht ist geboten, wenn das Argument gpio_out_pin beim Laden des Moduls lirc_rpi nicht angegeben wird, dann wird nämlich standardmäßig GPIO-18 verwendet; das kann böse Effekte nach sich ziehen, insbesondere wenn dieser Pin anderweitig schon in Verwendung ist!

Der dritte Fallstrick betrifft das eigentliche Anlernen der IR-Fernbedienung. Es gibt zwar eine Datenbank mit einigen vorgefertigten Konfigurationen; für mich aber hat keine der 6 verschiedenen Konfigurationen zur Apple-IR (A1156) dort getaugt. Die eigene Erstellung der Konfiguration über das Kommando irrecord ist zwar etwas gewöhnungsbedürftig, funktioniert aber anstandslos. Die erfolglose Suchzeit in der Datenbank kann man sich getrost auch sparen und gleich eine eigene Konfiguration erstellen. Für die 6-Tasten-Fernbedienung von Apple hat das ca. 10 Minuten gedauert; für Fernbedienungen mit mehreren Tasten steigt der Aufwand dafür leider linear.

<code>
# /etc/init.d/lirc stop
# modprobe lirc_rpi gpio_in_pin=14 gpio_out_pin=21
# ls -l /dev/lirc*
# mode2 -d /dev/lirc0
# irrecord –list-namespace | grep KEY
# irrecord -d /dev/lirc0 ~/lircd.conf
# /etc/init.d/lirc start
# irw /var/run/lirc/lircd
</code>

 

RadioPi: Internet-Radio ohne Internet

Wednesday, 26. June 2013
22:22:00 (+0000)

Seit nun zwei Wochen bin ich vom Internet abgeklemmt – jedenfalls sporadisch. Rückblick: Seit 2011 habe ich einen echten Flatrate-Vertrag mit Alice – seit kurzem O2 – was Internet und Telefonie (über VoIP) anbelangt. Da es O2 aber nicht gebacken bekommt einen Techniker über die Deutsche Telekom zu beauftragen (die wiederum einen externen Service-Dienstleister beauftragt/beauftragen muss), welcher sich meinem Problem annimmt, habe ich die Zeit genutzt um RadioPi einige Optimierungen einzuhauchen, welche u.a. bei volatiler Internet-Verbindung nützlich sein können. Das hat sich gelohnt!

Read the rest of this entry »

RadioPi: hitzige LCD-Displays

Wednesday, 05. June 2013
22:15:37 (+0000)

Wer sich einen Temperatursensor für seinen Raspberry Pi anschaffen will, sollte auf einige Punkte achten.

  • Welchen Wertebereich soll der Sensor abdecken?
  • Welche Stromspannung ist für diesen Wertebereich notwendig?
  • Soll die Temperatur über einen A/D-Wandler oder direkt (digital) abgegriffen werden?

Ich habe mir für mein Rpi-Projekt zwei verschiedene Temperatursensoren angeschafft: Einen LM 325 Z sowie einen DS18S20+.

Der LM 325 Z hat drei Pins für V+, V- (GND) sowie einen zum Justieren über einen Potentiometer. Letzteren habe ich nicht in Verwendung (gehabt), da es mir nicht auf eine hohe Genauigkeit ankommt. Mein Einsatzzweck ist die Temperaturüberwachung meines RadioPi in einem (ggf. geschlossenen) Gehäuse. Der LM 325 Z liefert bei 25° C Temperatur eine typische Spannung von 2.98V. Pro Grad Kelvin liefert der Sensor eine um 10 mV (0,01V) höhere Ausgangsspannung. Konkret bedeutet dies, dass er angeschlossen an einem Rpi mit 3.3V maximal eine Temperatur von 57°C liefern kann. Wer den – lt. Datenblatt – vollständigen Wertebereich von bis zu 125°C messen können will, muss den LM 235 Z mit mindestens 4.23V versorgen. Da man aber einen A/D-Wandler (z. B. MCP3008) über SPI oder I2C nur mit einer Referenzspannung von 3.3V an den Raspberry Pi anschließen kann, müsste man zwischen Ausgangsspannung des Temperatursensors und dem Eingangskanal des A/D-Wandlers noch weitere elektronische Bauteile dazwischen schalten.

Der DS18S20+ hat dagegen bereits einen A/D-Wandler integriert und ermöglicht es die Temperatur digital abzugreifen – allerdings mit einer wesentlich höheren Latenzzeit. Während ich mit Hilfe des LM 325 Z die aktuelle Temperatur im unteren Nanosekundenbereich lesen kann, muss beim DS18S20+ mit einer Verzögerung im hohen 3-stelligen Millisekunden-Bereich (ca. 750 ms) gerechnet werden. Für meine Anwendung ist dies allerdings mehr als ausreichend! Vom Optischen unterscheiden sich die beiden Sensoren nicht. Auch der DS18S20+ hat drei Pins für V+, V- (GND) und DQ für In- und Output der Daten. Ein einfaches Beispiel für eine Verschaltung mit dem Raspberry Pi findet sich hier.

Read the rest of this entry »

RadioPi: Webradio auf Basis des Raspberry Pi

Wednesday, 22. May 2013
17:38:58 (+0000)

Mein kleines Elektronik-Projekt hat einen Namen: RadioPi.

Ziel ist ein eingebetteter Webradio auf Basis des Raspberry Pi. Die Software will ich ausschließlich in Python realisieren (bzw. ich habe bereits damit begonnen) – unter Verwendung externer OpenSource-Software, wie Linux (Raspbian wheezy), MPlayer und Ähnliche. RadioPi nutzt den HDMI-Ausgang des Raspberry Pi, um sowohl Audio als auch ein grafisches Frontend an den Fernseher zu schicken. Heute gibt es in den meisten Haushalten eine höherwertige Lautsprecher-Konstellation, welche in irgendeiner Form mit den Fernseher verbunden ist. HDMI ist daher in meinen Augen vielversprechender als alles andere.

Read the rest of this entry »

Raspberry Pi – der Wandel vom Analogen

Thursday, 09. May 2013
10:08:00 (+0000)

Ein Potentiometer (oder kurz Poti) ist etwas Komfortables, wenn es beispielsweise um die Auswahl von Webradio-Streams geht. Der Drehschalter (engl. rotary switch) verhält sich wie ein variabler Widerstand. Mein 100kOhm-Poti hat drei Pins: Spannung (+), Masse (-) sowie einen Pin zum Abgreifen der analogen Spannung. Da der Raspberry Pi aber keine analogen Eingänge besitzt, habe ich einen A/D-Wandler zwischen Poti und den GPIOs des Rpi dazwischengeschalten:
rpi_with_potentiometer

Read the rest of this entry »

Raspberry Pi – Ampelschaltung oder analoge Temperatur-Anzeige

Saturday, 04. May 2013
18:48:46 (+0000)

Was kann man wohl mit 15 Minuten und dem Raspberry Pi anstellen?

Eine Schaltung mit 4 LEDs (rot, gelb, grün und blau) realisieren und damit sowie einem kleinen Shell-Skript eine Ampelschaltung mit zufälligen langen Schaltzeiten/Grünphasen realiseren bzw. eine Temperatur-Illustration konstruieren, womit der Wärmegrad der ARMv6-CPU angezeigt werden kann.

Die Zutaten:

  • 15 Minuten Zeit
  • Ein Steckbrett zur einfachen Realisierung der Schaltung
  • 1 rote LED (1,9 V bei 20 mA)
  • 1 gelbe LED (2,0 V bei 20 mA)
  • … dazu jeweils einen 82 Ohm Widerstand
  • 1 grüne LED (2,4 V bei 20 mA)
  • … dazu einen 56 Ohm Widerstand
  • 1 blaue LED (3,2 V bei 20 mA) als Status-LED
  • … dazu einen 10 Ohm Widerstand
  • 5 – am Besten verschiedenfarbige – Jumperkabel (m/f)
  • 4 leitende Brücken

Die Vorwiderstände sind so dimensioniert, dass die LEDs an den 3,3 V GPIO-Pins angeschlossen werden können. Ich habe folgende Pins dazu verwendet: GPIO-2 für die rote LED, GPIO-3 für die gelbe LED, GPIO-4 für die grüne LED, Pin-Nr. P1-9 für Ground und GPIO-17 für die blaue “Status”-LED. Der Pin-Schaltplan des RPi findet sich hier. Wichtig ist, dass die GPIOs im virtuellen Dateisystem nicht über die Pin-Nr. angesprochen werden!

Read the rest of this entry »

Raspberry Pi – Blinkende Onboard-LED

Monday, 29. April 2013
20:45:10 (+0000)

Mein Projekt für die in u.a. Python programmierbare Himbeere steht – RadioPi. Ein Webradio geschrieben in Python. Die Rechenzeit des schwachen ARMv6-Prozessors soll dabei Echtzeit-mäßig für die Radio-Applikation garantiert werden. Da ich die meiste externe Hardware (Potentiometer, MCP3008, Widerstände, …) aber direkt in China bestellt habe, muss ich mich damit noch etwas (~4 Wochen) gedulden.

Im Moment stehen mir für ein kleines “Hello World“-Beispiel lediglich eine über GPIO ansteuerbare Onboard-LED (ACT) zur Verfügung, die normalerweise von der Firmware zur Illustration der Zugriffe auf die SD-Karte genutzt wird. Mit folgendem Shell-Skript kann man die ACT-Onboard-LED blinken lassen. Das Skript muss natürlich als ROOT ausgeführt werden, um die I/Os beschreiben zu können.


#!/bin/bash
echo "none" > /sys/class/leds/led0/trigger
while true
do
  echo "1" > /sys/class/leds/led0/brightness
  sleep 0.5
  echo "0" > /sys/class/leds/led0/brightness
  sleep 0.5
done

Wer die ACT-LED wieder als MMC-Aktivitätsindikator nutzen will, kann entweder den Rpi neu starten oder einfach Folgendes ausführen:

Read the rest of this entry »

Raspberry Pi

Saturday, 20. April 2013
18:08:05 (+0000)

Vor ca. 3 Wochen habe ich bei RS Components den Raspberry Pi (Modell B) bestellt. Der Einplatinen-Computer bietet eine gute Grundlage für Elektronik- und Software-Projekte im Low-Cost-Bereich. Bei RS Components hat mich der Raspberry Pi knapp 33 Euro gekostet.

Die enorm kleine Bauform von gerade mal 85,60 x 53,98 x 17,00 mm (ungefähr Kreditkarten-Größe) und die Möglichkeit über GPIO, SPI, I2C oder UART externe Hardware, wie z. B. Sensoren, Aktoren und/oder Erweiterungsplatinen, anzuschließen zu können, lassen den Raspberry Pi insbesondere für Projekte im Hobby-Bereich interessant werden.

Read the rest of this entry »