Die englische Firma Pimoroni bietet sogenannte pHATs (HAT = Hardware at Top) für den Raspberry Pi an. Von den Abmessungen her orientieren sich diese am Raspberry Pi Zero. Das Interface ist aber durch den 40-poligen GPIO-Stecker definiert, so dass ein solches pHAT auf jeden, diesen Stecker aufweisenden Raspberry Pi installiert werden kann.
Enviro pHAT umfasst vier unterschiedliche Sensoren, die die Messung von Temperatur und Druck, Licht und Farben (RGB), Bewegung in drei Achsen, Ausrichtung des Magnetfelds (Compass) und Gleichspannung über vier Analog-Eingänge ermöglichen. Ausserdem befinden sich zu Beleuchtungszwecken zwei weisse LEDs auf diesem pHAT.
Enviro pHAT Features:
- LSM303D accelerometer/magnetometer sensor (I2C Slave Addr 0x1d)
- TCS3472 light and RGB colour sensor (I2C Slave Addr 0x29)
- ADS1015 4-channel 3.3v, analog to digital sensor (ADC) (I2C Slave Addr 0x48)
- BMP280 temperature/pressure sensor (I2C Slave Addr 0x77)
- Two LEDs for illumination (GPIO4)

Eine Python Library unterstützt eine komfortable Programmierung in Python. Installation und Inbetriebnahme sind im Dokument „Getting started with Enviro pHAT“ beschrieben.
Bei der Inbetriebnahme blieben die LEDs dunkel. Es muss sicher gestellt sein, dass GPIO4 frei zur Verfügung steht und das Script setup.py gestartet wurde. Danach sollte alles problemlos laufen.
Mit dem Script test_all.py kann nun jede Funktion des Enviro pHAT getestet werden. Der Screenshot zeigt die Ausgabe über die Console.

#!/usr/bin/env python
import sys
import time
import datetime
from envirophat import light, weather, motion, analog, leds
def write(line):
sys.stdout.write(line)
sys.stdout.flush()
write("--- Enviro pHAT Monitoring ---")
try:
while True:
leds.on()
time.sleep(0.02)
leds.off()
rgb = light.rgb()
analog_values = analog.read_all()
output = """
Date : {n}
Temperature: {t} grd C
Pressure : {p} hPa
Light : {c}
RGB : {r}, {g}, {b}
Heading : {h}
Analog : 0: {a0}, 1: {a1}, 2: {a2}, 3: {a3}
""".format(
n = datetime.datetime.now(),
t = round(weather.temperature(),2),
p = round(weather.pressure(),2),
c = light.light(),
r = rgb[0],
g = rgb[1],
b = rgb[2],
h = motion.heading(),
a0 = analog_values[0],
a1 = analog_values[1],
a2 = analog_values[2],
a3 = analog_values[3]
)
output = output.replace("\n","\n\033[K")
write(output)
lines = len(output.split("\n"))
write("\033[{}A".format(lines - 1))
time.sleep(10)
except KeyboardInterrupt:
pass