Aus Raspberry Pi Geek 12/2017

Bau eines Pi-Zero-Lichtweckers mit dem Four-Letter-pHAT (Seite 4)

Listing 3

 

[GLOBAL]
debug: 0
fifo: 1
active_low: 0
edge: rising
ignore_initial: 1
bounce_time: 0.05
#      N1  N2  N3  N4
gpios: 17,  4, 22, 27
[GPIO17]
edge: both

Für die erste Taste (GPIO17) überschreibt die Konfiguration das Verhalten: Hier haben sowohl das Drücken als auch das Loslassen eine Funktion. Beim Loslassen entscheidet der Nerd-Wecker zudem, ob Sie die Taste kurz oder lang gedrückt haben, und schaltet im letzteren Fall die Tastenbelegung um.

Mit vier Tasten kämen Sie nach diesem Schema auf 20 Tastenfunktionen, der Wecker wäre dann jedoch ohne Handbuch nicht mehr zu benutzen. In eigenen Projekten hätten Sie aber die Möglichkeit, über den Pipe-Mechanismus selbst Kombinationen wie 1-2-3-1 abzufangen und die Tastatur so für eine rudimentäre PIN-Eingabe zu verwenden.

Blinkt!

Pimoroni liefert für seine LED-Leiste eine Python-Bibliothek, die Sie über das normale Raspbian-Repository installieren (Listing 4, erste Zeile). Sie erfordert keine weitergehende Konfiguration, den Quellcode laden Sie bei Bedarf von Github herunter (Listing 4, zweite Zeile).

Listing 4

 

$ sudo apt-get -y install python-blinkt
$ git clone https://github.com/pimoroni/blinkt.git

Im Unterverzeichnis examples/ gibt es eine Reihe von Beispielen, die die ganze Bandbreite der Möglichkeiten demonstrieren. Letztlich fällt die API nicht besonders kompliziert aus: Sie setzen die Farbe der acht Einzel-LEDs eines Segments (Pixel genannt) mit set_pixel() und stellen die Helligkeit mit set_brightness() ein. Die Funktion set_all() setzt alle Pixel auf einmal, die Funktion show() zeigt dann das Ergebnis.

Im Wecker zeigt die LED-Leiste den Tag des Monats an. Eine Farbe deckt dabei jeweils acht Tage ab, Rot etwa die Tage 1 bis 8, Gelb 9 bis 16 und so weiter (Listing 5). Der Code in Zeile 13 berechnet die Anzahl der LEDs, die beiden nächsten Zeilen die notwendige Farbe. Zeile 17 löscht erst alle LEDs, um dann in der folgende Schleife die vorberechnete Anzahl von LEDs mit der richtigen Farbe wieder zu setzen. Die letzte Zeile schaltet die Elemente dann wieder an.

Listing 5

 

#!/usr/bin/python
import time, blinkt
RED    = (255,0,0)
YELLOW = (255,255,0)
GREEN  = (0,255,0)
BLUE   = (0,0,255)
COLORS = [RED,YELLOW,GREEN,BLUE]
day_of_month = time.localtime().tm_mday
num_leds  = (day_of_month -- 1) % 8 + 1
col_index = (day_of_month -- 1) // 8
color = COLORS[col_index]
blinkt.clear()
for i in range(num_leds):
  blinkt.set_pixel(i,color[0],color[1],color[2])
blinkt.show()

Weitere Beispiele, etwa den Lichtwecker, finden Sie im Github-Projekt. Hier fangen die LEDs ganz schwach in Rot an zu leuchten, werden immer heller und wechseln dabei die Farbe über Gelb zu gleißendem Weiß.

Das Display

Für das Display gibt es ebenfalls eine Python-Bibliothek samt Beispielen. Die Installation gelingt ähnlich einfach wie bei Blinkt! (Listing 6). Da das Steuern der Segmente aber den I2C-Bus nutzt, müssen Sie hier zusätzlich die Systemkonfiguration anpassen. Dazu tragen Sie in die /boot/config.txt die Zeilen aus Listing 7 ein. Die zweite Zeile ist nur notwendig, falls Sie eine Realtime-Clock nutzen wollen. Anschließend ergänzen Sie die Datei /etc/modules durch den Eintrag i2c-dev.

Listing 6

 

$ sudo apt-get -y install python-fourletterhat

Listing 7

 

dtparam=i2c_arm=on
dtoverlay=i2c-rtc,ds3231

Nach diesen Vorarbeiten kann das Programm für den Wecker nun die Uhrzeit anzeigen, Listing 8 nennt die entsprechenden Kommandos. Zeile 8 löscht den internen Speicher, und Zeile 9 schreibt die in Zeile 6 als String ausgegebene Uhrzeit ins Display. Jedes Segment hat noch einen (Dezimal-)Punkt – der Nerd-Wecker zeigt über diese Punkte an, ob einer der vier Alarme aktiv ist oder nicht (Zeile 10). Im Beispiel setzt das Skript den ersten Dezimalpunkt (Index 0). Das Kommando show() in Zeile 11 zeigt dann das Ergebnis auf dem Display an.

Listing 8

 

#!/usr/bin/python
import time
import fourletterphat as display
current_time = time.strftime("%H%M")
display.clear()
display.print_str(current_time)
display.set_decimal(0,True)
display.show()
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 8 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben