Module für GPIOs

  • 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?

  • CircuitPython ist vor allem erst einmal für Mikrocontroller und basiert auf MicroPython. Und dann gibt es eine ”Emulationsschicht” damit die Kernmodule von CircuitPython auch mit ”normalem” Python laufen.

    Ich persönlich würde `gpiozero` bevorzugen. Das sollte auf einem Pi OS bereits installiert sein — da kann man sofort mit loslegen.

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • 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.

  • 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?

    Einmal editiert, zuletzt von joline (23. Februar 2021 um 15:32)

    • Offizieller Beitrag

    Das ist eine ganz andere Situation als eine LED zu schalten, wonach Du oben gefragt hattest. Wenn der Hersteller des Displays ein Modul anbietet, dann ist es natürlich sinnvoller dieses dafür zu verwenden. Man muss das Rad ja nicht auf Krampf neu erfinden. ;)

  • Wann sollte man welche der beiden nehmen?

    man nimmt natürlich das was der Code fordert wenn man das nicht selber zu anderem umschreiben will oder kann. ;) ...

    wenn ich mit 500 PS auf den Acker will kaufe ich kein Rennauto es sei denn ich kann das für den Acker selber umschweissen. :lol:

    also höher legen, fette Treckerreifen ran und auf den Acker.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • 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.

    • Offizieller Beitrag

    Ich bin (aus Mangel an Erfahrung mit diesem Modul) nicht sicher inwieweit sich digitalio GPIOs "krallt", die nicht davon verwendet werden. Evtl. könnte man beide Module nebeneinander verwenden, solange die sich nicht gegenseitig im Wege stehen.

  • jar Ich könnte schwören die von Top Gear hatten mal einen Lamborghini zum pflügen eines Feldes ausprobiert, weil Lamborghini ja mal mit Traktoren angefangen hat. Ich finde das Video leider nicht wieder.

    Aber die andere Richtung: einen Traktor mit dem man auch auf die Rennstrecke kann, haben sie natürlich auch im Angebot: https://www.topgear.com/car-news/top-g…r-tvs-track-tor

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • weil Lamborghini ja mal mit Traktoren angefangen hat

    ich weiss!

    aber schrieb ich nicht extra:

    wenn ich mit 500 PS auf den Acker will kaufe ich kein Rennauto es sei denn ich kann das für den Acker selber umschweissen. :lol:

    also höher legen, fette Treckerreifen ran und auf den Acker.

    ich habe Lambo extra deswegen nicht erwähnt!

    Es gab mal so eine Geschichte das er einen Ferrari in seiner Wunschfarbe nicht bekam und sich dann entschloss selber Sportwagen zu bauen, aber das finde ich auch nicht mehr.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!