Die Sensoren der Erweiterung messen Luftdruck, Luftfeuchtigkeit, Temperatur, Licht, Ausrichtung und Beschleunigung. Die 8×8-RGB-LED-Matrix kann die Sensordaten oder andere Inhalte ausgeben. Über den kleinen Joystick können Sie mit Ihren Projekten interagieren. Die Abkürzung HAT steht für „Hardware Attached on Top“. Das bedeutet, dass sich das Board direkt auf die GPIO-Leiste des Raspberry Pi stecken lässt. Der Sense HAT ist mit sämtlichen Raspberry-Modellen kompatibel, die diese 40-polige GPIO-Leiste mitbringen.
Die zur Ansteuerung des Sense HAT erforderlichen Bibliotheken wie „sense_hat“ sind bei aktuellen Versionen von Raspberry-Pi-OS standardmäßig installiert. Die Python-Bibliothek ermöglicht den Zugriff auf die Sensoren, die LED-Matrix und den Joystick. Das Sense HAT gibt es für rund 35 Euro in Onlineshops wie Berrybase (www.berrybase.de) oder Buyzero (https://buyzero.de).
Sense HAT testen
Nachdem Sie das Sense HAT auf den Raspberry Pi gesteckt haben, prüfen Sie zunächst, ob alles funktioniert. Dazu erzeugen Sie ein Objekt der Klasse „SenseHat“ und zeigen mit der Funktion „show_message()“ eine Laufschrift an. Erstellen Sie zunächst mit
sudo nano ~/sensehat_test.py
eine neue Python-Datei. Zwei Codezeilen stellen die Verbindung mit dem Sense HAT her, die dritte Zeile zeigt eine Meldung auf der LED-Matrix:
from sense_hat import SenseHat
sense = SenseHat()
sense.show_message(„Hallo Welt!“)
Speichern Sie die Datei, machen Sie sie mit ausführbar
sudo chmod +x test.py
und starten Sie dann das Miniprogramm:
python ./test.py
Die Meldung „Hallo Welt!“ sollte nun über den LED-Bildschirm laufen. Das Raspberry Pi 5 meckert mitunter, dass für die Erweiterungsplatine nicht genug Leistung zur Verfügung steht. In diesem Fall spendieren Sie ihm ein stärkeres Netzteil.

Sie können die Anzeige verändern, indem Sie zusätzliche Parameter hinzufügen. Die Angabe „scroll_speed“ bestimmt, wie schnell sich der Text über die Matrix bewegt. Je größer die Zahl, desto geringer die Geschwindigkeit (eine Zeile):
sense.show_message("Hallo Welt!", scroll_speed=0.05, text_colour=[255,0,0])
Der Parameter „text_colour“ ändert die Farbe des Textes über drei Werte für Rot, Grün und Blau (hier also pures Rot).
Wetterdaten auslesen
Der Sense HAT verfügt über Sensoren für Temperatur, Luftdruck und Luftfeuchtigkeit. Die Werte lassen sich einfach abfragen und in Variablen ablegen.
from sense_hat import SenseHat
import time
import sys
sense = SenseHat()
sense.clear()
try:
while True:
t = sense.get_temperature()
t = round(t, 1)
h = sense.get_humidity()
h = round(h, 1)
p = sense.get_pressure()
p = round(p, 1)
message = "T: "+str(t)+" P: "+
str(p)+" H: "+str(h)
sense.show_message(message,
scroll_speed=0.15)
time.sleep(10)
except KeyboardInterrupt:
pass
Die While-Schleife läuft endlos, bis Sie das Script mit Strg-C abbrechen. Die Messwerte für Temperatur, Luftdruck und Luftfeuchtigkeit erscheinen nacheinander auf der LED-Matrix. Alternativ lassen sich die Werte auch im Terminal ausgeben.
Ein prinzipielles Manko sei erwähnt: Der Temperatursensor ist ungeschickt platziert und bekommt die Abwärme des Raspberry Pi ab. Für mehr Genauigkeit können Sie den Sense HAT mit einem GPIO-Verlängerungskabel auslagern.

Bewegung und Farben erkennen
Der Sense HAT besitzt einen IMU-Chip (Inertial Measurement Unit). Dieser Chip enthält mehrere Sensoren: Ein Gyroskop erkennt die Ausrichtung des Boards, ein Beschleunigungsmesser zeigt Bewegungen an und ein Magnetometer erkennt Magnetfelder. Ein kleines Script soll die Neigung, Rollbewegung und Drehung des Raspberry Pi erkennen. Sie erhalten Grad-Werte zwischen 0 und 360.
from sense_hat import SenseHat
sense = SenseHat()
sense.clear()
o = sense.get_orientation()
p = o["pitch"]
r = o["roll"]
y = o["yaw"]
p=round(p, 2)
r=round(r, 2)
y=round(y, 2)
print("Neigung {0} Rollen {1} Drehen {2}".format(p, r, y))
Die Neigung erfolgt über die lange Seite des Raspberry Pi, Rollen über die kurze Seite, und für Drehen ändern Sie die Ausrichtung des Boards.
Seit Version 2 des Sense HAT verfügt es über einen Farbsensor, mit dem Sie die Lichtmenge messen und die Anteile von rotem, grünem und blauem Licht erfassen. Der folgende Code gibt Werte zwischen 0 und 256 für den roten, grünen und blauen Lichtanteil sowie die Gesamtlichtmenge aus.
from sense_hat import SenseHat
from time import sleep
sense = SenseHat()
sense.color.gain = 64
sense.color.integration_cycles = 64
while True:
sleep(2 * sense.colour.integration_time)
red, green, blue, clear = sense.colour.colour
print(f"R: {red}, G: {green}, B: {blue}, C: {clear}")
Der Wert „gain“ definiert die Empfindlichkeit des Sensors. Sie kann die Werte 1, 4, 16 oder 64 annehmen und helle oder dunkle Umgebungen ausgleichen. Sie können zudem die Anzahl der Integrationszyklen festlegen, die für einen neuen Satz von Sensorwerten erforderlich sind. Jeder Zyklus dauert 2,4 Millisekunden, sodass die Anzahl die Mindestzeit zwischen zwei Messungen bestimmt. Sie kann zwischen 1 und 256 liegen.
LED-Matrix und Joystick nutzen
Die LEDs der Matrix lassen sich über Koordinaten ansteuern. Der erste Wert ist horizontal und reicht von 0 auf der linken Seite bis 7 auf der rechten Seite. Der zweite Wert ist vertikal und reicht von 0 oben bis 7 unten. Daher ist die x/y-Koordinate „0, 0“ die obere linke Ecke, die Koordinate „7, 7“ die untere rechte Ecke. Um das nachzuvollziehen, lässt sich in jeder Ecke der LED-Matrix eine andere Farbe einstellen. Die Farbwerte für Rot, Grün und Blau reichen von 0 bis 255.
from sense_hat import SenseHat
sense = SenseHat()
sense.clear()
sense.set_pixel(0, 0, 255, 0, 0)
sense.set_pixel(0, 7, 0, 255, 0)
sense.set_pixel(7, 0, 0, 0, 255)
sense.set_pixel(7, 7, 255, 255, 255)
Das nächste Miniprogramm zeigt, wie sich der kleine Joystick auf dem Sense HAT auslesen lässt:
from sense_hat import SenseHat
sense = SenseHat()
def rot():
sense.clear(255, 0, 0)
def gruen():
sense.clear(0, 255, 0)
def blau():
sense.clear(0, 0, 255)
def pink():
sense.clear(255, 0, 255)
sense.stick.direction_up = rot
sense.stick.direction_left = gruen
sense.stick.direction_down = blau
sense.stick.direction_right = pink
sense.stick.direction_middle = sense.clear
while True:
pass
Je nachdem, in welche Richtung Sie den Joystick bewegen, färben Sie die LED-Matrix in einer anderen Farbe ein. Indem Sie den Button drücken, leeren Sie die Matrix.

