Freitag, 24. April 2020

Raspberry Pi - Adafruit Mini PiTFT 135x240 Color TFT Add-on [Programmierung]

In dem Betrag Raspberry Pi - Adafruit Mini PiTFT 135x240 Color TFT Add-on wurde das Display bereits näher beschrieben. In diesem Beitrag möchte ich das Display als Erweiterungsoption für die Raspberry Pi - zero : Wetterstation incl. OLED-Display vorstellen. Zur Anzeige von WLAN-, Sensor- und Speicherplatzinformationen. Zusätzlich kann direkt ein Upload des Webcam Bildes und ein Reboot per Tastendruck erfolgen.


Hinweis: Als Basis wurden die Beispiele von Adafruit für das Display verwendet.

Im ersten Schritt wurden die Befehle/Funktionen definiert, welche den jeweiligen Status anzeigen sollen oder per Buttondruck aufgerufen werden sollen.


cmdWlanSsid = "iwconfig wlan0 | grep ESSID | awk -F: '{print $2}'"
cmdHostName = "hostname -I | cut -d' ' -f1"
cmdCam = "vcgencmd get_camera | cut -d' ' -f2" #supported=1 detected=1 => OK
cmdDisk = 'df -h | awk \'$NF=="/"{printf "Disk: %d/%d GB  %s", $3,$2,$5}\''
cmdWebcam = '/home/pi/webcam/webcam.sh'
cmdReboot = 'sudo reboot'

def is_connected():
    try:
        # connect to the host -- tells us if the host is actually
        # reachable
        socket.create_connection(("www.google.com", 80))
        return "online"
    except OSError:
        pass
    return "offline"


# Temperatursensor ermitteln
SensorPfad = "/sys/bus/w1/devices/" # Pfad
SensorNames = open("/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves" ,"r")
Sensor = SensorNames.readline()
if Sensor:
    SensorNames.close() 


Anschließend werden diese Informationen an das Display in einer "while" Schleife gesendet.


while True:
     
        # Draw a black filled box to clear the image.
        draw.rectangle((0, 0, width, height), outline=0, fill=(0, 0, 0))
     
        #Show WLAN
        WLAN = subprocess.check_output(cmdWlanSsid, shell=True).decode("utf-8")
...
        # Write lines of text.
        y = top
        draw.text((x, y), WLAN, font=font, fill="#FFFFFF")
...
        # Display image.
        display.image(image, rotation)
        time.sleep(0.1)


 

Mit Hilfe von buttonA = digitalio.DigitalInOut(board.D23) kann das Drücken der Taste abgefangen werden. 


So erfolgt beim Drücken des "Button A" ein "Upload des Webcam Bildes" mit dem bekannten Script (https://sebastianhemel.blogspot.com/2019/11/raspberry-pi-camera-modul-v21.html) und beim Drücken des "Button B" die Anzeige eines "Copyright". Werden beiden Tasten gleichzeitig gedrückt, erfolgt ein Reboot des Pi.

...
        if buttonB.value and not buttonA.value:  # just button A pressed
...
            y = top
            text = "Webcam Upload..."
            draw.text((x, y), text, font=font, fill="#FFFFFF")
            y += font.getsize(text)[1]
            # Display image.
            display.image(image, rotation)
            subprocess.check_output(cmdWebcam, shell=True).decode("utf-8")
            draw.text((x, y), "...finished!", font=font, fill="#FFFFFF")
...



Anbei das komplette Python Script (rgb_display_stats-picture.py), welches man am Besten direkt beim Booten starten sollte.

sudo nano /etc/rc.local

Und die folgende Zeile hinzufügen:

sudo python3 /home/pi/rgb_display_stats-picture.py &

vor dem "exit 0" in der Datei.

Keine Kommentare:

Kommentar veröffentlichen