Enviro PHAT Board mit dem Raspberry Pi Zero W

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.

Enviro PHAT Raspberry
Enviro PHAT Raspberry
Enviro PHAT Raspberry
Enviro PHAT Raspberry

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+

 

Enviro-Phat
Enviro-Phat

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:

  1. Erstelle einen Account bei https://app.initialstate.com/#/register/
  2. Führe folgendes Kommando aus: \curl -sSL https://get.initialstate.com/python -o – | sudo bash
  3. Bei der Installation die Abfrage mit “Y” bestätigen damit das Script ./is_example.py erstellt wird.
  4. Führe folgendes Kommando aus: python is_example.py
  5. 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:

Initalstate Projekte
Initialstate Projektübersicht

Nun machen wir uns an zwei Beispielen für die Temperatursensoren und Bewegungssensor ein paar Python Scripts:

Temp-Board-Initialstate
Temp-Board-Initialstate

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.

Motion-Board-Initialstate
Motion-Board-Initialstate

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

 

Joachim

Aus Leidenschaft für Technik. Aktuelle Themen sind Datensicherheit, Software für Datenschutz, Mobile Geräte, Smartphone Sicherheit und Anwendungen, Raspberry Pi Geek.

Alle Beiträge ansehen von Joachim →

Ein Gedanke zu “Enviro PHAT Board mit dem Raspberry Pi Zero W

  1. 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!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert