Ankündigung

Einklappen
Keine Ankündigung bisher.

Zugriff auf GPIO

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Zugriff auf GPIO

    Hallo, ich versuche in eine Logic-Datei(gpio.py) über RPi.GPIO eine LED zu schalten. Ich bekomme jedoch die Fehlermeldung in der Log.Datei:


    "2014-03-04 21:48:19 ERROR gpio Logic: gpio, File: /usr/smarthome/logics/gpio.py, Line: 6, Method: <module>, Exception: No access to /dev/mem. Try running as root!
    Traceback (most recent call last):
    File "/usr/smarthome/lib/scheduler.py", line 327, in _task
    exec(obj.bytecode)
    File "/usr/smarthome/logics/gpio.py", line 6, in <module>
    GPIO.setup(12, GPIO.OUT)
    RuntimeError: No access to /dev/mem. Try running as root!
    "
    Code:
    #gpio.py logics
    
    import RPi.GPIO as GPIO
    GPIO.setmode(GPIO.BOARD)
    GPIO.setwarnings(False)
    logger.info(GPIO.VERSION)
    
    GPIO.setup(12, GPIO.OUT)
    
    if sh.kueche.beleuchtung.decke.schalten():
        logger.info("LED Ein")
        GPIO.output(12, True)
    
    if not sh.kueche.beleuchtung.decke.schalten():
        logger.info("LED Aus")
        GPIO.output(12, False)

    Ist es möglich in einer Logic-Datei auf Ein-und Ausgänge des Raspberry zuzugreifen?

    Gruß Ivan

    #2
    Hi,

    hast Du die Fehlermeldung auch gelesen?

    Bis bald

    Marcus


    Gesendet von unterwegs

    Kommentar


      #3
      Hallo, danke für die schnelle antwort :-)

      ja Fehlermeldung sogar gelesen.. nicht nur per Strg-C kopiert und hier eingefügt.
      ich brauche für den Zugriff auf GPIO root Zugriff, nur wie realisiere ich dies?

      Oder gibt es eine bessere/einfache Möglichkeit eine LED zu schalten. 1-wire oder i2c wäre evtl. eine alternative?

      Gruß Ivan

      Kommentar


        #4
        Hallo,

        google: sudo

        Bis bald

        Marcus

        Kommentar


          #5
          Hallo Marcus
          das mit sudo war ein heisser Tip, danke.. mit
          Code:
           sudo python3 gpio.py
          schaffe ich es die LED zu schalten :-)

          wie bekomme ich Sudo jedoch in den logic-Aufruf?

          Code:
          #!/usr/bin/env python
          # logic.conf
          
          [gpio]
          	filename = gpio.py  #sudo hier??
          	watch_item = kueche.beleuchtung.decke.schalten
          Gruß Ivan

          Kommentar


            #6
            Indem du sh.py mit sudo startest:

            Code:
            sudo smarthome.py
            Mit freundlichen Grüßen
            Niko Will

            Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
            - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

            Kommentar


              #7
              Hallo, danke für die Unterstützung :-)

              mit "sudo smarthome.py" bekomme ich folgenden Fehler:
              sudo: no tty present and no askpass program specified

              Gruß Ivan

              Kommentar


                #8
                Hallo,

                ich versuche gerade für meine Frau ein LED-RGB-Streifen für Ihre Weihnachtsbeleuchtung zum leuchten zu bringen über Smarthome.py. Dazu habe ich das Image auf einen alten Raspberry gezogen und die LED´s an die GPIO´s angeschlossen (nicht direkt). Mit dem Programm wiringPi habe ich es auch schon geschafft, sie über die Konsole zu steuern.
                Da ich es jedoch über Smarthome.py steuern möchte habe ich RPi.GPIO installiert.
                Dazu habe ich folgendes gemacht.

                Code:
                 
                 sudo apt-get update  
                 sudo apt-get upgrade  
                 sudo apt-get install make gcc  
                 sudo apt-get install build-essential g++  
                 sudo apt-get install python-setuptools  
                 sudo apt-get install python-dev  
                 sudo wget [URL]https://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.5.11.tar.gz[/URL]  
                 sudo tar -xvf RPi.GPIO-0.5.11.tar.gz  
                 cd RPi.GPIO-0.5.11  
                 sudo python setup.py install  
                 cd ~  
                 sudo rm -rf RPi.GPIO-0.*  
                 sudo apt-get update sudo apt-get dist-upgrade
                Nun habe ich versucht über die Logic die LED´s anzusteuern.
                Dazu habe ich folgendes gemacht:

                test.py

                Code:
                #!/usr/bin/env python
                #gpio.py logics
                import time
                import RPIO.GPIO
                
                GPIO.setup(3, GPIO.OUT)
                
                while 1:
                    GPIO.output(3, True)
                Wenn ich nun diese aufrufe in etc/logic.conf

                Code:
                [test]
                    filename = test.py
                    cycle = 30
                bekomme ich folgende Fehlermeldung :

                File "/usr/smarthome/logics/hello.py", line 4, in <module>
                import RPIO.GPIO
                ImportError: No module named RPIO.GPIO
                Hat jemand eine Idee was ich da machen könnte und wäre so nett um mir zu helfen?

                Gruß und Danke

                Kommentar


                  #9
                  Schuss ins Blaue: Fehlt da nicht noch ein "sudo apt-get -y install python3-rpi.gpio" für die Python 3 Installation?

                  Kommentar


                    #10
                    Hallo Sandman,

                    da bekomme ich :

                    sudo apt-get -y install python3-rpi.gpio
                    Reading package lists... Done
                    Building dependency tree
                    Reading state information... Done
                    E: Unable to locate package python3-rpi.gpio
                    E: Couldn't find any package by regex 'python3-rpi.gpio'
                    Was fehlt mir denn da noch?

                    Kommentar


                      #11
                      Hi,

                      habe das Problem nun beheben können.
                      Ich werde meine Installationen noch einmal mit einem neuen Image testen und werde dann berichten, wie die Installtion zu erfolgen hat, damit man diese GPIO benutzen kann.

                      Gruß Manuel

                      Kommentar


                        #12
                        Hallo Manuel,

                        könntest Du Deine Erfahrungen berichten bzw. mitteilen, wie man die GPIOs nutzbar machen kann?

                        Danke und Gruß
                        Michael

                        Kommentar


                          #13
                          Hallo,

                          ich habe meine Steuerung nun soweit fertig. Ich hoffe dass ich an diesem Wochenende die Zeit finde die Schritte hier zu posten.

                          Gruß Manuel

                          Kommentar


                            #14
                            Hallo,

                            wie gestern versprochen schreibe ich heute eine kleine Anleitung wie ich die GPIOS zum schalten gebracht habe:
                            Als erstes habe ich das „aktuelle Smarthome.py“ Image auf die SD-Karte kopiert.
                            Dann habe ich das Neueinlesen der Paketlisten durchgeführt mit:

                            Code:
                             sudo apt-get update
                            Als nächstes habe ich die installierten Pakete wenn möglich auf verbesserte Version aktualisieren mit:

                            Code:
                            sudo apt-get upgrade
                            Danach habe ich folgende Pakete nachinstalliert:

                            Code:
                            sudo apt-get install build-essential g++
                            Code:
                            sudo apt-get install git-core
                            [FONT=arial]sudo apt-get install python3-dev
                            sudo apt-get install libevent-dev
                            sudo apt-get install python3-dev[/FONT]


                            Danach habe ich das Paket
                            "RPIO" installiert :

                            Code:
                            git clone https://github.com/metachris/RPIO.git
                            cd RPIO
                            sudo python3 setup.py install
                            [FONT=arial][/FONT]


                            Danach habe ich das Paket "wiringPi" installiert :

                            Code:
                            sudo apt-get install git-core
                            git clone git://git.drogon.net/wiringPi
                            cd wiringPi
                            ./build[FONT=arial][/FONT]



                            Danach habe ich das Paket "wiringPi2" installiert :

                            Code:
                            git clone https://github.com/Gadgetoid/WiringPi2-Python.git
                            cd WiringPi2-Python
                            sudo python3 setup.py install
                            sudo apt-get install python3-pip
                            Danach habe ich das Paket "RPi.GPIO-0.5.11" installiert :

                            [CODE]

                            sudo wget https://pypi.python.org/packages/sou...-0.5.11.tar.gz
                            sudo tar -xvf RPi.GPIO-0.5.11.tar.gz
                            cd RPi.GPIO-0.5.11
                            sudo python3 setup.py install
                            [/CODE]
                            Als nächstes habe ich folgendes Skript unter: "/usr/local/skripte" erstellt.
                            Dieses Skript erlaubt es, die GPIO´s auch ohne Root rechte zu benutzen.

                            "gpio_export.sh"

                            Code:
                            #!/bin/sh
                            
                            echo "2" > /sys/class/gpio/export
                            echo "3" > /sys/class/gpio/export
                            echo "4" > /sys/class/gpio/export
                            echo "7" > /sys/class/gpio/export
                            echo "8" > /sys/class/gpio/export
                            echo "9" > /sys/class/gpio/export
                            echo "10" > /sys/class/gpio/export
                            echo "11" > /sys/class/gpio/export
                            echo "14" > /sys/class/gpio/export
                            echo "15" > /sys/class/gpio/export
                            echo "17" > /sys/class/gpio/export
                            echo "18" > /sys/class/gpio/export
                            echo "22" > /sys/class/gpio/export
                            echo "23" > /sys/class/gpio/export
                            echo "24" > /sys/class/gpio/export
                            echo "25" > /sys/class/gpio/export
                            echo "27" > /sys/class/gpio/export
                            
                            echo "out" > /sys/class/gpio/gpio2/direction
                            echo "out" > /sys/class/gpio/gpio3/direction
                            echo "out" > /sys/class/gpio/gpio4/direction
                            echo "out" > /sys/class/gpio/gpio7/direction
                            echo "out" > /sys/class/gpio/gpio8/direction
                            echo "out" > /sys/class/gpio/gpio9/direction
                            echo "out" > /sys/class/gpio/gpio10/direction
                            echo "out" > /sys/class/gpio/gpio11/direction
                            echo "out" > /sys/class/gpio/gpio14/direction
                            echo "out" > /sys/class/gpio/gpio15/direction
                            echo "out" > /sys/class/gpio/gpio17/direction
                            echo "out" > /sys/class/gpio/gpio18/direction
                            echo "out" > /sys/class/gpio/gpio22/direction
                            echo "out" > /sys/class/gpio/gpio23/direction
                            echo "out" > /sys/class/gpio/gpio24/direction
                            echo "out" > /sys/class/gpio/gpio25/direction
                            echo "out" > /sys/class/gpio/gpio27/direction
                            
                            chmod 666 /sys/class/gpio/gpio2/value
                            chmod 666 /sys/class/gpio/gpio3/value
                            chmod 666 /sys/class/gpio/gpio4/value
                            chmod 666 /sys/class/gpio/gpio7/value
                            chmod 666 /sys/class/gpio/gpio8/value
                            chmod 666 /sys/class/gpio/gpio9/value
                            chmod 666 /sys/class/gpio/gpio10/value
                            chmod 666 /sys/class/gpio/gpio11/value
                            chmod 666 /sys/class/gpio/gpio14/value
                            chmod 666 /sys/class/gpio/gpio15/value
                            chmod 666 /sys/class/gpio/gpio17/value
                            chmod 666 /sys/class/gpio/gpio18/value
                            chmod 666 /sys/class/gpio/gpio22/value
                            chmod 666 /sys/class/gpio/gpio23/value
                            chmod 666 /sys/class/gpio/gpio24/value
                            chmod 666 /sys/class/gpio/gpio25/value
                            chmod 666 /sys/class/gpio/gpio27/value
                            
                            chmod 666 /sys/class/gpio/gpio2/direction
                            chmod 666 /sys/class/gpio/gpio3/direction
                            chmod 666 /sys/class/gpio/gpio4/direction
                            chmod 666 /sys/class/gpio/gpio7/direction
                            chmod 666 /sys/class/gpio/gpio8/direction
                            chmod 666 /sys/class/gpio/gpio9/direction
                            chmod 666 /sys/class/gpio/gpio10/direction
                            chmod 666 /sys/class/gpio/gpio11/direction
                            chmod 666 /sys/class/gpio/gpio14/direction
                            chmod 666 /sys/class/gpio/gpio15/direction
                            chmod 666 /sys/class/gpio/gpio17/direction
                            chmod 666 /sys/class/gpio/gpio18/direction
                            chmod 666 /sys/class/gpio/gpio22/direction
                            chmod 666 /sys/class/gpio/gpio23/direction
                            chmod 666 /sys/class/gpio/gpio24/direction
                            chmod 666 /sys/class/gpio/gpio25/direction
                            chmod 666 /sys/class/gpio/gpio27/direction
                            Dieser Skript braucht noch die passenden Rechte:

                            Code:
                            cd /usr/local/skripte
                            sudo chmod +x gpio_export.sh
                            Dieses Skript muss bei jedem Neustart ausgeführt werden. Aus diesem Grund habe ich die "rc.local" um folgende Zeile erweitert : (/etc rc.local)

                            Code:
                            /usr/local/skripte/gpio_export.sh&
                            Dieses muss zwingend vor dem "exit 0" stehen.

                            Danach habe ich mir eine Lauflicht-Logic geschrieben die im Smarthome.py-Verzeichnis logic liegt.

                            LED1.py ( Led1.py auf UTF-8 ohne BOM)

                            Code:
                            #!/usr/bin/python3.2
                            
                            import time
                            import wiringpi2
                                                                # importiert die funktion time
                            wiringpi2.wiringPiSetupSys()
                                                                        
                            if sh.general.windturbine.start() == True:
                            
                                t = 0.25  
                                while 1:                                       # endlosschleife
                                    x = 0                                       # setzt den zähler auf 0
                                    while x < 3:         # schleife von 0 bis 3
                                        if sh.general.windturbine.start() == False:
                                            wiringpi2.pinMode(2, 1)               # setzt den GPIO port  auf ausgang
                                            wiringpi2.pinMode(3, 1)
                                            wiringpi2.pinMode(4, 1)
                                            
                                            wiringpi2.pinMode(14, 1)
                                            wiringpi2.pinMode(15, 1)
                                            wiringpi2.pinMode(17, 1)
                                            
                                            wiringpi2.pinMode(18, 1)
                                            wiringpi2.pinMode(27, 1)
                                            wiringpi2.pinMode(22, 1)
                                            wiringpi2.digitalWrite(2, 0)        # setzt den GPIO ports 4 auf True     
                                            wiringpi2.digitalWrite(3, 0)        # setzt den GPIO ports 2 auf False
                                            wiringpi2.digitalWrite(4, 0)        # setzt den GPIO ports 3 auf False
                                            wiringpi2.digitalWrite(14, 0)        # setzt den GPIO ports 2 auf False
                                            wiringpi2.digitalWrite(15, 0)        # setzt den GPIO ports 3 auf False
                                            wiringpi2.digitalWrite(17, 0)        # setzt den GPIO ports 2 auf False
                                            wiringpi2.digitalWrite(18, 0)        # setzt den GPIO ports 3 auf False
                                            wiringpi2.digitalWrite(27, 0)        # setzt den GPIO ports 2 auf False
                                            wiringpi2.digitalWrite(22, 0)        # setzt den GPIO ports 3 auf False
                                            break
                                        x += 1    
                                        time.sleep(t)
                                        if x == 1:
                                            wiringpi2.pinMode(2, 1)               # setzt den GPIO port  auf ausgang
                                            wiringpi2.pinMode(3, 1)
                                            wiringpi2.pinMode(4, 1)
                                            
                                            wiringpi2.pinMode(14, 1)
                                            wiringpi2.pinMode(15, 1)
                                            wiringpi2.pinMode(17, 1)
                                            
                                            wiringpi2.pinMode(18, 1)
                                            wiringpi2.pinMode(27, 1)
                                            wiringpi2.pinMode(22, 1)
                                            
                                            wiringpi2.digitalWrite(2, 0)        # setzt den GPIO ports 4 auf True     
                                            wiringpi2.digitalWrite(3, 0)        # setzt den GPIO ports 2 auf False
                                            wiringpi2.digitalWrite(4, 1)        # setzt den GPIO ports 3 auf False
                                            
                                            wiringpi2.digitalWrite(14, 1)        # setzt den GPIO ports 2 auf False
                                            wiringpi2.digitalWrite(15, 1)        # setzt den GPIO ports 3 auf False
                                            wiringpi2.digitalWrite(17, 0)        # setzt den GPIO ports 2 auf False
                                            
                                            wiringpi2.digitalWrite(18, 1)        # setzt den GPIO ports 3 auf False
                                            wiringpi2.digitalWrite(27, 1)        # setzt den GPIO ports 2 auf False
                                            wiringpi2.digitalWrite(22, 0)        # setzt den GPIO ports 3 auf False
                                        
                                    
                                
                                        if x == 2:    
                                            wiringpi2.pinMode(2, 1)               # setzt den GPIO port  auf ausgang
                                            wiringpi2.pinMode(3, 1)
                                            wiringpi2.pinMode(4, 1)
                                            
                                            wiringpi2.pinMode(14, 1)
                                            wiringpi2.pinMode(15, 1)
                                            wiringpi2.pinMode(17, 1)
                                            
                                            wiringpi2.pinMode(18, 1)
                                            wiringpi2.pinMode(27, 1)
                                            wiringpi2.pinMode(22, 1)
                                            
                                            wiringpi2.digitalWrite(2, 1)        # setzt den GPIO ports 4 auf True     
                                            wiringpi2.digitalWrite(3, 1)        # setzt den GPIO ports 2 auf False
                                            wiringpi2.digitalWrite(4, 0)        # setzt den GPIO ports 3 auf False
                                            
                                            wiringpi2.digitalWrite(14, 0)        # setzt den GPIO ports 2 auf False
                                            wiringpi2.digitalWrite(15, 0)        # setzt den GPIO ports 3 auf False
                                            wiringpi2.digitalWrite(17, 1)        # setzt den GPIO ports 2 auf False
                                            
                                            wiringpi2.digitalWrite(18, 1)        # setzt den GPIO ports 3 auf False
                                            wiringpi2.digitalWrite(27, 1)        # setzt den GPIO ports 2 auf False
                                            wiringpi2.digitalWrite(22, 0)        # setzt den GPIO ports 3 auf False
                                        
                                
                                        if x == 3:
                                            wiringpi2.pinMode(2, 1)               # setzt den GPIO port  auf ausgang
                                            wiringpi2.pinMode(3, 1)
                                            wiringpi2.pinMode(4, 1)
                                            
                                            wiringpi2.pinMode(14, 1)
                                            wiringpi2.pinMode(15, 1)
                                            wiringpi2.pinMode(17, 1)
                                            
                                            wiringpi2.pinMode(18, 1)
                                            wiringpi2.pinMode(27, 1)
                                            wiringpi2.pinMode(22, 1)
                                            
                                            wiringpi2.digitalWrite(2, 1)        # setzt den GPIO ports 4 auf True     
                                            wiringpi2.digitalWrite(3, 1)        # setzt den GPIO ports 2 auf False
                                            wiringpi2.digitalWrite(4, 0)        # setzt den GPIO ports 3 auf False
                                            
                                            wiringpi2.digitalWrite(14, 1)        # setzt den GPIO ports 2 auf False
                                            wiringpi2.digitalWrite(15, 1)        # setzt den GPIO ports 3 auf False
                                            wiringpi2.digitalWrite(17, 0)        # setzt den GPIO ports 2 auf False
                                            
                                            wiringpi2.digitalWrite(18, 0)        # setzt den GPIO ports 3 auf False
                                            wiringpi2.digitalWrite(27, 0)        # setzt den GPIO ports 2 auf False
                                            wiringpi2.digitalWrite(22, 1)        # setzt den GPIO ports 3 auf False
                                            
                            if sh.general.windturbine.start() == False:            
                                wiringpi2.pinMode(2, 1)               # setzt den GPIO port  auf ausgang
                                wiringpi2.pinMode(3, 1)
                                wiringpi2.pinMode(4, 1)
                                
                                wiringpi2.pinMode(14, 1)
                                wiringpi2.pinMode(15, 1)
                                wiringpi2.pinMode(17, 1)
                                            
                                wiringpi2.pinMode(18, 1)
                                wiringpi2.pinMode(27, 1)
                                wiringpi2.pinMode(22, 1)
                                        
                                wiringpi2.digitalWrite(2, 0)        # setzt den GPIO ports 4 auf True     
                                wiringpi2.digitalWrite(3, 0)        # setzt den GPIO ports 2 auf False
                                wiringpi2.digitalWrite(4, 0)        # setzt den GPIO ports 3 auf False
                                            
                                wiringpi2.digitalWrite(14, 0)        # setzt den GPIO ports 2 auf False
                                wiringpi2.digitalWrite(15, 0)        # setzt den GPIO ports 3 auf False
                                wiringpi2.digitalWrite(17, 0)        # setzt den GPIO ports 2 auf False
                                            
                                wiringpi2.digitalWrite(18, 0)        # setzt den GPIO ports 3 auf False
                                wiringpi2.digitalWrite(27, 0)        # setzt den GPIO ports 2 auf False
                                wiringpi2.digitalWrite(22, 0)        # setzt den GPIO ports 3 auf False
                            Dann ein Item erstellt:

                            Code:
                            [general]
                                [[windturbine]]
                                    [[[start]]]
                                    type = bool
                                        visu_acl = rw
                                        knx_dpt = 1
                                        enforce_updates = yes
                                        knx_listen = 15/4/0
                                        knx_send = 15/4/0
                                        [[[[uzsu]]]]
                                                type=dict
                                                uzsu_item=general.windturbine.start
                                                cache=True
                                                visu_acl=rw
                            Und schon könnt ihr die GPIOS benutzen.

                            Im Anhang habe ich alle benötigten Dateien angehängt:




                            Angehängte Dateien

                            Kommentar


                              #15
                              Hallo,

                              super Anleitung danke. Werd es die nächsten Tage mal probieren....
                              Gibt es einen Grund, dies nicht als Plugin zu realisieren?

                              Danke und Gruß
                              Michael

                              Kommentar

                              Lädt...
                              X