Vor einiger Zeit hatte ich mal das Enviro Phat Board bestellt und nur die Beispiel Scripte ausprobiert. Nun bin ich auf ein sehr interessantes englischsprachiges Tutorial bei initialstate.com aufmerksam geworden, dass mich nun motiviert hat, dem Board doch noch eine Chance zu geben.
Es hat einige Sensoren auf dem Board die wie folgt sind:
- Temperatur (BMP280): -40…+85 °C
- Luftdruck (BMP280): 300…1100 hPA
- Photodioden: TCS3472, 3.800.000:1
- LEDs: 2 Stück, ansteuerbar über GPIO „BCM 4“
- 3 Beschleunigungskanäle
- Kompass mit 3 Magnetfeldkanäle
- Mangetfeldbereich: ±2/±4/±8/±12 gauss
- Linearbeschleunigung: ±2/±4/±6/±8/±16 g
- ADC: ADS1015, 12-Bit Auflösung, vier Kanäle – Messbereich 0…3,3 V
- GPIO-Header-Belegung: 2 (5V),
3 (BCM 2/SDA/I2C),
5 (BCM 3/SCL/I2C),
7 (BCM 4/LEDs) - Kompatibel mit: Raspberry Pi Zero, Zero W, 3, 2, B+, A+
Hier kann man das Board bestellen: http://amzn.to/2H52IyY
Als erstes muss die Software für das Board installiert werden:
curl -sS get.pimoroni.com/envirophat | bash
Dann müssen noch ein paar Zwischenschritte gemacht werden wie Account anlegen und Scripts installieren, damit mit Initialstate.com die Daten ans Dashbaord übertragen werden können:
- Erstelle einen Account bei https://app.initialstate.com/#/register/
- Führe folgendes Kommando aus: \curl -sSL https://get.initialstate.com/python -o – | sudo bash
- Bei der Installation die Abfrage mit „Y“ bestätigen damit das Script ./is_example.py erstellt wird.
- Führe folgendes Kommando aus: python is_example.py
- Gehe zum Initial State Dashboard und Du siehst ein neues Bucket mit dem Namen „Python Stream Example“ in deinem Account. nun können weitere Projekte angelegt werden.
Es sollte ungefähr so aussehen:
Nun machen wir uns an zwei Beispielen für die Temperatursensoren und Bewegungssensor ein paar Python Scripts:
Für das oben abgebildete Board benötigen wir folgenden Code und Deinen Streaming Access Code unter https://app.initialstate.com/#/account der ganz unten auf der Seite steht. Wir nennen das Script einfach „temperature.py“ und rufen es dann wenn es fertig erstellt ist mit „python temperature.py“ auf.
from __future__ import division from subprocess import PIPE, Popen from envirophat import weather from ISStreamer.Streamer import Streamer import time # --------- User Settings --------- # Initial State settings BUCKET_NAME = "Envir:cloud: pHAT Temperatures" BUCKET_KEY = "eph0720" ACCESS_KEY = "Dein Access Key bei Initialstate " SENSOR_NAME = "envir:cloud: pHAT" # Set the time between sensor reads MINUTES_BETWEEN_READS = 2 METRIC_UNITS = True # --------------------------------- def isFloat(string): try: float(string) return True except ValueError: return False def get_cpu_temperature(): process = Popen(['vcgencmd', 'measure_temp'], stdout=PIPE) output, _error = process.communicate() return float(output[output.index('=') + 1:output.rindex("'")]) def main(): streamer = Streamer(bucket_name=BUCKET_NAME, bucket_key=BUCKET_KEY, access_key=ACCESS_KEY) while True: cpu_temp_c = get_cpu_temperature() temp_c = weather.temperature() temp_c_cal = temp_c - ((cpu_temp_c-temp_c)/1.3) if (METRIC_UNITS): streamer.log(":desktop: CPU Temperature(C)", cpu_temp_c) else: cpu_temp_f = cpu_temp_c * 9.0 / 5.0 + 32.0 streamer.log(":desktop: CPU Temperature(F)", str("{0:.2f}".format(cpu_temp_f))) if isFloat(temp_c): if (METRIC_UNITS): # print("Temperature(C) = " + str(temp_c)) if (temp_c > -15) and (temp_c < 100): streamer.log(":sunny: " + SENSOR_NAME + " Temperature(C)", str("{0:.2f}".format(temp_c))) streamer.log(":sunny: Calibrated " + SENSOR_NAME + " Temperature(C)", str("{0:.2f}".format(temp_c_cal))) else: temp_f = temp_c * 9.0 / 5.0 + 32.0 temp_f_cal = temp_c_cal * 9.0 / 5.0 + 32.0 # print("Temperature(F) = " + str("{0:.2f}".format(temp_f))) if (temp_f > 0) and (temp_f < 110): streamer.log(":sunny: " + SENSOR_NAME + " Temperature(F)", str("{0:.2f}".format(temp_f))) streamer.log(":sunny: Calibrated " + SENSOR_NAME + " Temperature(F)", str("{0:.2f}".format(temp_f_cal))) streamer.flush() time.sleep(60*MINUTES_BETWEEN_READS) if __name__ == "__main__": main()
In Deinem Dashboard solltest Du nun ein neues Projekt sehen mit dem Namen „Envir☁ pHAT Temperatures“ , dort Tiles klicken und Du siehst schon die ersten Daten sofern Du das Script gestartet hast mit „python temperature.py“ .
Wichtiger Hinweis: für den kostenlosen Zugang bei initialstate.com darfst Du maximal 25.000 Werte im Monat übertragen. Alles was darüber ist, wird kostenpflichtig mit 30 Dollar im Monat. Beim nächsten Script für den Bewegungssensor ist das Limit ganz schnell erreicht, wie es mir passiert ist 🙂 , also aufpassen 🙂
Nun legen wir ein weiteres Python Script an mit dem Namen „motion.py“
from envirophat import motion from ISStreamer.Streamer import Streamer import time # --------- User Settings --------- # Initial State settings BUCKET_NAME = "Envir:cloud: pHAT Motion" BUCKET_KEY = "ephm0720" ACCESS_KEY = "Dein Access Key bei Initialstate" # Set the time between sensor reads SECONDS_BETWEEN_READS = 1.0 # --------------------------------- def main(): streamer = Streamer(bucket_name=BUCKET_NAME, bucket_key=BUCKET_KEY, access_key=ACCESS_KEY) while True: x, y, z = motion.accelerometer() streamer.log("x",x) streamer.log("y",y) streamer.log("z",z) time.sleep(SECONDS_BETWEEN_READS) if __name__ == "__main__": main()
Bei der Zeile mit „SECONDS_BETWEEN_READS = 1.0“ sind das die Sekunden für die Abfrage. Es werden die Daten pro jeder Sekunden abgefragt und übermittelt. Wir starten das Script mit „python motion.py“ und finden im Initialstate Board ein neues Projekt „Envir☁ pHAT Motion“.
Durch den Parameter „SECONDS_BETWEEN_READS“ mit 1 Sekunde, erscheint der Sensor träge und die Daten am Dashboard werden sehr verzögert angezeigt. Du kannst nun den Parameter auf die Werte schrittweise heruntersetzen mit „0.5“ , „0.4“ , „0.3“, „0.2“. Auf 0.1 solltest Du nicht gehen da das Script Streaming Fehler wirft und die Daten nur teilweise ankommen im Dashboard. Aber ACHTUNG je kleiner das Zeitfenster für die Abfrage Periode gesetzt wird, werden immer mehr Datensätze gesendet und dann sind die 25.000 kostenlosen Datenpunkte bei Initialstate sehr schnell aufgebraucht.
Finde es extrem spannend wie man mit einfachen Scripts, Daten generieren kann um diese dann an ein wirklich sehr ansehnliches Dashboard grafisch angezeigt bekommt. Wer noch andere Scripts schreibt für die anderen Sensoren, wäre ich sehr Dankbar wenn man es mir hier mitteilt bitte.
Live Dashboard:
Beste Grüße und viel Spaß mit dem Enviro Phat Board wünscht, Joachim
Ich rate dazu Sensoren individuell zu erwerben.
Die Klimadaten vornehmlich Temperatur per Enviro pHat liefern falsche Daten da sich die Platine über dem PI relativ stark erhitzt. Der AD-Wandler hat nur mäßige Genauigkeit. Lichtsensoren und LEDs unmittelbar nebeneinander. Einzelne Sensoren können u.U. mit alternativen Adressen angeschlossen werden. Einzelne Sensoren können der Anwendung entsprechend mit geeigneter räumlicher Orientierung positioniert werden.
Nett für erste Schritte aber in der Kombination der Sensoren wird das Paket nicht rund!