Raspberry Pi und Piface digital


Gepostet Juni 2014, Kategorie: Raspberry Pi


Raspberry Pi und Piface digital

Dieser Post geht um das Piface digital. Installation, RGB-LED, Shutdown-Taste und meine erste Wetterstation.


Inhaltsverzeichnis


    Installation

    • Falls noch nicht gemacht, SPI aktivieren $ sudo raspi-config > 8 > A5 > YES
    • $ sudo apt-get install python3-pifacedigitalio
    • Erster Test: $ python3 /usr/share/doc/python3-pifacedigitalio/examples/blink.py

    Meine Beispielprogramme

    Spielereinen mit den 8 LEDs

    led_lauflicht.py
    led_pingpong.py

    Eingabe mit den 4 Onboard-Tastern

    inp_shutdown.py

    • Drücke auf den ersten Taster (PIN 0) und dein Pi fährt herunter
    • Die erste Zeile#!/usr/bin/env python3 sorgt dafür, dass man das Programm mit ./inp_shutdown.py starten kann
    • Somit kann dieses Programm in die /etc/rc.local zum Autostart eingetragen werden
      Programm zum Herunterfahren in rc.local

    RGB-LED

    Schaltplan

    Die NAND-Gatter werden zum invertieren des Signals benötigt, da der Piface nur Open-Collector-Ausgänge besitzt. Das Ganze würde mit drei Transistoren ebenfalls funktionieren. Eine RGB-LED mit gemeinsamer Anode könnte man direkt an die jeweiligen Ausgänge anschließen.

    rgb_first.py
    Bei diesen Programm muss die LED an die Pins 0, 1 und 2 angeschlossen werden.

    rgb_html.zip
    Steure die Farbe der LED über das Internet. index.php und clrs.txt liegen auf den Webserver. Beim Klicken auf eine Farbe, speichert PHP die neue Farbe in der clrs.txt. Der Phythonskript stellt jede Sekunde eine Anfrage an den Webserver und ruft die clrs.txt auf. Ändert sich der Text der clrs.txt. so sendet der Pythonskript die PIN-Kombination an das Piface.

    Temperaturmessung und Anzeige

    Schaltung

    Die beiden Relays, die an Pin 0 und 1 angeschlossen sind, sollten durch die Jumper 5 und 6 deaktiviert werden.
    Schaltplan

    Aufbau Aufbau

    Temperaturmessung

    Der NE555 erzeugt ein Rechtecksignal, dessen Frequenz abhängig ist von den beiden Widerständen und den Kondesator.
    Der Python-Skript misst die Periodendauer des Signal.

    umgeformt:

    Die Abhängigkeit des Widerstandes eines NTC von der Temperatur wird mit dieser Gleichung dargestellt. und sind spezifische Größen des Bauteils

    umgeformt:

    Bei meinen Temperatursensor gilt: und
    Dieser Wert wird dann in einen Ringspeicher gespeichert. 128 Elemente haben sich als gut erwiesen. Nach Anfrage gibt diese Ringspeicher-Klasse den Mittelwert der gespeicherten Werte aus.

    Temperatur speichern und Graph ausgeben

    Der Pythonskript sendet eine Anfrage an die sendtemp.php mit GET-Elementen.
    Das erste GET-Element ist data. data setzt sich aus einen UNIX-Zeitstempel, einen Unterstrich und der Temperatur aus den Ringspeicher zusammen.
    Das zweite Element ist file. Dieses gibt an, in welcher Datei dieser Eintrag gespeichert werden soll. Der Dateiname wird in der Form Jahr-Wochennummer erstellt. PHP speichert den Wert von data in der entsprechenden Datei.
    Ein drittes Element übermittelt ein Passwort, welches sich im Phythonskript befindet und mit dem eingebenen Passwort in der PHP-Datei übereinstimmen muss.
    Dies geschieht aller fünf Minuten.
    Die Darstellung des Diagramms erfolgt über jqplot. PHP fügt die Daten, die dargestellt werden sollen in die entsprechende JavsScript-Prozedur ein.

    Senden an den Kilu-Server (OUTDATED!)

    Jede halbe Stunde verbindet sich mein Pi via FTP mit dem Kilu-Server, wo eine Kopie meiner Homepage liegt. Diese ist im Gegensatz zu robfro.no-ip.org 24/7 erreichbar und deutlich schneller. Dann vergleicht der Pi die Dateigrößen der Wochendateien auf den Pi und auf den Kilu-Server. Wenn die Dateigröße nicht übereinstimmt, so überträgt er die entsprechende Datei. Login-Daten könne in den Phython-Skript eingetragen werden.

    Temperaturanzeige

    Da der Piface nur über acht Ausgänge verfügt, lässt sich eigentlich nur eine 7-Segment-Anzeige benutzen. Der Trick ist Multiplexing.
    Durch das umschalten von Pin 0 wird zwischen den beiden Anzeigen umgeschalten. Das passiert alle 0,01s also 100 mal pro Sekunde.
    Um auch zweistellige negative Zahlen darzustellen, habe ich folgende Regeln aufgestellt:
    Anzeigen negativer Temperaturen

    Der Pythonskript

    MAIN.py
    Der Pythonskript erstellt vier Threads: Temperaturmessung, Temperatur senden, Temperaturanzeige und Temperaturübertragung. Im MAIN-Thread läuft die Erkennung des Tastendrucks für einen Shutdown. Dieser Skript wird in /etc/rc.local eingetragen

    Die Webseite

    tempweb.zip

    Wetterdaten Eilenburg
    Temperatur: 14.5 °C
    Luftdruck: 1030.1 hPa
    Luftfeuchte: 68 %
    [mehr]