PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] GPIO Pins über Python Programieren



avus17
03.02.2013, 12:48
Also ich wolte mal versuchen die GPIO-Pins meines
Raspberry Pi's mit Python zu Programieren. Ich bekomme aber
immer eine Fehlermeldung:
Traceball (most recent call last):
File "home/pi/GPIO.py" , line3, in <module>
import RPi.GPIO as GPIO
RPi.GPIO.SetupException:
No access to /dev/mem. Try running as root



Kann mir jemand sagen wass ich falsch gemacht hab???

Klebwax
03.02.2013, 12:55
No access to /dev/mem. Try running as root
[/CODE]

MfG Klebwax

pinsel120866
03.02.2013, 13:01
Du musst eingeben

sudo python GPIO.py

Kampi
03.02.2013, 13:11
Du benötigst root-Rechte um auf die Chiphardware zugreifen zu dürfen.
SPI, UART, GPIO, I²C usw. benötigen alle root-Rechte.

avus17
03.02.2013, 13:21
Ich hab gerade

sudo python GPIO.py

eingegeben, aber jetzt bekomme ich folgende Fehlermeldung:
Traceback (most recent call last):
File "GPIO.py", line 5, in <module>
GPIO.setup(26 , GPIO.OUT)
RPi.GPIO.ModeNotSetException: Please set mode using GPIO.setmode(GPIO.BOARD) or GPIO.setmode(GPIO.BCM)

Der Code sieht wie folgt aus:
#!/usr/bin/python

import RPi.GPIO as GPIO

GPIO.setup(26 , GPIO.OUT)
GPIO.output(26 , True)

Kampi
03.02.2013, 13:33
Füg mal am Anfang noch ein

GPIO.setmode(GPIO.BOARD)

ein.
Dann sollte es klappen.

Klebwax
03.02.2013, 15:12
RPi.GPIO.ModeNotSetException: Please set mode using GPIO.setmode(GPIO.BOARD) or GPIO.setmode(GPIO.BCM)

Da sagt dir (zum zweiten Mal) die Fehlermeldung, was du tun sollst, und setzt hier auch noch ein Bitte davor, und du ignorierst das.

MfG Klebwax

avus17
03.02.2013, 16:32
Danke, jetzt funzt es endlich:p.

Kampi
03.02.2013, 16:35
Mit der Zeile

GPIO.setmode(GPIO.BOARD)

legst du das Pinmapping fest. Entweder du nimmst das Boardlayout, dann ist GPIO 0 Pin 1 und du musst schreiben:

GPIO.setup(3 , GPIO.OUT)
GPIO.output(3 , True)

Oder du nimmst das BCM Layout

GPIO.setmode(GPIO.BCM)

und dann ist GPIO 0 auch GPIO 0:

GPIO.setup(0 , GPIO.OUT)
GPIO.output(0 , True)

avus17
04.02.2013, 16:37
Danke nochmals, ich hab mein Program jetzt auf BMC Layout geändert.
Das finde ich irgendwie logischer.:p

tucow
04.02.2013, 17:07
So, um den ganzen sudo Quatsch zu umgehen führst Du einfach folgenden Befehl aus:

sudo usermod -a -G i2c <username>
Wobei Du <username> durch Deinen ersetzen musst, damit fügst Du Deinem Benutzer die sekundäre Gruppe i2c zu und kannst ab jetzt alle Python Scripts ohne sudo starten ;)

Und wenn Du noch das python vor dem Ausführen entfernen willst dann:

chmod +x Dateiname
Wobei Dateiname der Name von Deinem Script ist, dann kannst Du es mit

./Dateiname
ausführen.

Kampi
06.02.2013, 13:34
Und wenn Du noch das python vor dem Ausführen entfernen willst dann:

chmod +x Dateiname
Wobei Dateiname der Name von Deinem Script ist, dann kannst Du es mit

./Dateiname
ausführen.

