Phython GPIO Belegung

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Guten Tag

    Diese Frage mag zwar für euch sehr simpel klingen aber ich finde es einfach nicht: Wo steht die Pinbelegung der GPIOs für Python? Ich habe mir einen kleinen Server geschrieben der die einzelnen GPIOs steuert. Allerdings basierst dieser Java und zum besseren Händeln möchte ich diesen auf Python portieren. An sich funktioniert er auch und alles nur ich kann nicht wirklich erkennen welcher GPIO jetzt welchen Pin steuert. Per Google habe ich bestimmt 4-5 verschiedene Tabellen gefunden aber keine funktioniert.

    Habe auch mal versucht eine eigene Tabelle auf die Beine zu stellen dabei kam das raus:
    [font="verdana"]GPIO Pin[/font]
    [font="verdana"]0 3(SDA0)[/font]
    [font="verdana"]1 5(SCL0)[/font]
    [font="verdana"]4 7(GPIO7)[/font]
    [font="verdana"]7 26(CE1)[/font]
    [font="verdana"]8 24(CE6)[/font]
    [font="verdana"]9 21(MISO)[/font]
    [font="verdana"]10 19(MOSI)[/font]
    [font="verdana"]11 23(SCLK)[/font]
    [font="verdana"]14 8(TxD)[/font]
    [font="verdana"]15 10(RxD)[/font]
    [font="verdana"]17 11(GPIO0)[/font]
    [font="verdana"]18 12(GPIO1)[/font]
    [font="verdana"]21 13(GPIO2)[/font]
    [font="verdana"]22 15(GPIO3)[/font]

    [font="verdana"]Ich persönlich finde das diese auch relativ plausibel liest.[/font]
    [font="verdana"]MfG [/font]

  • Hallo audacity,

    zunächst mal wäre es wichtig die richtige Belegung zu nehmen.

    GPIO0 gibt es auf dem Rev.2 Board nicht (mehr). Da Du ein Modell B hast, nehme ich an, Du suchst die Pinbelegung für Rev.2.
    Ausserdem ist GPIO0 bei Dir irgendwie doppelt (Pin 3 und 17)
    Wenn Du solche Informationen brauchst, ist es sinnvoll zuerst mal auf elinux.org nachzuschauen.
    Dort findest Du auch die Pinbelegung und weitere Infos.

    cu,
    -ds-

  • Okey Danke die Seite kannte ich nicht. Trotz deiner Grafik funktioniert es nicht so wie es soll nur denke ich dieses mal das es an mir liegt:
    Das ganze rufe ich so in der PythonShell auf:

    Code
    import RPi.GPIO as GPIO
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(2, GPIO.OUT)


    und beim letzten Befehk kommt dann die Fehlermeldung:

    Zitat


    RPi.GPIO.InvalidChannelException: The channel sent is invalid on a Raspberry Pi


    Auch wenn ich es mit 02 versuche.
    Es soll der Pin 3 angesprochen werden.

    • Offizieller Beitrag

    wenn du pin3 willst dann musst du auch pin3 angeben. du hast hast ja vorher definiert das du das Pin-system benutzen willst ;). Für den channel mode musst du BCM anstelle von BOARD nutzen.


  • wenn du pin3 willst dann musst du auch pin3 angeben. du hast hadt ja vorger definiert das du das Pin-system benjtzen willst ;)

    Hi dbv,

    gibts da nicht unterschiedliche Nummerierungssysteme wie in wiringPi?
    Oder ein Standard-system?
    Du kannst ja physikalische oder BCM-Nummerierung wählen ...
    cu,
    -ds-

    • Offizieller Beitrag

    jupp, du kannst setmode(gpio.board) = Pin Zählung am P1 Header oder setmode(gpio.pcm) = channel nutzen.
    Wobei letzteres eventuell eine neuverkablung erfordert, wenn sich das layout ändert.
    Und wir gehen davon aus das man der Doku glauben darf ;)


  • jupp, du kannst setmode(gpio.board) = Pin Zählung am P1 Header oder setmode(gpio.pcm) = channel nutzen. Und wir gehen davon aus das man der Doku glauben darf ;)

    Dann denke ich, wird hier der Hund begraben sein. Ist aber auch verwirrend - da hab' ich anfangs auch geflucht wie ein Bürstenbinder.
    Die C-Libs sind da nicht anders ... alle nummerieren unterschiedlich per default.
    cu,
    -ds-

    • Offizieller Beitrag

    und dann ändern die noch einfach so das layout, was die Verwirrung komplett macht. :)

    Aber dafür gibts ja dokus die das halbwegs erklären, obwohl sie nicht die aktuelle Belegung aufzeigt, sondern nur davor warnt, ja auch die richten channels zu benutzen.

  • Ahhh Danke jetzt funktioniert es. Ich habe gedacht das ganze läuft so wie [font="sans-serif"] Pi4J library bei Java. Aber eine letzte Frage habe ich noch kann man die Pins in Python als Array deklarieren? Habe leider nur Grunderfahrungen in Python und habe auch über Google nichts gefunden.[/font]

    • Offizieller Beitrag

    suchst du eine liste:

    Code
    liste =[1,2,3,4]


    was einem 1dim. array entsprechen würde.
    oder dictionary:

    Code
    dict ={"gpio1":1,"gpio2":2}

    über beide kannst du simpel iterieren

    Code
    for x in liste:
        print x
    for x in dict.keys():
     print x, dict[x]
  • Hat sich erledigt. Ich hatte es so:

    Code
    PinAn = [(GPIO.output(3, GPIO.HIGH)), ..


    aber es wird ja sofort Ausgeführt. Jetzt habe ich es so:

    Code
    Pin = [(3), (5),..]


    und es wird so ausgeführt:


    Hab den Wald vor lauter Bäumen nicht mehr gesehen.

    Aber Danke das man hier als Anfänger auch ernst genommen wird. Hatte schon Foren wo solche Fragen mit dem Kommentar: benutz Google (was ich natürlich immer als erstes mache :))geschlossen wurden. Werde auf jeden Fall das Forum weiterempfehlen.:danke_ATDE:

    Einmal editiert, zuletzt von audacity363 (7. August 2013 um 17:04)

Jetzt mitmachen!

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