Posts by joline

    hyle Das stimmt schon.


    Ich habe ein Display mit zwei Tastern. Mein eigentliches Ziel ist es ja auch, die beiden vorhandenen Taster universeller nutzen zu können. Also ich möchte bei jedem Taster unterscheiden zwischen Single-Click, Double-Click und Hold. Das kann man sicher auch mit digitalio irgendwie hinbekommen. Aber mit gpiozero scheint das doch einfacher zu gehen. Insofern war ich mit der hier gegebenen Antwort, dass gpiozero bevorzugt zu verwenden sei, recht zufrieden. ;) gpiozero hat, so wie ich das gesehen habe, ein eingebautes Event-Handling. Das wäre für meine Zwecke eben recht nützlich. ;) Ich denke, mit digitalio muss ich das in einer Schleife (evtl. in einem Backgroundworker?) erst nachbauen.

    Hm, scheint wohl doch nicht so einfach zu ersetzen zu sein. :(


    Bei dem Output ist klar:

    Code
    # Turn on the backlight
    # digitalio
    backlight = digitalio.DigitalInOut(board.D22)
    backlight.switch_to_output()
    backlight.value = True
    
    # gpiozero
    backlight = Led("GPIO22")
    backlight.on()

    Input ist auch klar:

    Aber bei den beiden In-/Out-Pins gibt es wohl kein Äquivalent. Laut gpiozero-Klassenbibliothek gibt es nur TopLevel GPIODevice:

    Code
    # Configuration for CS and DC pins (these are FeatherWing defaults on M0/M4):
    # digitalio
    cs_pin = digitalio.DigitalInOut(board.CE0)  #Pin24
    dc_pin = digitalio.DigitalInOut(board.D25)  #Pin22
    
    # gpiozero
    cs_pin = GPIODevice("GPIO8")
    dc_pin = GPIODevice("GPIO24")

    Ist das richtig?


    Update:
    Noch eine Frage: Wie könnte man "spi = board.SPI()" mit gpiozero realisieren?

    Aha, ok. Danke.


    Dann werde ich mich wohl eher mit gpiozero befassen. Ich habe zwar die Lite-Version, aber dann installiere ich das eben nach.


    Ich habe da momentan ein Beispielprogramm, um ein Mini PiTFT anzusteuern und dort wird digitalio verwendet. Aber dann werde ich mal versuchen, das umzuschreiben. Ist ja nicht komplex, sollte also nicht so schwer sein.

    Hallo,


    ich habe mal eine Frage zu zwei verschiedenen Modulen, um mit den GPIOs zu arbeiten.


    Da gibt es zum Einem "digitalio" (aus "circuitpython"):

    Python
    import digitalio
    from board import *
    
    led = digitalio.DigitalInOut(D13)
    led.direction = digitalio.Direction.OUTPUT
    led.value = True


    Und zum Anderen ist da "gpiozero":

    Python
    from gpiozero import LED
    
    red = LED(17)
    red.on()

    Mit beiden kann man u.a. Outputs/LEDs ansteuern und Inputs/Button abfragen. Wann sollte man welche der beiden nehmen? Gibt es da Performance-/Ressourcenunterschiede? Ist die eine moderner als die andere? Oder ist das Geschmacksache?

    ICH HABS GEFUNDEN!!!

    :D

    @__deets__ Du hattest Recht!

    Ich habe aber inspiriert euch deine Anmerkung mit fill nochmal geschaut: https://github.com/adafruit/Ad…t_rgb_display/rgb.py#L193


    Das wäre eine Erklärung. Installier auch mal numpy.

    Ich hatte das gestern per pip3 installiert. Aber da ging wohl was schief. Ich habe das gerade noch mal mit apt install... installiert und siehe da... es geht! :)


    Vielen Dank.

    Hm, das stimmt. Muss mal suchen, wo die Datei zu finden ist. Ich nutze sonst eher Hochsprachen, Python ist noch neu für mich. ;)

    🤷‍♂️ Alles etwas undurchsichtig. Fakt ist das Display (ich habe es an einem ESP32S2) schafft mit 20MHz die Framerate. Ich würde mal durch Print-debugging versuchen dem bottleneck auf die Spur zu kommen. Die Struktur von https://github.com/adafruit/Ad…t_rgb_display/rgb.py#L103 ist ja recht simpel.

    Nutzt Du in Deinem Code auch die Image() Funktion?


    Update:
    Ich sehe gerade, in dem animated_gif Beispiel wird auch "self.display.image()" verwendet und hier läuft es einigermaßen flüssig. Komisch.

    @__deets__ mit print-debugging habe ich ja herausgefunden, dass das Problem bei der Funktion "disp.image()" liegt. Dieser Aufruf braucht 3..4 Sekunden.


    Jetzt habe ich auch Blinka installiert (eine ziemliche Orgie, was dieses Script alles installiert OMG!) und es wurde nicht besser.

    Ein

    Code
     ls /dev/spi*

    liefert

    Code
    /dev/spidev0.0  /dev/spidev0.1

    Damit ist wohl auch SPI aktiviert. Ob es allerdings auch genutzt wird?...


    Ich habe mal das Script animated_gif zu Laufen gebracht. Das zeigt ein Gif einigermaßen flüssig an.


    Also das Problem ist wirklich die Funktion "disp.image()", die unverhältnismäßig lange braucht.

    Ich habe numpy schon installiert. Aber ich habe gerade noch mal einen Hinweis auf der Adafruit Seite gefunden. Da steht ziemlich unscheinbar ganz oben im ersten Satz unter "Setup":

    Quote

    "You'll need to install the Adafruit_Blinka library that provides the CircuitPython support in Python."

    Das habe ich noch nicht gemacht. Ich hatte das überlesen und nur die Komponenten installiert, die weiter unten aufgeführt sind. Vielleicht ist das ja ein Grund. Werde ich gleich heute Abend mal ausprobieren. Da ist auch ein kleines Blinka-Test Programm dabei, was SPI checkt.


    Update:

    Interessant ist allerdings, was ich gerade im Code des Animated_Gif-Examples gefunden habe:

    Quote

    This example is for use on (Linux) computers that are using CPython with
    Adafruit Blinka to support CircuitPython libraries. CircuitPython does
    not support PIL/pillow (python imaging library)!

    Das würde sich ja dann sozusagen widersprechen. Einerseits soll man Blinka installieren (Adafruit_Blinka library that provides the CircuitPython support) und anderseits unterstützt CircuitPython aber nicht PIL...

    Hm, ich habe leider keinen Oszi...

    Erst hat es gar nicht funktioniert und nichts angezeigt. Dann habe ich via "raspi-config" die SPI Schnittstelle enabled. Danach wurde alles wie erwartet angezeigt.


    Es gibt ein anderes Testprogramm, welches auf die beiden Taster reagiert und dementsprechend einen bestimmten Bereich einfärbt. Das funktioniert mit der Funktion "disp.fill()" und ist so ziemlich verzögerungsfrei. Probleme scheint eben die Funktion "disp.image()" zu machen.


    Nehmen wir mal an, da wird kein Hardware SPI verwendet (obwohl wie geschrieben die Programme erst nach enablen funktionierten), kann ich das auch ohne Oszi rausbekommen?

    Hallo,


    ich habe ein Adafruit PiTFT 1.3" per SPI an einen Raspberry Zero angeschlossen. Als ersten Test habe ich zur Ansteuerung das Beispiel Python Script verwendet. Das funktioniert auch so weit, es werden Werte angezeigt.


    Ich habe das Script dann erweitert um die Anzeige der aktuellen Zeit:

    Code
        now = datetime.now()
        current_time = now.strftime("%H:%M:%S")
        draw.text((x, y), "Time: " + current_time, font=font, fill="#FF00FF")

    Funktioniert auch, aber... die Bildaktualisierungsrate liegt bei 3..4 Sekunden!


    Das liegt an dem Aufruf:

    Code
        # Display image.
        disp.image(image, rotation)

    Diese Funktion braucht recht lange. Weiß hier jemand, warum das so ist? Liegt das an der Python-Implementierung?


    Eigentlich wollte ich das Display nutzen, um dort eine Trendkurve mit einer deutlich höheren Aktualisierungsrate (min. 100ms) anzuzeigen...


    - Gibt es noch eine andere Möglichkeit, Text auszugeben, als diesen vorher in ein Image zu schreiben?

    - Sollte man besser nur einzelne Bildteile neu schreiben und nicht das gesamte Bild?

    - Hat jemand vielleicht ein Beispiel, in dem die Ansteuerung schneller ist?


    Vielen Dank schon mal.