Listing 3
// all_off
int main(int argc, char *argv[]) {
int ret = 0;
setup_handlers();
if (ws2811_init(&ledstring)) {
return -1;
}
int i;
for (i = 0; i < LED_COUNT ; i++) {
ledstring.channel[0].leds[i] = 0x000000;
}
if (ws2811_render(&ledstring)) {
ret = -1;
}
return ret;
}
Listing 4
// soft_on
int main(int argc, char *argv[]) {
int ret = 0;
setup_handlers();
if (ws2811_init(&ledstring)) {
return -1;
}
long b;
for (b = 0; b < 99 ; b++) {
int i;
long x=(b*65536l)+(b*256l)+b;
for (i = 0; i < LED_COUNT ; i++) {
ledstring.channel[0].leds[i] = x;
}
if (ws2811_render(&ledstring)) {
ret = -1;
}
sleep(2);
}
return ret;
}
Listing 5
// soft_off
int main(int argc, char *argv[]) {
int ret = 0;
setup_handlers();
if (ws2811_init(&ledstring)) {
return -1;
}
long b;
for (b = 99; b > -1 ; b--) {
int i;
long x=(b*65536l)+(b*256l)+b;
for (i = 0; i < LED_COUNT ; i++) {
ledstring.channel[0].leds[i] = x;
}
if (ws2811_render(&ledstring)) {
ret = -1;
}
sleep(2);
}
return ret;
}
Helligkeit
Das Programm all_on (Listing 2) schaltet alle LEDs auf etwas weniger als die Hälfte der maximalen Helligkeit an. Drehen Sie die LEDs weiter auf, so erzeugt das einen Spannungsabfall innerhalb des Bands und somit eine merkliche Verdunklung der von der Spannungsquelle weiter entfernten Lichter. Sollen die LEDs die maximale Helligkeit erreichen, bleibt Ihnen nichts anderes übrig, als das Band über zusätzliche Anschlüsse mit Spannung zu versorgen.
Die abgedruckten Listings zeigen jeweils nur die Main-Methode; die kompletten Listings finden Sie auf der Heft-DVD. Die Programme bauen Sie am besten direkt im Verzeichnis ~/alarm/rpi_ws281x, da dort bereits die Bibliothek libws2811.a zur Adressierung der LED-Leuchten liegt (Listing 6). Anschließend kopieren Sie die kompilierten Programme gleich in die Ordner, in denen die später aufgerufenen Skripte sie suchen (Listing 7). Achten Sie beim Starten der Programme darauf, dass die darunterliegende Bibliothek Root-Rechte benötigt und Sie somit auch die Alarmprogramme mit einem vorangestellten sudo aufrufen müssen.
Listing 6
$ cd ~/alarm/rpi_ws281x $ cc all_on.c libws2811.a -o all_on $ cc all_off.c libws2811.a -o all_off $ cc soft_on.c libws2811.a -o soft_on $ cc soft_off.c libws2811.a -o soft_off
Listing 7
$ mkdir /home/pi/alarm/sound $ mkdir /home/pi/alarm/light $ cp all_on /home/pi/alarm/light $ cp all_off /home/pi/alarm/light $ cp soft_on /home/pi/alarm/light $ cp soft_off /home/pi/alarm/light
Soundkarte einrichten
Da sich der für die Tonausgabe verantwortliche PWM-Generator in unserem Projekt mit der Steuerung des LED-Bands beschäftigt, muss eine zusätzliche externe Soundkarte das Abspielen der Wecktöne übernehmen. Bei den üblichen Versandhändlern werden Sie schnell fündig; eine geeignete USB-Soundkarte kostet in der Regel weniger als 10 Euro.
Aktuelle Raspbian-Versionen bringen das für die meisten USB-Soundkarten genutzte Kernelmodul von Haus aus mit, sodass Sie zum Einrichten der Soundkarte nur zwei kleine Einstellungen an der Alsa-Konfiguration vornehmen müssen. Dazu bearbeiten Sie mit Root-Rechten die Datei /etc/modprobe.d/alsa-base.conf und ändern die Option snd-usb-audio von -2 auf 1 (Listing 8). Zusätzlich fügen Sie, wiederum mit Root-Rechten, an die Datei /etc/asound.conf den Inhalt aus Listing 9 an.
Listing 8
[...] #options snd-usb-audio index=-2 options snd-usb-audio index=1 [...]
Listing 9
pcm.!default {
type plug
slave {
pcm "hw:1,0"
}
}
ctl.!default {
type hw
card 1
}
Zum Aktivieren der nun als primäres Audiogerät eingerichteten USB-Soundkarte starten Sie den Raspberry Pi einmal mit sudo reboot durch. Für einen ersten Test der Ausgabe schließen Sie einfache Aktivboxen an die externe Soundkarte an und rufen alsamixer auf. Dort regeln Sie die Lautstärke der Wiedergabe (Abbildung 3).
Beim Abspielen der Wecktöne kommen die Kommandozeilenwerkzeuge mpg123 oder ogg123 aus dem Paket vorbis-tools zum Einsatz – beide Programme haben Sie bereits am Anfang zusammen mit den benötigten Build-Tools installiert. Der RasPi-Wecker sucht generell in ~/alarm/sound nach Musik. Damit spielt der Eigenbauwecker nun Musik und steuert die Lichtanlage an – es fehlt also nur noch eine Benutzerschnittstelle.
Dienste installieren
Zum Einstellen von Weckzeiten, Klängen und Lichtern nutzt der RasPi-Wecker eine einfache webbasierte Administrationsseite. Dazu benötigen Sie einen Webserver (hier Apache), PHP als Skriptsprache und MySQL als Datenbank-Backend. Nach der Installation der Dienste (Listing 10) rufen Sie den Webserver entweder lokal über http://localhost auf oder von einem anderen Rechner aus über die IP-Adresse des Raspberry-Pi-Weckers. Ein simples It works! verrät den Erfolg der Aktion. Achten Sie bei der Installation des MySQL-Servers darauf, sich das Root-Passwort der Datenbank zu merken. Zur Sicherheit sollte es nicht dem Root-Passwort des Linux-Systems entsprechen.






