GPIO fake in Windows

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

    da Python echt Plattformunabhängig ist, entwickle ich auch auf der Win Plattform Programme für den RasPi. Allerdings bin ich unbeleckt was Objektorientierung betrifft.

    Also ich wollte einfach GPIO Functions erzeugen, damit das Programm läuft.

    Mein Versuch... (Vorsicht beim Lesen: Python Gurus könnten einen Anfall bekommen :)
    [PHP]
    # ersetzt zum testen die GPIO Hardware

    # import nix_GPIO as GPIO

    print ('nix_GPIO loaded - testing without hardware')

    class GPIO :
    def __init__(self) :
    pass
        
    BMC = 0
    HIGH = True
    LOW = False
        
    def setmode(self,x) :
    pass

    def setup (self,a,b) :
    pass
        
    def cleanup(self) :
    pass
        
    def output(self,i,b) :
    pass
        
    def input(self,g) :
    return True

    #print ('input:', GPIO.input(5))
    [/PHP]

    Bitte kann mir jemand die Handführen (damit das Modul pfeifft) und einen Link mit einer schlichten Erklärung.

    Danke

    Gottfried


  • Mein Versuch... (Vorsicht beim Lesen: Python Gurus könnten einen Anfall bekommen :)

    Um das anzuwenden gewöhn dir an kein Leerzeichen vor einem Doppelpunkt zu machen :fies: Also Nicht "class GPIO :" sondern "class GPIO:" usw. Auch vor einer Klammer sollte man kein Leerzeichen setzen: Nicht "print ('bla')" sondern "print('bla')".
    Nach einem Komma kann man ruhig ein Leerzeichen setzen, das fördert wiederum die Lesbarkeit.

    Eine passende Anleitung habe ich gerade nicht zur Hand, versuche es aber mal mit eigenen Worten zu beschreiben - vermutlich is das sogar besser weil die ganzen Anleitungen ein für mich unverständliches Fachchinesisch aufweisen... :fies:

    RPi.GPIO ist keine Klasse - denn eine Klasse würde es erfordern vorher ein Objekt erzeugen zu müssen. Beispiel:

    [PHP]from __future__ import print_function

    class GPIO:
    def __init__(self):
    print('nix_GPIO loaded - testing without hardware')
    self.BCM=0
    self.HIGH=True
    self.LOW=False

    def setmode(self, mode):
    pass

    def setup(self, pin, mode):
    pass

    def cleanup(self):
    pass

    def output(self, pin, state):
    pass

    def input(self, pin):
    return True
    [/PHP]

    Das speichern wir zum Beispiel in die Datei fake_gpio.py

    Nun öffnen wir die python Konsole und machen folgendes:

    Python
    >>> from fake_gpio import GPIO
    >>> IO=GPIO()
    nix_GPIO loaded - testing without hardware
    >>> IO.setmode(IO.BCM)
    >>> print('input:', IO.input(5)) 
    input: True
    >>> print('input:', IO.input(6))
    input: True
    >>>

    Würde man nicht IO=GPIO() vorher machen könnte man nicht auf die Funktionen zugreifen.

    Lässt man aber das class Konstrukt weg, funktioniert es genau so wie man es vom RPi.GPIO Module kennt:

    Man greift dabei auf die Funktionen in der Datei zu. Die Datei heißt zwar fake_gpio aber man imported es ja "as GPIO". Würde man nur "import fake_gpio" verwenden, müssten die Aufrufe "fake_gpio.setmode(fake_gpio.BCM)" lauten.

    Es reicht wenn ihr fake_gpio.py unter Windows im selben Verzeichnis liegen habt wie euer Script.


    PS: Die von dir verwendeten " print "s sind eigentlich für python3. Da es aber sein könnte dass du das Module auch in python2 verwenden willst stellt die erste Zeile eine Kompatibilität her, in python2 ist print nämlich noch keine Funktion... Für python3 kann man die Zeile drin lassen.


    //EDIT: Nun sollte das nix_GPIO Module vollständig sein ;)

    //EDIT2: Zur Vereinfachten Entwicklung ohne jedes mal die import's ändern zu müssen, kann man einfach folgendes machen:
    [code=php]
    try:
    from RPi import GPIO
    except:
    import fake_gpio as GPIO


    GPIO.setmode(GPIO.BCM)
    #...
    [/php]
    Erst wird versucht das Echte Module zu importieren, schlägt das fehl wird das Fake Module importiert. Das Fake Module habt ihr nur unter Windows und schon könnt ihr die Scriptdatei ohne weitere Änderungen hin und her kopieren.

Jetzt mitmachen!

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