GPIOs Grundsatzfrage

  • Hallo,

    ich bin gerade dabei mich durch ein eigenes Projekt zu kämpfen. Ich habe an einem RPi3 ein OLED Display was auch schon läuft wie es soll. Beim Display handelt es sich um das Modell mit SSD1306 Controller (0,96 Zoll, I2C). Um es anzusteuern nutze ich die SSD 1306 Python Bibliothek von Adafruit.


    Jetzt wollte ich per GPIO noch ein paar Tasten abfragen bzw. eine LED als Statusleuchte nutzen.


    Dazu habe ich im Code das hier eingefügt:

    Code
    import RPi.GPIO as GPIO
    # Zählweise der Pins festlegen
    GPIO.setmode(GPIO.BOARD)

    Wenn ich das Python Skript laufen lasse, so meckert er beim GPIO.setmode.


    Es erscheint die Meldung:

    ....

    disp = Adafriut_SSD1306.SSD1306_128_64(rst=RST)

    .....

    Dann kommen noch vier Zeilen wo es dann wohl in 2 Modulen zum Fehler kommt. (SSD1306.py und GPIO.py)


    Ich gehe davon aus, dass hier irgendwo schon etwas für die GPIOs für Python importiert wird und das dann mit meiner Angabe kollidiert.


    Liege ich da richtig?


    Wenn der Raspi mit der Adafruit Bibliothek etwas für die GPIOs importiert, was ist dass denn dann und wie spreche ich das an?


    Würde es auch eine Kollision geben wenn ich WiringPi noch aufspielen würde oder lande ich da beim gleichen Ergebnis?


    Grüße


    Tiberius

  • Das klingt unlogisch... Bist du absolut sicher dass wirklich nur diese eine Zeile als Fehlermeldung auftaucht? Bitte alles posten


    Hast du alles in einer Scriptdatei untergebracht, oder läuft das Script fürs Display separat?

  • Hallo,


    ich habe alles in ein Script gepackt.


    Leider kann ich kein Copy/Paste machen, da ich an einem ganz anderen Rechner gerade bin.


    ...

    File "Test.py", line 113, in <module>

    disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)

    File "build/bdist.linux-armv71/egg/Adafruit_SSD1306/SSD1306.py", line 243, in __init__

    File "build/bdist.linux-armv71/egg/Adafruit_SSD1306/SSD1306.py", line 85, in __init__

    File "build/bdist.linux-armv71/egg/Adafruit_GPIO/GPIO.py", line 418, in get_platform_gpio

    File "build/bdist.linux-armv71/egg/Adafruit_GPIO/GPIO.py", line 172, in __init__


    ValueError: A different mode has already been set!

    ....


    Also hat er wohl bereits einen anderen Mode gesetzt. Nur welchen frag ich mich und wie spreche ich nun die GPIOs damit an?


    Danke schon mal für Deine Hilfe.


    Tiberius

  • Wie bootsmann bereits schrieb - hab das übersehen:

    Dann kommen noch vier Zeilen wo es dann wohl in 2 Modulen zum Fehler kommt. (SSD1306.py und GPIO.py)

    Du darfst dein Script nicht GPIO.py nennen. Grundsätzlich dürfen deine Scripts nicht den gleichen Dateinamen wie Module haben.


    Ansonsten: In welchem Verzeichnis befindest du dich und wie sehen deine beiden Scripts aus?

  • Hallo,


    das habe ich doch auch nicht. Wenn dann ist das Adafruit intern. Ich habe nur ein Skript und das heißt derzeit Test.py.

  • Ich hab hier auch son 0.96" SSD1306 OLED Display und habe das auch mal ausprobiert...


    Das erste was mich irritiert hat: Adafruit_SSD1306 ist eigentlich nur für Mikrocontroller vorgesehen. Für Python gibt es ein separates Adafruit_Python_SSD1306 Module, was auch hier beschrieben wird: https://learn.adafruit.com/ssd…nd-beaglebone-black/usage

    Daraus geht hervor dass import Adafruit_GPIO as GPIO im Module verwendet wird und das wiederum importiert RPi.GPIO https://github.com/adafruit/Ad…dafruit_GPIO/GPIO.py#L416


    Laut einer der Example Scripts sollte das aber kein Problem sein: https://github.com/adafruit/Ad…aster/examples/buttons.py


    Module installiert wie dort beschrieben wird. Dann Display via SPI angeschlossen (mein Display kann beides, SPI ist aber schneller) und dtparam=spi=on in /boot/config.txt eingetragen.

    Dann ein Test.py Script erstellt:

    Dann ein 2. Terminal geöffnet, die interaktive Python Konsole gestartet und:

    Code
    pi@raspberrypi:~$ python
    Python 2.7.13 (default, Nov 24 2017, 17:33:09)
    [GCC 6.3.0 20170516] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import RPi.GPIO as GPIO
    >>> GPIO.setmode(GPIO.BOARD)
    >>>

    ...Funktioniert!

  • Hallo,


    danke für den Tipp. Denke das wird es sein. Bin bisher allerdings noch nicht wieder dran gewesen es auszuprobieren.


    Grüße


    Tiberius