Das klappt (bei mir) nicht.
Du kannst ein Programm nur mittels "./" starten wenn du dich in dem Verzeichnis befindest.
Wenn du z.B. im Verzeichnis "Programme" bist und dort ein Programm "HalloWelt.o" liegt, kannst du es mittels "./HalloWelt" starten.
Wenn du allerdings im Verzeichnis xy bist musst du das Programm mittels "/Programme/HalloWelt" starten.
Den Zusatz "python" musst du hinzufügen, damit das Raspberry weiß, dass das Programm mit dem Pythoninterpreter gestartet werden muss. Wenn du einfach nur "./HalloWelt.py" eingibst kommt ein Fehler (hier mit meinem Ultraschallprogramm):

http://img839.imageshack.us/img839/9761/unbenanntzty.png (http://imageshack.us/photo/my-images/839/unbenanntzty.png/)


Der Pythoninterpreter ist quasi dasselbe wie eine Java VM. Java Programme kannst du ja auch nur mittels der Java VM ausführen, da weder Pythonskripte noch Javaprogramme Binärdaten erzeugen und nicht mit dem Betriebssystem verlinkt werden können.
C-Programme kannst du ja auch nur aus der Konsole heraus starten. Wenn du eine .exe erzeugen willst, musst du das Programm erst linken (Programm schreiben, kompilieren, linken ist die Vorgehensweise).
Bei Python und Java fallen die letzten beiden Schritte weg, da die VM bzw. der Interpreter das kompilieren und linken zur Laufzeit machen. Aber dafür müssen diese gestartet werden. Und dies tust du über den Zusatz "python".

tucow
06.02.2013, 14:09
Ich weiss schon wie man Python programmiert und auch benutzt.. es scheint so als fehlt Dir etwas sehr elementares am Anfang Deines Python Scripts:

#!/usr/bin/python
Und das man sich im Verzeichnis des Scriptes befinden muss wenn man ./ benutzt sollte man wissen wenn man Linux benutzt, das ist noch elementarer ;)

Falls Du es mir nicht glaubst schau Dir den Screenshot an: https://dl.dropbox.com/u/5841140/Screen%20Shot%20RPi%20Python.png

Kampi
06.02.2013, 14:20
Ich weiss schon wie man Python programmiert und auch benutzt.. es scheint so als fehlt Dir etwas sehr elementares am Anfang Deines Python Scripts:

#!/usr/bin/python
Und das man sich im Verzeichnis des Scriptes befinden muss wenn man ./ benutzt sollte man wissen wenn man Linux benutzt, das ist noch elementarer ;)

Falls Du es mir nicht glaubst schau Dir den Screenshot an: https://dl.dropbox.com/u/5841140/Screen%20Shot%20RPi%20Python.png

Gut überzeugt :D
War aus dem Text nicht direkt ersichtlich mit dem "./" (ich bin da am Anfang auch drauf reingefallen und ich denke das ich da nicht der einzige bin ;) ).
Aber die Zeile

!/usr/bin/python

ist mir neu....
Hab mir extra ein Buch für Python gekauft um bisl damit vertraut zu werden und da steht das auch nicht drin :/

tucow
06.02.2013, 14:26
Habe hier auch einige Bücher über Python, leider fehlt das in den meisten deutschen Büchern.. leider beschäftigen sich viele Bücher auch zuerst mit dem Interpreter.. also python starten, Kram eingeben und auslesen.. wer braucht sowas? ;) Das sind meist die ersten 2-4 Kapitel die man sich echt sparen kann..

Die Zeile nach #!/usr/bin/python ist übrigens dafür gedacht, damit Du Umlaute benutzen kannst. Und die # ist ganz wichtig, die ist in diesem Kontext kein Kommentar.

Klebwax
07.02.2013, 07:00
#!/usr/bin/python

ist mir neu....
Hab mir extra ein Buch für Python gekauft um bisl damit vertraut zu werden und da steht das auch nicht drin :/

Möglicherweise, weil es mit Python wenig zu tun hat, Stichwort shebang. Gibts auch als #!/bin/sh etc.

MfG Klebwax

avus17
07.02.2013, 13:30
Danke hab gerade die sachen mal auf den Raspberry pi eingestellt is echt praktisch Danke!!!!!!!!!!!!!!!

Kampi
07.02.2013, 14:22
Bei mir klappt es nun auch mit dem Shebang.....die ganze Zeit ein Zeichen hinter dem Aufruf stehen (welches im Nano nicht angezeigt wurde) -.-