Kampis Elektroecke

GPIO

Raspberry Pi

Hier möchte ich zeigen, wie die GPIO des Raspberry Pi geschaltet und bedient werden können. Zudem zeige ich hier auch, wie die GPIO über das Netzwerk bzw. das Internet geschaltet werden können, um so z. B. eine App-basierte Steuerung zu realisieren.

Funktionsweise der GPIO auf dem Raspberry Pi:

Bevor ich darauf eingehe, wie die GPIOs per Web angesteuert werden, zeige ich, wie sie per Shell konfiguriert und geschaltet werden können. Die GPIOs werden über sogenannte „virtuelle Dateien“ gesteuert, welche sich unter /sys/class/gpio befinden. Nach dem Booten befinden sich dort nur die Dateien export und unexport. Die anderen Dateien müssen erst erzeugt werden. Um einen GPIO verfügbar zu machen, muss die dementsprechende Nummer in die Datei export geschrieben werden.

$ sudo echo "0" > /sys/class/gpio/export

Damit wird GPIO0 aktiviert. Wenn anschließend

$ ls /sys/class/gpio

eingegeben wird, sieht man, dass es nun ein Verzeichnis mit dem Namen gpio0 gibt. In diesem Ordner gibt es eine Datei mit dem Namen direction und eine mit dem Namen value. Diese Dateien steuern den entsprechenden GPIO.

Nachdem der GPIO verfügbar gemacht wurde, kann dieser als Output konfiguriert werden:

$ sudo echo "out" > /sys/class/gpio/gpio0/direction

Dieser Befehl schreibt in die Datei direction von GPIO0 ein out, wodurch der Pin als Ausgang definiert wird. Wenn in in diese Datei geschrieben wird, wird der Pin als Eingang definiert. Anschließend kann der GPIO auf High gesetzt werden. Dazu wird eine 1 in die Datei geschrieben:

$ sudo echo "1" > /sys/class/gpio/gpio0/value

Über eine 0 wird der GPIO wieder abgeschaltet.

Vorbereiten des Raspberry Pi:

Wie an dem Beispiel oben zu erkennen ist, müssen die virtuellen Dateien nach jedem Boot neu angelegt werden. Dies soll nun per Shell-Skript automatisiert werden:

#!/bin/sh

echo "0" > /sys/class/gpio/export
echo "0" > /sys/class/gpio/export
chmod 666 /sys/class/gpio/gpio0/value
chmod 666 /sys/class/gpio/gpio0/direction

Um die Datei bei jedem Start automatisch auszuführen (quasi wie der Autostart bei Windows) muss die rc.local Datei angepasst werden.

$ cd /etc
$ sudo nano rc.local

Am Ende dieser Datei wird nun der Pfad des Skriptes eingefügt:

/Pfad des Shell-Scripts/Name des Skripts + Endung

Zu guter letzt muss die Datei noch als ausführbar markiert werden:

$ sudo chmod +x /Pfad eures Shell-Scripts/Name des Skripts.sh

Diese Zeile führt eine Datei aus, die sich unter dem nachfolgendem Pfad befindet und den angegebenen Namen besitzt. Um die Funktionsweise zu testen wird der Raspberry Pi neu gestartet:

$ sudo reboot

Nach dem Reboot sollte sich unter /sys/class/gpio ein Ordner mit dem Namen gpio0 befinden. Die letzten beiden Zeilen in dem Script sorgen dafür das jeder diese Dateien beschreiben kann, sodass keine root-Rechte benötigt werden. Sie sind nicht zwingend erforderlich und können auch weggelassen werden. Dies muss aber nachher berücksichtigt werden.

Die Website:

Nun sollen die GPIO über Web angesteuert werden. Die Ansteuerung geschieht hierbei quasi genau gleich wie mit der Konsole. Dazu wird ein Grundgerüst für eine Webseite erstellt:

<html>
	<head>
		<title>
			Raspberry Pi Webserver
		</title>
	</head>
	<body>
		<h1>
			<font color="red">
				Raspberry Pi Webserver
			</font>
		</h1>

		<h2>
			Raspberry Pi GPIO
		</h2>
	</body>
</html>

PHP stellt mit dem Befehl shell_exec eine Funktion bereit um Konsolenbefehle auszuführen. Damit kann z. B. der GPIO0 über einen Konsolenbefehl geschaltet werden:

<?php
	shell_exec("echo \"1\" > /sys/class/gpio/gpio0/value");
?>

Der GPIO soll nun per Checkbox und Transmit-Buttons geschaltet und abgefragt werden können:

<form action="GPIO.html" method ="post">
	<input type="checkbox" name="gpio0" value="0">GPIO 0<br> 
	<p>
	<input type="Submit" name="IO-clear" value="I/O Loeschen"><br>
	<input type="Submit" name="IO-read" value="I/O Status"><br>
	<input type="Submit" name="IO-set" value="I/O Setzen">
</form>

Über ein Request wird der Befehl ausgeführt:

if(isset($_REQUEST["IO-read"]))
{
    if(isset($_POST["gpio0"]))
    {
        $val_gpio = trim(@shell_exec("cat /sys/class/gpio/gpio0/value"));
        $dir_gpio = trim(@shell_exec("cat /sys/class/gpio/gpio0/direction"));
        echo "<br/>";
        echo "Value: ", $val_gpio;
        echo "<br/>";
        echo "Direction: ", $dir_gpio;
    }
}

Nun wurde der Button mit der Aufschrift I/O Abfragen mit einer Funktion verknüpft, welche die Datei value und direction ausließt und die Werte anzeigt. Damit ist es möglich die Richtung und den Pegel des Pins auszulesen.

Für den Button I/O setzen wird eine andere Funktion verwendet:

if(isset($_REQUEST["IO-set"]))
{
    if(isset($_POST["gpio0"]))
    {
        shell_exec("echo \"1\" > /sys/class/gpio/gpio0/value");
    }
}

Diese Funktion fragt ab, ob der Button mit dem Namen IO-set gedrückt wurde und wenn er gedrückt wurde, wird gecheckt ob die Checkbox gpio0 gesetzt ist (diese Abfrage kann bei nur einer Checkbox auch weggelassen werden). Anschließend wird der Pin gesetzt.

Als letztes muss die PHP-Datei der Gruppe www-data hinzugefügt werden, da die GPIOs sonst nicht geschaltet werden können. Zusätzlich wird der Besitzer der Datei in pi geändert und der Benutzer der Gruppe www-data hinzugefügt:

$ sudo chown pi.www-data /var/www/Name der PHP Datei + Endung

Damit ist die Webseite einsatzbereit und es können die GPIOs per Netzwerk geschaltet werden.

Es funktioniert nicht. Was nun?:

Falls die Webseite nicht wie gewünscht funktionieren sollte, solltet überprüft werden, ob folgende Bedingungen erfüllt sind:

  • Ist PHP installiert und funktioniert?
    Hierfür einfach eine PHP-Datei mit dem Inhalt phpinfo() anlegen, im Verzeichnis /var/www/ unter Test.php speichern und die Seite mittels IP-Adresse/Test.php in einem Browser aufrufen.
  • Wurde das Shellskript ausgeführt?
    Hierfür einfach im Verzeichnis /sys/class/gpio/ nachschauen ob die Ordner angelegt wurden.
  • Gehören die Webseiten zum Benutzer pi und zur Gruppe www-data?
    Wenn nicht mittels $ sudo chown pi.www-data /var/www/Name der PHP Datei + Endung die Zugehörigkeit ändern.
  • Gehört der Benutzer www-data zur Gruppe gpio?
    Wenn nicht mittels $ useradd -G gpio www-data hinzufügen.
  • Hat die Datei /sys/devices/virtual/gpio die Rechte 660?

GPIO über C-Programm schalten:

Natürlich können die GPIOs auch per C-Programm geschaltet werden. Dies funktioniert ähnlich wie das schalten per Web. Als erstes definiere ich ein zweidimensionales Array, welches aus drei Blöcken besteht und jeder Block ist 30 Byte groß. In dieses Array schreibe ich dann die Namen der Dateien die das Schalten der GPIOs übernehmen rein.

char GPIO[3][30] = {
    "/sys/class/gpio/gpio9/value",
    "/sys/class/gpio/gpio10/value",
    "/sys/class/gpio/gpio11/value"
};

Sobald das Hauptprogramm aufgerufen wird, läuft eine for-Schleife durch die die Nummer und den Namen der übergebenen Parameter ausgibt.

for(int i = 0x00; i < argc; i++)
{
   printf("argv[%d] = %s\n", i, argv[i]);
}

Für den folgenden Aufruf

./GPIO 1 1 0

sieht die Ausgabe dann so aus:

Anzahl Argumente: 4
argv[0] = ./GPIO
argv[1] = 1
argv[2] = 1
argv[3] = 0

Nach der for-Schleife kommt der Teil des Programmes der sich um das Schalten der GPIOs kümmert.

if(argc >= 0x01)
{
   for(int i = 0x01; i < argc; i++)
   {
      fd = open(GPIO[i - 1], O_WRONLY | O_NOCTTY);
      res = write(fd, argv[i], 1);
      close(fd);
   }
}

Als erstes wird mittels if(argc >= 1) geprüft ob beim Programmaufruf Argumente übergeben worden sind. Wenn dies der Fall ist, startet eine for-Schleife die von 1 bis zu der maximalen Anzahl Argumente zählt (in meinem Fall 4). Es ist wichtig das sie von 1 anfängt zu zählen, da das erste Argument der Programmaufruf selber ist und dieser ignoriert werden kann. Mit jedem Durchlauf der Schleife wird durch

fd = open(GPIO[i - 1], O_WRONLY | O_NOCTTY);

eine Datei der GPIOs aus dem Array GPIO mit der Nummer i - 1 geöffnet. Da die erste Stelle bei Arrays die Stelle mit der Nummer 0 ist, muss vom Wert i stets eins subtrahiert werden. Der Index der geöffneten Datei wird unter fd gespeichert. Anschließend wird mittels

res = write(fd, argv[i], 1);

das Argument mit der Nummer i in die Datei mit dem Index fd geschrieben. Ausgaben der write-Funktion werden unter res gespeichert und mit dem Befehl close(fd) schließe ich eine Datei mit dem Index fd. Nun ist ein Schleifendurchlauf abgeschlossen und der nächste beginnt von vorne. Durch den oben erwähnten Programmaufruf

./GPIO 1 1 0

schalte ich also GPIO9 und 10 ein und GPIO11 aus.

Nachfolgend sind noch ein paar Beispiele für den Einsatz der GPIO verlinkt.

Verwendung eines Ultraschallmoduls
Aktivierung der Interrupts

Sämtliche Dateien stehen in meinem GitHub-Repository als Download bereit.

258 Kommentare

  1. Hallo,
    danke für das tolle und ausführliche Tutorial!!!
    Könntest Du mir noch verraten wie die I/Os per Website gesteuert werden können?
    Danke!

    Viele Grüße,
    MH

    1. Hey,

      ja die Ansteuerung der GPIOs ist noch etwas sporradisch aber sie funktioniert erstmal :)
      Ich schicke dir heute Mittag, wenn ich Zuhause bin, mal eine E-Mail mit einem Beispiel wie du das machen kannst.

      1. Hi, kannst du mir die komplette Webpage schicken und die Fertige PHP Datei. Und mir ist unklar welche Datei wo abgespeichert wird. Weil mitten in den Programmiersprachen tauchen normale Texte auf und ich erkenne keine Zusammenhänge mehr. Und sehr cool wäre entweder per FTP Programm die Dateien hochzuladen oder per Consolenbefehl. Mein favorit ist über die Console. Danke im Voraus.

        1. Hey,

          du kannst dir die PHP Dateien am Ende des Artikels downloaden. Die Dateien müssen dann alle mit der Endung .php im Verzeichnis /var/www abgelegt werden. Dann kannst du sie über ihren Namen im Browser aufrufen.

          Gruß
          Daniel

  2. Guten Tag,

    Ich Interessiere mich sehr für deinen geschriebenen code für die i/o setzung per webif.Ich habe eine Hebebühne für meine Querschnitzgelähmte mutter gebaut die sie zwar per knopf „hoch“und „runter“ selber steuern kann.
    Bequemer wäre es aber für sie es per Smartphone übers webif zu schalten.
    für mich würden 2 ausgänge reichen.pin 1 leistet 3,3V und pin 2 5v verstehe ich das richtig? über relais könnte ich damit 230V versorgung für den Motor der Hebebühne schalten.
    Vielleicht hast du ja auch noch ideen wie es realisierbar wäre.

    1. Hallo,

      Zwei Ausgänge per Webinterface zu schalten sollte kein Problem darstellen.
      Da die GPIOs vom BCM auf dem Raspberry aber nur 3,3V Pegel haben musst du diese mit einem Transistor verstärken damit du ein Relais schalten kannst.
      Das Relais kannst du nicht direkt an das Raspberry Pi anschließen. Das heißt du nimmst einen Transistor und verstärkst den 3,3V Pegel auf z.B. 12V und damit kannst du dann ein Relais für die Motoren schalten.

    1. Hallo,

      wenn du mir deine E-Mailadresse gibst oder mir eine E-Mail schreibst, kann ich dir den Code zukommen lassen.
      Die E-Mailadresse die hier angegeben ist funktioniert nicht.

      Gruß
      Daniel

  3. Hi Kampi,

    super Seite. Habe mich die halbe Nacht mit dem Raspberry beschäftig.
    Das Thema schalten über ein Web Interface passt genau zu unserem Projekt.

    Ich bin absoluter Neuling in Sachen Linux und Programierung.
    Aber bin viel am Lesen.
    Raspberry läuft, Webinterface zum laufen bekommen, genau an deine Anleitung gehalten. Beim Web Server werden mit die Button für Durchsuchen und Upload nicht angezeigt. Duchsuchen gar nicht, Upload nur als textfeld. Habe ich alles mit copy und paste erstellt.

    Beim vorbereiten der gpio, wenn ich den befehl:

    sudo echo “0″ > /sys/class/gpio/export

    eingeben, bekomme ich die Meldung

    echo: write error: Invalid argument

    Was habe ich falsch gemacht? Ich benutze das Root Terminal aus Start,Accessories vom Desktop aus.

    Vielen Dank im Voraus.

    Kolli

    1. Hallo Kolli,

      bei dem Fehler mit den Buttons würde ich erstmal auf evtl. falsche Zeichen beim rauskopieren des Textes tippen.
      Bei dem Befehl finde ich im Moment keinen Fehler. Der scheint richtig zu sein und von daher kann ich dir nicht sagen warum dir das Raspberry einen Fehler ausgibt.
      Ich schau aber heute mittag nochmal nach wenn ich Zuhause bin.
      Schick mir derweil bitte schon mal die komplette Datei für den Upload (sprich die eigentliche Uploadseite + alles was dazugehört) an
      DanielKampert@kampis-elektroecke.de

      Edit:
      Was gut sein kann ist, dass wenn du den Befehl aus dem Browser rauskopiert hast das das Raspberry Pi die Zeichen falsch interpretiert.
      Schreib den Befehl nochmal händisch in die Konsole und dann sollte er funktionieren.

      Gruß
      Daniel

      1. Hi Kampi,
        danke für die schnelle Antwort. Ja hast du recht gehabt mit dem Zeichensatz.
        Habe das Problem meinem Kollegen gezeigt. Die anführungs Zeichen geändert, dann waren auch die Köpfe da.

        Den rest teste ich heute abend.

        Kolli

  4. Hallo.
    Könntest Du mir bitte auch den Code schockender die GPIOS per Website ansteuert.
    Probiere nähmlich schon lange herum aber habe es noch nicht ganz hinbekommen.

    Vielen Dank im Voraus.
    Berni

  5. Hallo Kampi.
    Ich habe das Problem das mir die Webseite bis auf den unteren Bereich richtig angezeigt wird.
    Wenn ich aber auf einen der Knöpfe drücke z.b.IOsetzen bekomme ich in einem neuen Fenster die Meldung 404-Not Found.
    Er versucht die IO.PHP zu laden.
    Ich habe leider keine Erfahrung in sachen HTML der PHP5 ist aber installier.
    Woran kann das Liegen?
    Gruß.
    Bert

  6. Hallo, als absoluter Neueinsteiger auf dem Gebiet Rasperry PI ist mir aufgefallen das die Belegung der PIO bei mir etwas anders ist. Es existiert kein GPIO 0 und auch kein GPIO 21. Dafür aber GPIO 2 und 27. Müssen so auch angesprochen werden. (jedenfalls bei mir. . .)
    Ansonsten aber eine Top-Info Seite, weiter so!
    Ein gesundes neues Jahr allen hier,
    Gruß Jürgen

    1. Hallo Jürgen,

      ja da hast du Recht. Du verwendest wahrscheinlich eine 512MB Variante von dem Raspberry Pi. Da ist das Pinmapping etwas anders als bei der 256MB Variante die ich am Anfang verwendet habe.
      Schau mal hier:

      http://elinux.org/RPi_Low-level_peripherals

      Da siehst du das etwas genauer. Da findest du eine Tabelle wo die GPIOs von Rev. 1 mit der von Rev. 2 verglichen werden. Und dort siehst du auch das GPIO21 bei Rev. 1 GPIO27 bei Rev. 2 ist.
      Die Ansteuerung ist aber komplett die selbe, außer das das PHP File und das C Programm angepasst werden muss.
      Falls du Hilfe benötigen solltest, kannst du mir ruhig eine E-Mail schreiben. Mittlerweile besitze ich genug Pis in allen Varianten da kann ich das alles dann ausprobieren ;)

      Gruß
      Daniel

  7. Hey

    Erst einmal großes Lob an deine Page und die ganze Arbeit, die damit verbunden ist. Echt super gemacht! Die Tutorials haben mir geholfen, meinen Raspberry als Webserver laufen zu lassen und damit die GPIO´s zu schalten. Danke!
    Hätte aber noch ne kleine Frage: Kennst du dich zufällig auch mit Python aus? Möchte nämlich, nachdem die GPIO´s nun ja via PHP geschaltet werden können, das auch via Python versuchen. Die Antwort vom Server ist kein Problem (gemeint ist das „Bestätigen“ eines Radio-Buttons z.B.), aber ich kann die GPIO´s nicht ansteuern (bei PHP war das ja der Befehl shell_exec(…) ).
    Vielleicht weißt du ja zufällig ne Antwort drauf.
    Noch nen guten Rutsch :)

    Gruß Chris

  8. Hi Kampi,
    Bin mit meinem Projekt gut voran gekommen.
    Ich habe mir jetzt eine Platine auf Lochraster aufgebaut.
    4x Ausgänge + LED + Optokoppler + Transistoren um Relay zu schalten.
    4x Eingange + Optokoppler + Taster.

    Die Ausgänge lassen sich super mit dem Befehl:sudo echo “0″ > /sys/class/gpio/gpio17/value Schalten.

    Am Eingang von GPIO 18 stehen nach drücken eines Tasters 3,3 V. Heißt am Eingang ist nun eine 1. Wie lautet jetzt aber der Befehl für das Auslesen des Eingangs?

    Vielen Dank im Voraus
    Kolli

    1. Hey,

      der Zustand des GPIO wird in der Datei „value“ gespeichert.
      Diese Datei kannst du z.B. mittels „cat“ in der Konsole auslesen:

      $cat /sys/class/gpio/gpio17/value

      Gruß
      Daniel

  9. Hallo und vielen Dank für die gemachte Mühe!

    Da waren genau die Infos dabei, die ich für mein Projekt und die ersten Schritte mit dem Pi
    brauchte. Dankeschön!!!

  10. Hey ho

    Ersteinmal vielen Dank für die super Einführung in Sachen GPIO, hat mir echt weitergeholfen und ist auch schön verständlich beschrieben. :) Funst soweit auch alles gut GPIO schalten etc…
    Nun habe ich aber leider doch ein Problem, und zwar bei dem dem Shell-Script.
    zunächst ist mir aufgefallen das einmal angibst:

    >>>Verzeichnis “/etc/init.d/” und öffnet die Datei “rc.local”.<<>>$ cd /etc<<>>$ nano rc.local<<<

    was ja zwei Unterschiedliche Dateien sind, nicht oder?

    Zum anderen werden bei mir durch das Script leider nicht die gewünschten Dateien und Ordner erzeugt. Könntest du mir vlt. deine "rc.local" und das script dazu zeigen damit ich den Fehler finden kann?

    Vielen Dank

    MFG DOGI

  11. Hallo,

    ich wollte mal fragen, denn eine Sache erscheint mir komisch, denn meine LED’s leuchten bei „0“ und gehen aus bei „1“. Normalerweise müsste es doch umgekehrt sein oder?

    Schon mal vielen Dank und ein schöner Beitrag.
    Jan

        1. Hey,

          Pin 3 ist ein I²C Pin und die sind vom Board aus mittels Pull-Up auf 3,3V gelegt, sprich du kannst die LED nur nach GND schalten.

          Gruß
          Daniel

  12. Moin, Moin,

    ich habe an meinem Pi 4 Leds auf GPIO 17,22,23 und 27.
    Leider lassen sich diese über das Script nicht schalten.
    Ich habe bereits die Berechtigungen vergeben, über Apache muss das doch auch gehen oder?

    Gruß Alex

  13. Hi Daniel
    dickes Lob für deine Seiten aber auch Kritik: So funz die Webseite nicht, z.B.““ würde ich mit „<formaction="#php" method="post" ersetzen und "php" vor dem php-script einsetzen und "#Checkboxen prüfen" (nur die Überschrift) weglassen So habe ich direkt Kontrolle der Schaltvorgänge. Erklärung findest du hier
    Gruß
    Fritz

    1. Hey,

      danke für deine Anmerkung.
      Die Seite ist ganz einfach gehalten und sie funktioniert problemlos :)
      Bei den Codeschnipseln in der Anleitung handelt es sich um unvollständige Schnipsel um paar Teile der Seite zu erklären.
      Die funktionierende Seite kann man sich am Ende der Anleitung anschauen.
      Oder meinst du was anderes?

      Gruß
      Daniel

      1. Wenn ich die Webseite so wie sie oben beschrieben betreibe gibts ein 404 Error, es fehlt die Seite IO.php. Deshalb habe ich die Seite so geändert, dass der Link innerhalb der Seite auf „php“ verweist. Man muss also nur „php“ vor den php-script setzen, dann klappts.
        Also statt form action=“IO.php“ eben form action=“#php“ verwenden.
        Alles klar ?

        Gruß
        Fritz

        1. Hey,

          dann muss es bei dir irgendwo einen Fehler bei der Namensgebung geben.
          Wenn du den Code direkt von der HP kopiert hast kann es sein, dass sich falsche Zeichen mit in die PHP-Datei geschlichen haben und der Interpreter diese nicht übersetzen kann.
          Wie gesagt, die Websites die unten zum Download bereit stehen sind haargenau die Seiten die bei mir funktionieren.
          Aber ich teste den Downloadcode heute Abend, wenn ich aus der Uni zurück bin, nochmal.

          Gruß
          Daniel

          1. Du hast recht, ich hätte den Webserver IO.php nennen müssen, also typischer Anfängerfehler!!!
            Hiermit nehme ich meine Kritik zurück und danke dir für deine Bemühung.
            Gruß
            Fritz

          2. Hey,

            kein Problem :)
            Fehler passieren und schön das du ihn gefunden hast :)
            Es wird sicher auch andere geben die diesen Fehler ebenfalls machen / gemacht haben und von daher ist sowas immer hilfreich.

            Gruß
            Daniel

  14. Hi,
    Zuerst einmal vielen Dank für deine tollen Erklärungen.
    Wäre schön wenn Sie mir bei meinem Problem helfen könntest.
    Und zwar nachdem ich die Gpios.sh datei erstelle und reboote habe ich in dem Ordner sys/class/gpio nur einen Ordner mit gpiochip0 und keine weiteren. Wo könnte mein Problem liegen?
    Außerdem habe ich noch eine Frage zum Verständnis, warum sind in ihrem Gpio.sh nur die 4,7,8,9,11,17,…25 und nicht die 0-25 pins angesteuert? Kann man das auch realisieren?

    Mfg Memi

    1. Hey,

      haben sie das Skript mittels

      $sudo chmod +x Pfad zur Datei

      ausführbar gemacht?
      Klar können sie sämtliche GPIOs in das Skript packen. Ich habe nur nicht alle drin, weil z.B. GPIO 0 und 0 für den I²C und 14 und 15 für den UART verwendet werden und somit wegfallen.

      Gruß
      Daniel

      1. Danke für deine Hilfe.
        Mein fehler war, dass ich in der rc.local unter exit 0 die Pfadangabe gemacht habe und nicht oberhalb somit hat es dieses gar nicht erst ausgeführt.
        Aber jetzt habe ich ein ziemlich großes Problem ich habe das Shell-Script mit Gpio 0 -25 gefüllt und jetzt funktioniert meine Tastatur und Maus nur noch ca 5 Sekunden. Ich habe auch schon andere Tastaturen bzw. Mäuse ausprobiert aber es scheint als bekommen sie nicht mehr genug Strom durch das Erweitern des Scripts. Kann das Sein? Ich habe auch ein besseres Netzteil mit 1,2A angeschlossen, doch das Resultat bleibt das gleiche. Können Sie mir helfen?

        mfg Memi

        1. Hey,

          du darfst natürlich nur die GPIOs verfügbar machen die auch auf den Connector P1 geführt sind. Die restlichen GPIOs sind u.U. für die Kommunikation mit den anderen Chips etc. verplant.
          Ich vermute ganz stark, dass du einen GPIO frei geschaltet und geblockt hast der die Kommunikation über USB übernehmen soll.
          Dadurch funktioniert USB natürlich nicht mehr korrekt.
          Schau mal hier:

          http://elinux.org/RPi_Low-level_peripherals

          Da stehen die GPIOs die du nutzen kannst.

          Gruß
          Daniel

          1. Oha vielen Dank,
            gibt es eine möglichkeit dies rückgängig zu machen ohne das komplette raspberry neu auf zu setzen? Mir läuft leider die Zeit für mein Projekt davon… Es nochmal neu aufzusetzen wäre sehr schlecht.

            Mfg Memi

          2. Hey,

            wenn du über Netzwerk mittels PuTTY drauf kommst, kannst du damit was machen.
            Aber falls das auch nicht geht, wirst du nicht um ein neu aufsetzen rumkommen.

            Gruß
            Daniel

          3. Ok habs nochmal neu aufgesetzt, danke für deine Hilfe, nun läuft es. Aber eine Frage hab ich noch und zwar in deiner php-Datei gibt es zwei Buttons für löschen (der erste um das Value wieder auf 0 zu schreiben) oder besser gefragt was ist der Unterschied zwischen GPIO abschalten und freischalten?

            Gruß Memi

          4. Hey,

            der „Löschen“ Button sollte eigentlich die komplette Auswahl der GPIOs löschen….hab wohl vergessen ihn zu implementieren ^.^
            Kannst du also ignorieren/raus schmeißen

            Gruß
            Daniel

  15. Hallo,
    2 bescheidene Fragen, die mich wahrscheinlich gleich als blutigen Laien ausweisen:

    1.) $ sudo echo „0“ > /sys/class/gpio/export –> keine Berechtigung!?

    2.) Wohin soll ich die html-Seite hinschreiben (als html-File mit einem Browser aufrufen oder als Datei in den Raspi bzw. wie sind die einzelnen Scriptteile aneinandergereiht.
    „-Hier steht der Code für diese Seite- “ Welcher Code von-bis?

    Bitte um Aufklärung.

    Bernd

    1. Hallo Bernd,

      ruhig Fragen :) brauchst keine Scheu haben!
      Zu deiner ersten Frage:
      Wechsel mal auf den Benutzer „root“ und probier es erneut.

      Zweite Frage:
      Wenn du lighttpd nutzt, musst du alle HTML oder PHP Dateien unter /var/www speichern. Anschließend kannst du diese über deinen Browser auf deinem PC mittels

      IP-Adresse vom Pi/Name der Datei

      aufrufen. In dem Beispiel wo steht „-Hier steht der Code für diese Seite-“ handelt es sich um ein Grundgerüst für meine Seite, welches noch keine Funktion besitzt. Die Funktion kannst du selber in die Seite schreiben (an der Stelle wo der Text „-Hier steht der Code für diese Seite-“ steht).
      Die fertigen Seiten (so wie ich sie verwende) kannst du dir am Ende der Seite downloaden.
      Hoffe das hilft dir etwas weiter.
      Falls du noch Fragen haben solltest kannst du mir auch eine E-Mail schreiben.

      Gruß
      Daniel

  16. Hallo,

    Wirklich top deine Seite hier ;)
    Bin auch neu auf dem Gebiet, und es kommt immer gleich einen Meldung „Permission Denied“ beim Ersten Befehl, aber warum verweigert er mir das ?
    Würde mich über eine Antwort freuen

    Lg

  17. Hallo,

    ich habe auch neu mit dem RPi angefangen und auch mit PHP. Ich habe deinen Code übernommen, dieser wird aber bei mir nicht richtig dargestellt. In dem PHP-Teil werden die echo Befehle nicht richitg verarbeitet. Habe die Vermutung, dass das mit den “ zusammenhängt, aber habe ehrlich gesagt keine richtige Ahnung.
    Des Weiteren würde mich interessieren, was genau die Datei „IO.php“ macht und was dort rein kommt.

    Vielen Dank schon mal im Voraus, Jan

    1. Hey,

      hast du den Code von der Website kopiert?
      Dann könntest du eventuell falsche Zeichen mit reinkopiert haben.
      Schick mir die Datei mal zu, dann schaue ich mal drüber.
      Wenn sie dann funktioniert, kann ich sie dir gerne erklären.

      Gruß
      Daniel

    2. Hi

      Ich habe das slebe Problem, unten auf der Web Seite steht folgendes:

      ‚); } elseif ($val_gpio == 1) { echo(“); } echo “
      „; echo „Value: „, $val_gpio; echo “
      „; echo „Direction: „, $dir_gpio; echo “
      „; echo “
      „; } } } #GPIO einschalten if (isset($_REQUEST[‚IO-setzen‘])) { for($x = 0; $x /sys/class/gpio/gpio$x/value“); } } } #GPIO abschalten if (isset($_REQUEST[‚IO-loeschen‘])) { for($x = 0; $x /sys/class/gpio/gpio$x/value“); } } } #GPIO freischalten if (isset($_REQUEST[‚Löschen‘])) { for($x = 0; $x

      Ich habe die Dateien aus dem Downloadbereich.
      Was ist das Problem, weiss das einer?

      vielen danke
      JayB

        1. Hey Hallo das ging ja fix…

          Ja das ist installiert, hab die schritte „PI als WebServer“ von dir ausgeführt…

          hab aber $ sudo apt-get install php5 nochmal ausgeführt und es ist immernoch….

          lg
          JayB

          1. Hey,

            führ mal bitte diese beiden Schritte aus:

            $ sudo lighty-enable-mod fastcgi
            $ sudo lighty-enable-mod fastcgi-php

            Gruß
            Daniel

          2. ne immernoch das selbe..

            uhmm kann das nicht sein das in der GPIO_Version2.php_.htm ein fehler ist? z.B. “ oder ) flasch oder doppelt?
            da ja der erste Teil der Web Seite ja richtig angezeigt wird, unter den zwei tasten I/O setzten und I/O loeschen fängt das problem an

            ‚); } elseif ($val_gpio == 1) { echo(“); } echo “
            „; echo „Value: „, $val_gpio; echo “
            „; echo „Direction: „, $dir_gpio; echo “
            „; echo “
            „; } } } #GPIO einschalten if (isset($_REQUEST[‚IO-setzen‘])) { for($x = 0; $x /sys/class/gpio/gpio$x/value“); } } } #GPIO abschalten if (isset($_REQUEST[‚IO-loeschen‘])) { for($x = 0; $x /sys/class/gpio/gpio$x/value“); } } } #GPIO freischalten if (isset($_REQUEST[‚Löschen‘])) { for($x = 0; $x

  18. Hallo Daniel,

    Erst einmal danke für diese ausführliche Erklärung, ich würde nun gerne an die GPIOs Lichtschranken hängen und sobald sich der Status der GPIO ändert ( weil Lichtschranke unterbrochen ) möchte ich das ein DB Eintrag gemacht wird. Das Problem: die Lichtschranke wird nur für den Bruchteil einer Sekunde unterbrochen – das heißt es müsste irgendwie ein „Watcher“ auf dem Verzeichnis der GPIOs sitzen, hast du da einen Ansatz / Stichwort für mich? Bin auf dem Gebiet noch relativ neu.

    Viele Grüße

    Robin

    1. Hallo Robin,

      schau mal unter „Interrupts“ nach.
      Die Lichtschranke hängst du an einen Pin, welchen du mit einem Interrupt versiehst.
      Sobald der Interrupt ausgelöst wird setzt du ein Flag und dieses Flag prüfst du im Hauptprogramm.
      Wenn es gesetzt ist, löscht du es und machst den Eintrag in die Datenbank.
      So würde ich die Sache angehen :)

      Gruß
      Daniel

      1. Hallo Daniel,

        Danke für deine schnelle Antwort, hab da auch direkt was „fertiges“ gefunden.
        http://pythonhosted.org/RPIO/rpio_py.html#gpio-input-output
        ( da ich auf meinem RSPI noch 1-2 Tage warten muss kann ich es leider noch nicht sofort testen ).

        Die Anwendung soll sein den Input einer „Lichtschranke“ auszulesen. ( also das High beim passieren eines Objektes ) Hier stoße ich aber auf das nächste Problem, ich finde da nichts geeignetes im Miniatur Format. Hast du da vielleicht schon einmal eine verwendet und kannst mir was empfehlen?

        Viele Grüße

        Robin

        1. Hallo Robin,

          ja schau mal hier:

          https://kampis-elektroecke.de/?page_id=3740

          Dort wird beschrieben, wie du einen Interrupt für einen Taster verwendest.
          Dieses Beispiel kannst du bequem für deine Lichtschranke verwenden (im Grunde verhält sich deine Lichtschranke -bis auf das fehlende Prellen- wie ein Taster ;) ).

          Ansonsten kannst du mir auch gerne direkt eine Mail schreiben, dann helfe ich dir gerne.

          Gruß
          Daniel

          1. Ah super, hätte ich mal etwas weiter geschaut :-)
            Genau so hatte ich es bis jetzt in meinem Kopf :-D

            Kannst du mir eine IR Lichtschranke empfehlen?

  19. Sorry, dass ich auch (!) noch einmal nachfragen muss … bekomme es einfach nicht hin … (GPIO 17 schalten – als root funktioniert es)
    a) die Shell.Datei (den Inhalt) von dir kopiert (cut & paste) – für „17“ angepasst
    b) eine Datei „gpio.sh“ damit erstellt
    c) diese nach /etc/init.d kopiert
    d) diese mit „chmod 755 gpio.sh“ ausführbar gemacht (grüne Schrift)
    e) sudo nano /etc/rc.local
    f) hier VOR „exit 0“ => „/etc/init.d/gpio.sh“ eingegeben
    g) gespeichert und geschlosssen
    dann sudo reboot
    echo „1“ > sys/class/gpio/gpio17/value
    Ergebniss====> „Datei oder Verzeichnis nicht gefunden “
    Wollte eigentlich über php schalten
    /sys/class/gpio/gpio17/value“);
    ?>
    Wahrscheinlich nur ein dummer Fehler…
    Würde mich sehr über einen Tip freuen – DANK !

    1. Hey,

      Probier mal bitte die Datei „/etc/rc.local“ direkt in der Konsole auszuführen:

      $ /etc/rc.local

      Das müsste der Befehl sein.
      Kommt da eine Fehlermeldung? Wenn ja welche (Screenshot am besten)?
      Kopier das Shellskript für die GPIOs mal aus dem „init.d“ Ordner raus.
      Da kommen nur Startskripts rein.
      Ich habe mir das Ding auf den Desktop gemacht.

      Gruß
      Daniel

  20. Danke für die schnelle Reaktion !
    habe „/etc/rc.local“ ausgeführt (einmal mit der gpio.sh in /init.d und danach mit der Datei (gpio.sh) in /home/pi, s.u.)

    Beide Male findet er sie (die gpio.sh-Datei) nicht:
    „/etc/rc.local: 19 /etc/rc.local: home/pi/gpio.sh: not found“

    Wenn ich die Datei (IN dem jeweiligen Verzeichnis) mit „sh gpio.sh“ aufrufe, bekomme ich jede Menge Fehlermeldungen „Directory non existent …und „chmod: Zugriff auf /sys/class/gpio/gpio17/value nicht möglich …“

    ein Rechteproblem (als su funktioniert es ja) ?

    Besten DANK !
    Frank

  21. Hallo Kampi,
    habe auch eine kleine Frage zum schalten der GPIO’s.
    Habe alles nach Deiner Anleitung installiert (Webserver, PHP usw.)
    Im Terminal klappen die Befehle so wie es sein soll.

    Versuche ich jetzt einen GPIO (z.b. 17) über PHP zu schalten passiert nichts.

    shell_exec("echo \"1\" > /sys/class/gpio/gpio17/value");

    Mache ich das gleiche jetzt mit wiringPi wird der Befehl ausgeführt und meine LED
    leuchtet.

    shell_exec("/usr/local/bin/gpio -g write 17 0");

    Die Berechtigungen habe ich wie Du angegeben hast so gesetzt:

    chown www-data.www-data /var/www/gpio.php

    Komischerweise brauche ich bei der Datei mit dem wiringPi Befehl gar keine Rechte
    setzen und es klappt trotzdem.

    Hast Du eine Ahnung warum es bei mir mit Deiner Methode nicht klappt?

    Gruß
    Oliver

    1. Hallo Oliver,

      existiert im Ordner „/sys/class/gpio“ ein Ordner „gpio17“? Wenn nicht, kann der Befehl auch nicht funktionieren, da er direkt in die Datei rein schreibt.
      WiringPi macht es, denke ich, anders und ist somit nicht an die Datei gebunden.

      Gruß
      Daniel

  22. Hi Daniel,

    ja der Ordner gpio17 existiert.
    Was mir aufgefallen ist, wenn ich der Datei „value“ im Ordner gpio17 chmod 777 gebe funktioniert es.
    Besitzer und Gruppe sind root, das heißt ich habe hier wohl ein Berechtigungsproblem.

    Welche Rechte genau müssen den auf /sys/class/gpio liegen?

    Gruß
    Oliver

    1. Hey,

      hast du mein Shellskript nicht verwendet? Das setzt die Rechte auf 666 und damit funktioniert es :)
      Weil mit den ursprünglichen Zugriffsberechtigungen hat nur der User „root“ ein Schreibrecht auf die Datei.
      Du musst die Datei auch ausführbar machen für andere User.

      Gruß
      Daniel

  23. Oh, nein das habe ich jetzt nicht verwendet weil ich dachte das ist nur zum anlegen der Verzeichnisse beim Neustart.
    Habs mit gerade angesehen und gesehen das dort auch alle Ordner auf 666 gesetzt werden, mein Fehler ;-)

  24. Super Tutorial. Ich bin 13 und will ein Motorsteuerung als Schulprojekt mit dem Pi machen. Dies sollte auch über das Netzwerk bzw. webif errreichbar sein. Frage: Ist es möglich das über einen Tastendruck zu machen; zum Beispiel ich drücke die Taste w und Motor läuft in eine Richtung an und wenn ich die Taste loslasse soll der Motor stoppen. (JavaScript ?). Und könntest du vielleicht die HTML Dateien mir zusenden oder Online stellen ? Danke.

    1. Hey,

      die HTML Dateien sind am Ende des Artikels zu finden.
      Und wieso machst du nicht einfach ein Webinterface mit vier Buttons auf der Seite, die du klickst?

      Gruß
      Daniel

      1. Ja das wäre auch möglich. Aber geht das dann, dass wenn der Button GEDRÜCKT wird soll der Pin angehen und wenn ich den Button LOSLASSE wieder aus ?

  25. Hallo,
    Ich habe folgendes Problem: wenn ich echo „0“ > /sys/class/gpio/export schreibe sagt mir die Konsole, ich hätte keine Berechtigung, wenn ich das aber über den root-User mache, wird mir gesagt, dass die Ressource schon belegt ist!

    Ebenfalls funktioniert dieses
    cd /sys/class/gpio/
    1s
    nicht, weil der Befehl ‚1s‘ nicht gefunden wird!

    Der Ordner gpio0 ist nicht da! :/
    Hilfe! :/

      1. Mit pi hab ich keine Berechtigung dazu und mit root ist die Ressource belegt(Schreibfehler)!
        Der Ordner ist nicht vorhanden..

          1. Entschuldigung, ich stand gerade etwas auf dem Schlauch! :D
            Ich hatte es nämlich erst ohne Skript gemacht und den Ordner manuell per Konsole anlegen wollen …
            Jetzt hab ich das Skript geschrieben und der Ordner wird sofort erstellt! :)
            Das Problem ist nun allerdings, dass die Diode, die ich an Pin 3 und 6 angeschlossen habe nicht aus bekomme!
            Egal ob ich gpio0/value auf 1 oder 0 setze, sie bleibt immer an! :/

          2. Ich habe jetzt 3 Möglichkeiten probiert:
            1) als pi
            2) als root
            3) direkt über die Datei!

            Per cat gibt er mir immer das zurück, was es auch sein sollte, die Diode leuchtet trotzdem!

          3. Hey,

            GPIO 0 und 1 sind für den I2C da, sprich die Pins sind mittels Pull-Up auf High gelegt.
            Probier mal einen anderen GPIO aus.

      1. Ich denke man hat gemerkt, dass das alles für mich neu ist, daher verzeih mir diese letzte Frage bitte: An welchen Pin muss die Kathode?

        1. Hey,

          kommt drauf an wie du schalten willst.
          Wenn die LED leuchten soll sobald der GPIO High ist, muss der + Pol der LED an den GPIO (Vorwiderstand nicht vergessen!) und der – Pol an GND.
          Ich würde es aber andersrum machen, sprich den + Pol der LED mit einem Widerstand an 3,3V und den – Pol der LED an den GPIO und dann die LED schalten, indem der GPIO auf Low gelegt wird.

          Gruß
          Daniel

          1. DANKE!!! :))
            Jetzt funktionierts endlich!

            Deine Beschreibung ist super! (Ich war nur zu blöd :D)

  26. Hi,

    ich kämpfe gerade mit rc.local. Das Skript startet nicht automatisch. Die Datei gpio.sh liegt in /home/pi/Desktop.

    rc.local:

    /home/pi/Desktop/gpio.sh
    exit 0

    danach führ ich den Befehl
    $ chmod +x //home/pi/Desktop/gpio.sh
    aus.

    Nach dem Reboot
    $ ls /sys/class/gpio
    ist keine gpio0 vorhanden.

    Irgendetwas was ich überseh? Oder hat sich was geändert?
    Vielen Dank im Vorraus

    1. Hey,

      also die rc.local liegt bei dir im Ordner „/etc/ und ist auch ausführbar gemacht worden?
      Wenn ja, was wird beim booten kurz vorm Anmelden ausgegeben?

      Gruß
      Daniel

      1. Hi,

        ja die rc.local liegt in /etc.
        Bisher habe ich nur die gpio.sh ausführbar gemacht. Mit dem Befehl
        chmod -x /etc/rc.local habe ich jetzt auch ausführbar gemacht…

        Bei Putti wird vor dem Anmelden nichts angegeben, mit Bildschrim kommt nur ein Error, vom OpenBSD Secure Shell server -> ‚/dev/input/event*‘: No shuch file or directory…

        Was ich schon probiert habe ist direkt in den rc.local die Befehle für die GPIO zu schreiben.
        rc.local

        echo „0“ > /sys/class/gpio/export
        echo „out“ > /sys/class/gpio/gpio0/direction
        chmod 666 /sys/class/gpio/gpio0/value
        chmod 666 /sys/class/gpio/gpio0/direction
        exit 0

        Nach dem Reboot konnte ich den Ausgang problemlos schalten (gpio0) vorhanden.
        Ich denke es hängt irgendwie mit dem Ausführen/Öffnen/Starten der gpio.sh zu tun.

        Danke für die Hilfe
        Gruß Markus

        1. Hey,

          und du bist dir sicher das beide Dateien ausführbar sind? Also sowohl gpio.sh und die rc.local?
          Das hört sich für mich nach einem Rechteproblem an.

          Gruß
          Daniel

          1. Hi,

            heute ist mein zweiter Tag an dem ich mich mit dem Raspberry Pi und Linux beschäftige. Ich bin mir bei gar nichts wirklich sicher :D

            Ich gehe davon aus, dass rc.local ausführbar ist (USB-Stick -> Webserver funktioniert).

            Ich gebe für beide files den chmod-Befehl ein (mit root). Eine Rückmeldung über den Vorgang erhalte ich keine.

            Gibt es eine Möglichkeit das zu überprüfen? Wie kann ich die *.sh manuell ausführen?

            Gruß Markus

          2. Hey,

            die Datei kannst du ganz einfach ausführen:
            Wenn du im selben Verzeichnis bist -> ./gpio.sh
            Ansonsten -> Pfad/gpio.sh
            Probier das mal und wenn es eine Meldung gibt, hast du ein Rechteproblem.

          3. Hey,

            also hier liegt der Hund begraben…
            -su. ./rc.local: Permission denied
            bzw.
            -bash: .rc.local: Permission denied
            selbes für gpio.sh

            -> dafür der Befehl chmod , oder?
            aber warum funktioniert das nicht?
            das hab ich sowohl mit pi – sudo und mit root-Rechten versucht…

            mir fehlen einfach sämtliche Linux Grundlagen…

            Danke für die Unterstützung!

          4. Hey,

            log dich mal als root ein und versuch folgendes:

            chmod +x /Pfad/gpio.sh

            Damit wird das Skript ausführbar gemacht.
            Und dann probier es noch mal.

            Gruß
            Daniel

          5. Hey,

            also hier meine Eingange:
            1.su –
            2.PW
            3.chmod +x /home/pi/Desktop/gpio.sh
            4./home/pi/Desktop/gpio.sh

            -> Antwort:
            -su: /home/pi/Desktop/./gpio.sh: /bin/sh^M: bad interpreter: No such file or directory

            -> meine gpio.sh (strg+c, strg+v) beginnt mit #!/bin/sh… (falls das Hilft – ich benutze das Standard Notepad)

            Was mach ich nur falsch :(

            Gruß Markus

          6. … noch das gleiche mit rc.local gemacht:
            Ausgabe: My IP … -> ausführbar
            -> Fehler
            /home/pi/Desktop/gpio.sh: not found
            -> aber die ist auf jeden Fall dort..

          7. Ahh das hilft weiter.
            Da ist ein ungültiges Zeichen am Zeilenende (son Windowsmüll).
            Installier dir mal mittels

            apt-get install vim

            den Editor „vi“. Anschließend öffnest du mittels

            vi Pfad/gpio.sh

            die Datei und dann siehst du die ganzen „^M“. Die entfernst du alle und dann drückst du „:wq“. Mittels „:“ öffnest du das „Menü“ und mit „wq“ speicherst du die Datei und beendest den Editor.
            Dann sollte es funktionieren.

            Gruß
            Daniel

          8. Also ich hab mit dem vi kein ^M gefunden…
            genug für heute, ich brauch erstmal Pause :P

            Vielen Dank für deine Hilfe
            Gruß Markus

          9. Hey,

            in der gpio.sh müsste aber eins sein.
            Das ist dunkelblau dargestellt….schau noch mal nach.
            Wenn du es nicht findest, schreib mir eine E-Mail dann schicke ich dir mein GPIO.sh zu.

            Gruß
            Daniel

    2. Hi,

      so das Problem ist gelöst.
      Hier nochmal die Zusammenfassung, falls jemand ein ähnlichen Problem hat…
      1. Alles wie im Tutorial machen
      2. Sicherstellen, dass die beiden Files (rc.local, gpio.sh)
      a) chmod +x /etc/rc.local und chmod +x/“Pfad“/gpio.sh
      -> Dateien ausführbar machen
      b) /etc/./rc.local und /“Pfad“/./gpio.sh
      -> Testen ob ausführbar
      3. Bei folgendem Fehler:
      -su: /“Pfad“/./gpio.sh: /bin/sh^M: bad interpreter: No such file or
      directory
      muss die *.sh File von Windows in UNIX konvertiert werden. z.B. mit Notepad++
      (Bearbeiten – Format Zeilenende – Konvertiere zu UNIX).

      Das Problem ist, dass Windows und UNIX unterschiedliche Zeilenenden haben:
      – Windows: CR+LF
      – UNIX: LF
      Wird die File mit den Notepad unter Windows erstellt und mit FileZilla auf das PI übertragen macht genau dieses unterschiedliche Zeilenende Probleme.

      Vielen Dank für die Hilfe!
      Gruß Markus

  27. Hey,
    wäre es möglich das du mir mal ein Image deines Raspberry incl Webserver hochlädst?
    Würde es gerne mal aller Plug and Play versuchen. Bin darin im moment noch nicht so fit.
    gruß

  28. Hallo, irgendwie klappt das bei mir nicht. Versuche meine 433mhz Steckdosen übers Web zu steuern. Wenn ich per SSH folgenden Befehl eingebe:
    sudo ./raspberry-remote/send 00010 1 1
    Geht die Dose an, mit 0 auch wieder aus. Also soweit alles gut.
    Jetzt habe ich eine PHP Datei angelegt in der folgender Code ist:

    und habe mit folgendem Kommando die rechte geändert:
    sudo chown pi.www-data /var/www/switchon.php
    Die Seite wird dargestellt. Aber an der Dose tut sich nichts.
    Kann mich jemand helfen?
    Gruß

        1. Huch der hat wohl mein Befehl gefressen, sorry.

          ?php
          shell_exec(„sudo ./home/pi/raspberry-remote/send 00010 1 1“);
          ?

          Funktionier leider auch nicht, egal ob mit oder ohne sudo.

          1. Hey,

            sorry überlesen.
            Braucht das „remote“ Programm vielleicht ein Passwort?
            Dann musst du es unter „visudo“ noch eintragen.

            Gruß
            Daniel

          2. Gute Frage, sobald ich daheim bin werde ich das noch mal testen.
            Habe mal in der visudo folgendes eingetragen:
            www-data ALL=(ALL) NOPASSWD: /home/pi/raspberry-remote/send
            und in der php Datei das ganze auf
            ?php
            shell_exec(„sudo /home/pi/raspberry-remote/send 00010 1 1“);
            ?
            geändert. Sieht soweit ganz gut aus, testen kann ich erst daheim. Schon mal danke und ich melde mich auf jedem fall. :)

  29. Hi Kampi,
    also erst mal ein Lob für deine Site, die Tuts haben mir schon sehr geholfen.
    Aber nun habe ich ein Problem komm nicht mehr weiter, hab mich irgendwie in eine Sackgasse verrannt.

    Ich habe gestern mein Raspi neu aufgesetzt und auch problemlos eingerichtet.
    Leider kann ich nun nicht mehr auf die GPIO-ports zugreifen. Denke das ist ein Rechteproblem, komme aber nicht dahinter wo.

    gebe ich als pi-user den befehl ein: sudo echo „2“ > /sys/class/gpio/export
    kommt die meldung: keine berechtigung
    so gehts: sudo su -c ‚echo „2“ > /sys/class/gpio/export‘

    aber das Hauptproblem liegt darin dass mein Script ‚ports.sh‘ nicht automatisch geladen wird obwohl ich den Eintrag in die rc.local wie oben beschrieben eingetragen habe.

    Hast du noch eine Idee woran es liegen könnte?
    Danke schon mal vorab

    1. Hey,

      mmh gute Frage…kenne mich mit den Rechten etc. unter Linux nicht wirklich gut aus, aber mit „sudo su“ wechselst du ja auf den User „root“….von daher ist es klar das „sudo su -c….“ funktioniert.
      Zu dem Skript:
      Ist das Skript ausführbar gemacht worden?
      Hast du den KOMPLETTEN Pfad zu der Ports.sh angegeben?
      Hast du mal versucht das Skript händisch (als root) zu starten?

      Gruß
      Daniel

      1. Ok, händisch lässt sich das Script nicht ausführen..

        Obwohl es vorhanden ist (test.sh):
        pi@raspi ~ $ dir /home/ffb
        Desktop pistore.desktop test.sh

        Kommte die Meldung
        pi@raspi ~ $ sudo sh /home/ffb/test.sh
        : not foundest.sh: 2: /home/ffb/test.sh:
        : Datei oder Verzeichnis nicht gefunden

        Habe auch:
        sudo chmod -x /home/ffb/test.sh
        versucht. Keine Fehlermeldung, ändert aber nichts. test.sh wird nicht ausführbar

          1. hi,
            habe ich versucht, ändert nichts.
            Ich werde jetzt nochmal alles neu aufspielen und einrichten

  30. Hi,
    nochmal eine kleine Rückmeldung von mir. Habe den Fehler gefunden und vielleicht interessiert es noch andere die den gleichen Fehler haben.

    Fehlermeldung:
    -bash: /etc/test.sh: /bin/sh^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden

    Das Problem liegt darin dass ich das Script „ports.sh“ mit dem editor (Windows) erstelle habe. Dieser verwendet jedoch eine andere Zeichencodierung :-(

    Script einfach in der Console erstellen und den Text rein kopieren dann geht es.

    Alles als root ausführen (einfach su eintippen)

    1. nano /etc/ports.sh (erstellt und öffnet die datei ‚ports.sh‘ im Ordner etc)
    2. den Text (zB für GPIO2):
    #!/bin/sh
    echo „2“ > /sys/class/gpio/export
    echo „out“ > /sys/class/gpio/gpio0/direction
    chmod 666 /sys/class/gpio/gpio0/value
    chmod 666 /sys/class/gpio/gpio0/direction

    abtippen oder kopieren

    3. Taste STR+O = speichern STR+X beenden
    4. chmod +x /etc/ports.sh (die Datei ausführbar machen)
    5. /etc/ports.sh (testen ob die Datei fehlerfrei ausgeführt wird)

    Gruß Andy

    1. Hey,

      ahh das wäre meine nächste Vermutung gewesen :)
      Bei Windows immer vorsichtig sein! Windows verwendet CR + LF als Zeilenabschluss, aber Linux will sehr oft nur eins von beiden haben.
      Ich verwende „Programmers Notepad“….damit hatte ich den Fehler noch nie!

      Gruß
      Daniel

  31. hallo kampi,
    super ausführliche seite. danke.
    ich habe nach deiner anleitung versucht ein kleines c-programm zu schreiben, mit dem man aus einer mysql-db die ports schalten kann. funktioniert auch.
    würde hier gut rein passen. wenn du daran interesse hast, sag bescheid.
    gruß
    timo

  32. Hallo kampi,

    erst einmal muss ich dir Lob, Anerkennung und Dank aussprechen.
    Ohne diese Seite wäre ich mit dem Raspberry nicht weit gekommen.
    Nun leider bin ich auf das selbe Problem wie schon von JayB gestoßen.
    Die Webseite wird bis zu den Button korrekt angezeigt. Danach wird vom Codeausschnitt ab:
    echo „GPIO $x: …..bis….?> nur kauderwelch angezeigt.
    Meine Vermutung ist, dass eine IO.php-Datei fehlt.
    Oder der php-code wird nicht erkannt, obwohl ich alles packets installiert habe.
    Hast du da einen Rat, der mir helfen könnte.

    1. Hey,

      wenn du den Code kopiert hast, kann es gut sein das sich unerlaubte Zeichen mit eingeschlichen haben.
      Installier mal das Programm „Dos2Unix“:

      sudo apt-get install dos2unix

      und gib dann mal

      dos2unix /Pfad/MeinePHPDatei.php

      ein. Wenn das Problem dann noch bestehen sollte, sag Bescheid :)

      Gruß
      Daniel

      1. Das gleiche Problem besteht leider immer noch.
        Welche Endung muss die Webseite haben?
        .html? .php? oder was es auch geben soll .phtml?
        Den Code habe ich eins zu eins auf dem Raspberry abgeschrieben und auch auf Fehler geprüft.
        Kannst du mir evtl. sagen, was die IO.php machen soll? dort kommen auch Fehler auf. Die Datei fehlt irgendwie.
        Werde sonst die Distribution erst einmal neu aufsetzen, da ich sehr viel experimentiert hatte.

          1. Sobald ich einen Button drücke, wechselt er zu einer leeren Seite.
            Wenn ich alles unter .php lade wird ebenfalls eine leere Seite angezeigt.
            Der ganze PHP-Teil wird unter html nicht erkannt und direkt unverschlüsselt auf der Seite angezeigt wird.
            Aus irgendeinen Grund wird der PHP-Teil nicht interpretiert.

          2. Hey,

            schick mir mal bitte einen Screenshot des Fehlers, deine Dateien und eine genaue Beschreibung was du alles schon gemacht hast per E-Mail.
            Dann schaue ich mal drauf.

            Gruß
            Daniel

  33. hallo,
    DANKE! für das super beschriebene Tutorial!
    hätte da noch eine kleinigkeit zu lösen.
    Ich benutze meinen RPI mit AirPlay, Squeezebox und MPD und möchte mir ein shell script basteln damit sich mittels einem GPIO ein audio-verstärker automatisch einschaltet.
    Ich benutze eine externe soundkarte am rpi, da die qualität der onboard karte etwas zu wünschen übrig lässt. jetzt müsste das script ständig auf meine soundkarte horchen und wenn da was ankommt sollte der gpio schalten.
    viell. gibts ja ideen?

    DANKE!!!

    1. Hallo Sevi,

      da kann ich dir leider nicht weiterhelfen, da ich bisher weder mit den Tools noch mit einer externen Soundkarte gearbeitet habe.
      Sorry :(

      Gruß
      Daniel

  34. Hi, erstmal danke für die Anleitung! Sehr verständlich erklärt.

    Bei mir funktioniert es auch soweit. Nur möchte ich die PHP-Seite nun über den midori Browser direkt auf einem über HDMI angeschlossenen Display anzeigen. Wenn ich die PHP-Seite mit Midori öffne wird mir nur eine leere Seite angezeigt. Ich werde beim öffnen gefragt ob ich die datei speichern will.

    Hast du vielleicht noch einen lösungsvorschlag wie ich das an laufen kriegen könnte? Anscheind kann kann der midori browser keine PHP dateien verarbeiten.

  35. Hallo,

    kannst kann mir jemand vllt genauer erklären wie man die Website aufsetzt?
    Habe da leider 0 Erfahrung.
    Der Rest klappt aber super! Danke für das TuT!

  36. Hi,

    ein kurzer Hinweis, vllt. kann ich damit jmd. weiterhelfen.

    Ich hatte das Problem, dass ich für die shell_exec befehle als errors „permission denied“ erhalten habe.
    Lag daran, dass bei mir die Rechte für /sys/class/gpio/… richtig vergeben waren, aber ich weiß nicht, ob das normal ist, auf jeden Fall wurden bei mir über obiges shell script zur initialisierung des ports nur links in diesem verzeichnis erzeugt, die dann auf die dateien gezeigt haben, welche in /sys/devices/virtual/gpio waren. Dort waren für die neuen files für sonstige benutzer außer owner und grp keine rechte gesetzt. Nach vergeben der Rechte hat dann alles funktioniert.
    Hat mich ziemlich viel Zeit gekostet, das herauszufinden :S

    Vllt. kann mich jmd darauf hinweisen, ob ich etwas falsch gemacht habe?!

    Lieber Gruß
    Oli

    1. Hey,

      also normalerweise sollten die Benutzer schon richtig gesetzt sein.
      Ich weiß natürlich nicht wie du jetzt vorgegangen bist :)
      Aber solange es funktioniert, ist es doch fein ^.^

      Gruß
      Daniel

      1. Hallo Daniel,
        sehr geniales Tut, danke!
        Ich habe jetzt 1 Tag/Nacht mit dem Versuch verbrachtm die Eingange über die Webseite zusteuern. (Rev. B und Apache2)
        Die installation ging dank deiner Beschreibung sehr schnell und auf Konsole mir root geht ales bestens. ABER es ging halt nicht auf der Webseite. Gleiche Effekte wie hier beschrieben, keine Variablen auf der Seite. Bei mir war es so, dass das Verzeichnis /sys/devices/virtual/gpio für User keine Rechte hatte also 660.
        Du könntest ja unter -> Es funktioniert nicht. Was nun?: diesen Hinweis noch bringen

  37. Hallo!
    Sehr gutes Tutorial – nur scheitere ich schon, dass beim Neustart der PI nicht die zuvor definierten Zustände einnimmt. Brauche NUR Ausgänge welche aber nach Neustart alle wieder zu Eingängen werden. Was kann ich hierbei falsch gemacht haben?
    Bitte um Hilfe!
    Danke und Grüße
    Christian

    1. Hey,

      also du möchtest den GPIOs definierte Zustände nach dem Booten geben?
      Wie hast du es bisher gelöst? Per Skript? Sind die Rechte richtig gesetzt? Und es dauert eine Weile bis das Skript ausgeführt wird. Das geschieht nicht direkt nach dem Einschalten.

      Gruß
      Daniel

  38. Hallo zusammen!
    Ich bin neu im Bord und probiere gerade die oben beschriebe Software aus.
    Leider bin ich im Linux nicht sehr gut bewandert und brauche dringend Hilfe.
    Ich besitze den Raspberry Pi Vers.2 mit 512 MB und das PiFace Digital.
    Software ist das neuste Rasbian wheezy.
    Das Modul für die Steuerung habe ich mit raspbi-config geladen.
    Mit der geladenen Sofware GitHub hat mit der Beispielsofware in Pyhton garnicht functioniert. Das PiFace wurde garnicht erkannt.
    Nun probiere ich es mit den o.g. Scripten aus:

    – das gpioScript functioniert und legt die Dateien an.
    – schreiboperationen werden mit der Meldung „Schreibfehler das Gerät ist belegt“ quittiert .
    Kann mir jemand bitte weiter helfen?
    Gruß
    Rainer

    1. Hallo Rainer,

      ich kenne das PiFace Digital nicht aber wenn es bereits eine Software verwendet, die auf die GPIOs zugreifen will, kann es damit zu Zugriffsproblemen kommen. Du kannst immer nur mit einem Programm gleichzeitig auf eine Schnittstelle zugreifen und dein Problem sieht mir fast nach so etwas aus.

      Gruß
      Daniel

  39. Hallo Daniel
    jetzt möchte ich erstmal dein Web Programm zu laufen bringen.
    Bei mir werden die Buttons nicht farbig und wie in deiner Abbildung dargestellt.
    Außerdem wird unten teile des Text des php Scriptes angezeigt.
    php Script wird aber nicht ausgeführt-
    Ich benutze den Apache2 Webserver mit installierten php5.
    Woran kann es liegen???
    Gruß Rainer

    1. Hey,

      hast du die Seite von deinem Rechner aus aufgerufen oder den Midori Browser auf dem Raspberry Pi benutzt?
      Der Midori kann die Seite glaube ich nicht richtig darstellen.
      Ist dein Webserver auch richtig eingerichtet (nutze kein Apache von daher weiß ich nicht wie das geht)?

      Gruß
      Daniel

  40. Hallo!
    Ich habe noch immer Probleme mit deiner Anleitung.
    Beim Ausführen von
    sudo echo „0“ > /sys/class/gpio/Export
    kommt ein Fehler – keine Berechtigung.
    Woran kann das liegen?
    Danke und Grüße

  41. Hallo Daniel,
    danke für dein prima TUT und dass du es allen zugänglich gemacht hast.
    Nach 2 Tagen mit viel probieren und lernen haut es nun perfekt hin.
    Folgendes hat mich am schnellen Erfolg gehindert:
    zuerst die fehlende Berechtigung auch mit sudo vor der Eingabe,
    also kam ich auf die Idee es als super user zu versuchen (sudo -i).
    Nun klappte der manuelle Teil des TUT.
    Als Besitzer des Raspi B habe ich das entsprechende GPIO.PHP
    verwendet aber die GP 2, 3, 14 und 15 entfernt.
    Leider ließ sich GPIO 27 nicht schalten. Das liegt am GPIO.sh Script,
    welches noch für den Raspi A gilt. Dort die 21 in 27 geändert und das
    war es dann.
    Vielleicht hilft dieser Input ja den Raspi-Fans, die so wenig Ahnung von
    Webservern und Linux haben wie ich.
    Gruß
    Olaf

    1. Hey,

      dank dir für deine Mühe!
      Ja das Skript ist noch für die Version A gemacht worden (war ja einer der ersten Besitzer der Himbeere :) ) und dem entsprechend sind da bei der aktuellen Version ein paar Dinge zu ändern.

      Gruß
      Daniel

  42. Hallo!

    Ich habe das gleiche Problem wie SasK, wenn ich auf einen Button klicke kommt eine Leere Seite.
    Ich würde mich über deine Hilfe sehr freuen.

    RaspBe

  43. Hi,
    ich schließe mich erst einmal den anderen an. Großes Lob für die Seite.

    Bei mir läuft das Schalten der Ausgänge über den Webserver leider noch nicht.
    Berechtigungen für pi und für /var/www/index.php habe ich verteilt.
    In der Kommandozeile kann ich mit dem User pi die Ausgänge über Export setzen.
    Über startx und midori öffne ich die Seite über 127.0.0.1. (habs mit dem user pi und root versucht)
    lighttpd und php läuft.
    Er scheint die Ausgänge mit shell_exec nicht schalten zu wollen.
    Was mache ich noch falsch?
    Gruß
    oliver

    1. Hey Oliver,

      vielen Dank für das Lob.
      Auch hier erstmal die provisorische Frage: Hast du die Gruppe und den Besitzer der PHP-Dateien auf pi:www-data oder www-data:www-data geändert?
      Dein Fehlerbild hört sich für mich so an, als ob der Webserver die Ausführung des shell_exec() Befehls blockt, da die Seite nicht zu der selben Gruppe / Besitzer wie die PHP-Seite gehört.

      Gruß
      Daniel

      1. Hi Daniel,
        ja die Berechtigungen habe ich vergeben für den user pi und der Gruppe www-data zugewiesen.
        root@raspberrypi:# sudo chown pi.www-data /var/www/index.php
        habe ich ausgeführt.
        Das ist auch meine Vermutung mit der Berechtigung. Irgendwie scheint php keinen Zugriff auf die Ports zu bekommen. Es klappt weder auslesen noch schreiben.

        Gruß und Danke für die schnelle Antwort
        Oliver

        1. Ich setzte den Wert mit
          shell_exec(„echo \“0\“ > /sys/class/gpio/gpio4/value“);
          und bnutze die Bord Version B
          Auf Konsolenebene lässt sich der Wert einfach setzten

          1. Vielleicht noch zu erwähnen, dass ich den GPIO4 vorher mit 1 auf aktiv geschaltet habe über die Konsole und jetzt versuche ihn wieder auszuschalten :)

          2. Hey,

            also das du das über Konsole schalten kannst, aber nicht über Web spricht eigentlich richtig deutlich für ein Rechteproblem.
            Aber ich sehe gerade, dass du die Berechtigung der Datei „index.php“ gesetzt hast. Ist das auch deine PHP Datei die die GPIOs schaltet?

            Gruß
            Daniel

      2. Ja ich habe alles für einen schnellen Test in eine .php Datei geschrieben, die auch die Ausgänge schaltet. Bei 127.0.0.1 wird nur diese eine .php Datei aufgerufen. Die Berechtigung habe ich aber auch für das gesamte Verzeichnis /var/www gesetzt, als es nicht funktioniert hat.

      3. Ich habe
        fastcgi.server = ( „.php“ => ((
        „bin-path“ => „/usr/bin/php5-cgi“,
        „socket“ => „/tmp/php.socket“
        )))
        aus der lighttpd.conf file herausgenommen, da er gemeckert hat. Angeblich wäre das eine doppelt Deklaration von fastcgi. Ebenso „mod_fastcgi“.

        1. Hey,

          das kann natürlich sein das er gar kein PHP ausführt!
          Mach dir mal eine neue PHP-Datei und schreibe da:

          phpinfo()

          rein und öffne sie mal.
          Funktioniert das?

          Gruß
          Daniel

  44. Servus,
    vorerst auch von mir großen Respekt für das Projekt und auch super beschrieben auf der Seite.

    Leider funktioniert bei mir das Script leider auch nicht. Ich versuche aktuell einfach nur, den Befehlt einfach nur mal auszuführen. Wenn ich die PHP-Seite mit diesem Befehl in der Shell ausführe klappt auch alles. Sobald ich jedoch die Seite über den Browser aufrufe, bleibt der Befehl „ohne“ Funktion :(

    shell_exec(„echo \“1\“ > /sys/class/gpio/gpio17/value“);

    das Script an sich, wie oben angeboten, klappt bei mir leider auch nicht. Es werde mir zwar sämtliche Sachen angezeigt wie auf dem Bild oben, jedoch alle Buttons, etc, sind „ohne“ Funktion.

    Ich hoffe, dass mit hier noch jemand helfen kann.
    Vielen lieben Dank schon mal und lieben Gruß
    Joris

    1. Hey,

      vielen Dank für das Kompliment.
      Hast du die Rechte dem entsprechend gesetzt, bzw. den User lighttpd zur Gruppe „gpio“ hinzugefügt?

      Gruß
      Daniel

      1. Hi Daniel,

        vielen lieben dank für deine schnelle Rückmeldung. Habe es gerade nochmal versucht, jedoch leider weiterhin „ohne“ Funktion.

        Das Script schreibt nichts in’s „value“ und es werden auch keine Werte ausgelesen. Irgendwie verzweifele ich gerade :(

        Vielleicht hast du ja noch ein TIPP für mich.
        LG Joris

        1. Hey,

          hast du mal beim Booten geguckt ob ein Fehler ausgegeben wird?
          Sonst probier mal folgendes:

          $ sudo apt-get install dos2unix
          $ dos2unix /Pfad zu deinem Skript

          Und dann noch mal probieren.

          Gruß
          Daniel

  45. Hey Daniel,
    danke erneut für die Unterstützung. Aber auch leider dieses hat zu keinerlei Veränderung geführt. Es passiert einfach nichts :(

    Ich glaube, dass ich wie Daniel (der das Gleiche Problem weiter oben geschrieben hat) leider einen anderen Weg einschlagen muss. Bei ihm hat es ja mit wirinigPI wohl geklappt:

    shell_exec(„/usr/local/bin/gpio -g write 17 0“);

    Ich weiß mir sonst leider auch keinen anderen Rat :(
    Trotzdem, vielen lieben Dank & Gruß
    Joris

    1. Hey,

      im Grunde kann das nur ein Rechteproblem sein :)
      Muss man halt mal genau forschen.
      Hast du das Skript mal als User „root“ ausgeführt?

      Gruß
      Daniel

  46. Hey,
    das denke ich mir mal auch. Wenn du über Shell meinst, habe ich es auch schon so Probiert:
    sudo php /var/WWW/gpio.php
    Aber da ja hierbei keinerlei Parameter übergeben werden, kann ich die Funktionalität leider nicht testen.

    Habe nun heraus bekommen, dass die Variablen $val_gpio & $dir_gpio keinerlei Werte enthalten. Sprich bei der Statusabfrage bleiben diese beiden Variablen aus irgendwelchen Gründen leider leer. Hättest du noch eine Idee?
    Gruß Joris

  47. Hallo,
    erstmal danke für die Website, find ich sehr toll was du da machst, großen Respekt.

    Aber ich habe ein Problem, und zwar…
    Der Ordner „gpio0“ wird normal angelegt und es sind auch die Ordner „Direction“ und „Value“ vorhanden. Die Werte „0“ und „1“ lassen sich auch ganz normal reinschreiben. Doch das Problem ist, dass die Diode nicht leuchtet. Die bleibt immer ausgeschaltet. Direction ist auf „out“ gesetzt. Hab auch mit „gpio1“ versucht, hat nicht funktioniert.

    Weißt du wo das Problem liegt?
    Zur Info vielleicht noch, ich benutze den Raspberry Model B, sprich den mit 512MB. Macht das einen Unterschied?

    Mit freundlichen Grüßen

    1. Hey,

      hast du die richtigen GPIOs verwendet?
      Hast du als Benutzer „root“ auf die Datei zugegriffen?
      Wenn du beides gemacht hast, wie genau bist du vorgegangen?

      Gruß
      Daniel

      1. Hallo,

        ja ich habe im Internet nach der Anordnung bzw. der Bezeichnung der Pins gegoogelt. Also müssten die richtigen GPIO sein. Für GPIO0 habe ich Pin 11 und für GND Pin 6 genommen.
        Meinst ob ich mit sudo in die Datei „value“ bzw. „direction“ geschrieben habe, oder?

        Vorgegangen bin ich wie folgt:
        reboot
        sudo echo „0“ > /sys/class/gpio/export
        sudo echo „out“ > /sys/class/gpio/gpio0/direction
        sudo echo „0“ > /sys/class/gpio/gpio0/value
        sudo echo „1“ > /sys/class/gpio/gpio0/value

        Und ja das wars. Hab ich was vergessen?

        MfG
        Aladdin

        1. Hey,

          hast du mal geschaut ob der Wert überhaupt geschrieben wird?
          Also einfach mal die Datei nach dem Schreiben öffnen und nachschauen.

          Gruß
          Daniel

          1. Hey,

            ja klar, habs paar mal überprüft, und es wird immer reingeschrieben. Deshalb dachte ich zuerst, dass vielleicht die LEDs kaputt sind, hab sie dann getestet und die funktionieren.

            MfG
            Aladdin

          2. Hey,

            dann kann es nur ein Rechteproblem sein.
            Gehört der Webserver (www-data) zur Gruppe gpio?

            Gruß
            Daniel

          3. Hey,

            wieso Webserver? Der Webserver hat ja jetzt noch nichts mit dem zu tun, oder? Ich will ja nur die LEDs über die Console ansteuern, und das funktioniert eben nicht :)
            Habe, wie du oben beschrieben hast, die Befehle eingegeben, aber leider erfolglos.

            MfG
            Aladdin

          4. Hey,

            ohh sorry. Dann habe ich da was durcheinander geworfen.
            Wenn ich jetzt mal auf das Pinning schaue, ist GPIO0 der Pin 1 und nicht der Pin 11 der Steckerleiste. Pin 11 wäre GPIO17.
            Bei GPIO 0 und 1 musst du aufpassen, da die Pins für den I2C da sind und dem entsprechend mit Pull-Ups auf 3,3V gelegt worden sind.

            Gruß
            Daniel

          5. Hey,

            ich hab mich an diesem Pinning orientiert –> http://pi4j.com/example/control.html , wenn du ein bisschen runterscrollst, siehst ein Diagramm.
            Mithilfe diesen Diagramms habe ich ein Java-Programm geschrieben, dass auf die einzelnen Pins bzw. LEDs zugreift. Und da ist eben GPIO0 der Pin11 und Pin1 ist 3.3 VDC Power, und hat wunderbar funktioniert.

          6. Hey,

            das Pinning bezieht sich aber nur auf die Java Anwendung.
            Für das Schalten per Konsole musst du das „richtige“ Pinning nehmen wie es auf der Platine ist.

            Gruß
            Daniel

          7. Hey,

            achso okey.
            Hab jetzt GPIO17 verwendet und funktioniert :)
            Danke für deine Hilfe :D

            MfG
            Aladdin

  48. Hi Kampi,

    das ist eine tolle Erklärung, wie wiringPi funktioniert – leider nicht 100%tig bei mir und ich denke es ist ein Rechtproblem – aber ich komme nicht weiter.

    Zusammenfassung:
    Alles funktioniert in der Shell, ich kann auch mittels „sudo php /var/www/test.php“ die Seite anzeigen, der Port wird gesetzt und abgefragt.

    Nur leider klappt das nicht im Browser auf einem anderen PC. Das heißt, ich kann ich kann aus dem Browser nicht schreiben und auch nicht lesen.

    Folgende Rechte habe ich vergeben:
    useradd -G gpio www-data
    chmod 777 /var/www/test.php
    sudo chown pi.www-data /var/www/test.php (hab auch www-data www-data ausprobiert)

    Hier mein kleines PHP-Script:

    shell_exec(„echo \“1\“ > /sys/class/gpio/gpio17/value“);

    $val_gpio = trim(@shell_exec(„cat /sys/class/gpio/gpio17/value“));
    $dir_gpio = trim(@shell_exec(„cat /sys/class/gpio/gpio17/direction“));

    echo „“;
    echo „Value: „, $val_gpio;
    echo „“;
    echo „Direction: „, $dir_gpio;
    echo „“;
    echo „“;
    echo „.“;

    Weißt Du weiter?

    Viele Grüße,
    Tobi

  49. Hi Daniel,

    Bezgl. Userrechten, diese sind alle eingetragen:
    root@homepi:/home/pi# useradd -G gpio pi
    useradd: user ‚pi‘ already exists
    root@homepi:/home/pi# useradd -G gpio root
    useradd: user ‚root‘ already exists

    Shell-Exec Script:
    <?php
    $output = shell_exec('cat /sys/class/gpio/gpio17/value');
    echo "$output“;
    ?>

    Ausgabe Webbrowser: leer, kein Zeichen

    Ausgabe mit sudo php /var/www/gpiotest.php in der Shell:
    0

    Also es wird nichts geschaltet und kommt auch nichts zurück.

    In der Shell kann ich via PHP den Port aus 1 oder 0 setzen, aber die selbst Datei im Browser auf einem anderen PC funktioniert nicht. Apache & PHP sind installiert und laufen einwandfrei.

    Viele Grüße,
    Tobi

    Viele Grüße,
    Tobi

    1. Ich hatte das gleiche Problem. Das Problem war, dass der Befehl „useradd -G gpio www-data“ einen neuen Nutzer anlegen möchte.
      Schau mit „groups www-data“ und „groups pi“ mal deine Gruppenzugehörigkeiten an. Da lag bei mir der Fehler. www-data war nicht in gpio. mit „usermod -a -G gpio www-data“ konnte ich das lösen.

  50. Hallo,

    ich wollte dir sagen wie toll deine Erklärungen mir geholfen haben.
    Mit meinem pi versuchte ich ein Webinterface mit deinem PHP-Code zu implementieren.
    Leider bin ich PHP-Neuling. Es scheint so zu sein, dass dieser PHP-Modus im Code beim ersten „>“-Zeichen aufhört. Der nachfolgende Code ist dann auf der Webseite zu lesen!
    Dieser wurde offensichtlich nicht als PHP interpretiert.
    Kannst du mir bei meinem Problem helfen?

    Vielen Dank

    Tobias

    1. Hallo Tobias,

      freut mich das dir die Seite weiterhilft.
      Hast du den Code eventuell von meiner Seite kopiert? Weil da schleichen sich gerne unerlaubte Zeichen ein. Schau mal am Ende des Artikels, dort sind Dateien die kannst du öffnen und dann kopieren bzw. mit einem Rechtsklick auf den Link die Datei speichern.
      Das sollte helfen.

      Gruß
      Daniel

  51. Habe es mit apache2 versucht: der Log gibt mir aus:
    cat /sys/class/gpio/gpio17/value permission denied

    was stimmt da nicht? Die Rechte sollten gesetzt sein :/

    Danke!

        1. Hallo zusammen,

          habe im Moment genau das selbe Problem:

          Möchte wiringPi verwenden und es funktioniert ausschließlich als root . Benutzer ist aber geändert und selbst wenn ich /sys/class/gpio/gpio18/value auch Lese- und Ausführrechte fuer other gebe, bekomme ich den permission denied ( Keine Berechtigung ) Fehler .
          Wenn jemand noch zusätzliche Tipps hätte, wäre ich dankbar.

          Viele Grüße

          Christian

          1. Hallo Christian,

            jeder Benutzer (mit Ausnahme von root) darf vom Verzeichnisbaum nicht höher gehen als /home/BenutzerXY.
            Daher wird das auch nur mit dem Benutzer root funktionieren.

            Gruß
            Daniel

          2. Hallo,

            nochmal eine kurze Rückmeldung.

            Im Moment scheint es gerade zu funktionieren, erstaunlicher Weise . Allerdings weiß ich nicht wie so und noch nicht, was ich genau tun muss, wenn das Problem wieder auftritt . Habe mehrere Dinge jetzt getan, daher, ist es schwierig zu sagen, welche Veränderung(en) genau den Ausschlag gibt/geben.
            Hoffentlich bekomme ich das nochmal hin bzw. stabil hin.

            Hier mal ein paar der Dinge, die ich getan habe ( Reihenfolge stimmt wahrscheinlich nicht, also experimentieren ! ), vielleicht hilft es ja einem anderen ( oder mir ) in Zukunft:
            -Ich habe hier wiringPi und es gibt eine Gruppe gpio, zu der habe ich den Benutzer, den ich verwenden moechte, hinzugefuegt ( GPIO Pinnummern des Chips verwendet, also in meinem Fall 18 und ggf. noch 23, 24 und 25 , durch den Benutzer ersetzen, der den Pin schreiben bzw. lesen soll. Er hat auch eine eigene Gruppe gleichen Namens, der er angehoert und er gehoert auch der Gruppe gpio an ).
            -Ich habe mit dem gpio Programm alle outputs aktiviert, die ich verwenden moechte.
            – sudo chmod -v -R 775 /sys/class/gpio/gpio{18,{23..25}}
            – sudo chown /sys/class/gpio/gpio18
            – sudo chown -h -v /sys/class/gpio/gpio18
            – sudo chmod -v -R 775 /sys/class/gpio/gpio{18,{23..25}}
            – sudo chgrp -H -R -v gpio /sys/class/gpio/gpio{18,{23..25}} – mit sudo -u echo 1 > /sys/class/gpio/gpio/18/value eine 1 / high schreiben / den Pin einschalten
            bzw. mit sudo -u echo 0 > /sys/class/gpio/gpio18/value eine 0 schreiben / den Pin ausschalten . Mit sudo -u cat /sys/class/gpio/gpio18/value kann der ( Wert des ) Pin(s) gelesen werden .

            Wie gesagt mit dem verwendeten Benutzerkonto ersetzen.

            Ob das Problem nach einem Reboot wieder auftaucht und was dann alles erforderlich ist, um es wieder zum Laufen zu bekommen, weiß ich noch nicht. Auch habe ich noch nicht die anderen GPIO-Pins verwendet, sondern nur Pin 18.

            Hoffe das hilft, da ich mir selbst nicht erklären konnte, wo das Problem liegt und es auch immer noch nicht kann, da ja von Anfang an angezeigt wurde, dass die Einträge / Dateien ( also value ) auf jeden Fall ausreichende Berechtigungen für hatten und trotzdem der Zugriff verwehrt wurde.

            Wenn jemand die Interna besser versteht, wäre ich immer noch froh um eine Erklärung, was das Problem bei mir war und was genau es löst.

            Viele Grüße
            Christian

          3. Kommentar auf https://kampis-elektroecke.de/?page_id=1659#comment-1626

            Hallo,

            nochmal eine kurze Rückmeldung.

            Im Moment scheint es gerade zu funktionieren, erstaunlicher Weise . Allerdings weiß ich nicht wie so und noch nicht, was ich genau tun muss, wenn das Problem wieder auftritt . Habe mehrere Dinge jetzt getan, daher, ist es schwierig zu sagen, welche Veränderung(en) genau den Ausschlag gibt/geben.
            Hoffentlich bekomme ich das nochmal hin bzw. stabil hin.

            Hier mal ein paar der Dinge, die ich getan habe ( Reihenfolge stimmt wahrscheinlich nicht, also experimentieren ! ), vielleicht hilft es ja einem anderen ( oder mir ) in Zukunft:
            -Ich habe hier wiringPi und es gibt eine Gruppe gpio, zu der habe ich den Benutzer, den ich verwenden moechte, hinzugefuegt ( GPIO Pinnummern des Chips verwendet, also in meinem Fall 18 und ggf. noch 23, 24 und 25 , **meinBenutzer** durch den Benutzer ersetzen, der den Pin schreiben bzw. lesen soll. Er hat auch eine eigene Gruppe gleichen Namens, der er angehoert und er gehoert auch der Gruppe gpio an ).
            -Ich habe mit dem gpio Programm alle outputs aktiviert, die ich verwenden moechte.
            – sudo chmod -v -R 775 /sys/class/gpio/gpio{18,{23..25}}
            – sudo chown **meinBenutzer** /sys/class/gpio/gpio18
            – sudo chown -h -v **meinBenutzer** /sys/class/gpio/gpio18
            – sudo chmod -v -R 775 /sys/class/gpio/gpio{18,{23..25}}
            – sudo chgrp -H -R -v gpio /sys/class/gpio/gpio{18,{23..25}} – mit sudo -u **meinBenutzer** echo 1 > /sys/class/gpio/gpio/18/value eine 1 / high schreiben / den Pin einschalten
            bzw. mit sudo -u **meinBenutzer** echo 0 > /sys/class/gpio/gpio18/value eine 0 schreiben / den Pin ausschalten . Mit sudo -u **meinBenutzer** cat /sys/class/gpio/gpio18/value kann der ( Wert des ) Pin(s) gelesen werden .

            Wie gesagt **meinBenutzer** mit dem verwendeten Benutzerkonto ersetzen.

            Ob das Problem nach einem Reboot wieder auftaucht und was dann alles erforderlich ist, um es wieder zum Laufen zu bekommen, weiß ich noch nicht. Auch habe ich noch nicht die anderen GPIO-Pins verwendet, sondern nur Pin 18.

            Hoffe das hilft, da ich mir selbst nicht erklären konnte, wo das Problem liegt und es auch immer noch nicht kann, da ja von Anfang an angezeigt wurde, dass die Einträge / Dateien ( also value ) auf jeden Fall ausreichende Berechtigungen für **meinBenutzer** hatten und trotzdem der Zugriff verwehrt wurde.

            Wenn jemand die Interna besser versteht, wäre ich immer noch froh um eine Erklärung, was das Problem bei mir war und was genau es löst.

            Viele Grüße
            Christian

          4. Neue Bemerkung zu meinem Problem:

            Nach dem Neustarten musste ich nur die Pins, die ich verwenden moechte, mit dem gpio Programm exportierten, ansonsten hat es auf Anhieb geklappt.

            Habe die Vermutung, dass es irgendwie mit der gpio Gruppe zusammenhing .
            Dazu nochmal:
            Benutzer , den man verwenden soll, muss Mitglied der gpio Gruppe sein
            sudo chgrp -H -R -v gpio /sys/class/gpio/gpio{18,{23..25}} aufrufen.
            Bin mir aber immer noch nicht sicher, ob einer der beiden Aktionen ( bzw. beide ) wirklich die entscheidende ist ( die entscheidenden sind ).

            Viele Grüße

            Christian

  52. Hallo Kampi.
    Ich habe das gleiche Problem wie voher schonmal beschrieben, dass mir die Webseite bis auf den unteren Bereich nicht richtig angezeigt wird.
    Wenn ich aber auf einen der Knöpfe drücke z.b.IOsetzen bekomme ich in einem neuen Fenster die Meldung 404-Not Found.
    Woran kann das Liegen?

    Gruß.
    Marvin

    1. Das die Seite richtig angezeigt wir habe ich nun geschafft aber der fehler 404 not found kommt trotzdem er kann also nicht auf gpio zugreifen .

    2. Hey,

      hast du die Seite eventuell umbenannt? Der Fehler kommt, wenn eine Seite geladen werden soll die es nicht gibt und nach dem IO setzen wird glaube ich die Seite neu geladen. Wenn du sie jetzt aber umbenannt hast, kann er sie nicht laden, weil der Name dann falsch ist.

      Gruß
      Daniel

  53. Hallo, du solltest eventuell erwähnen, dass sudo echo "foo" > bar nicht mit sudo Rechten die Datei beschreibt. Zumindest als ich das getestet habe, musste ich mit entweder sudo -s oder sudo sh -c "echo 'foo' > bar" den Code ausführen. Alternativ geht auch echo "foo" | sudo tee bar (wobei das auch noch foo auf der Konsole ausgibt).

    Fabian

        1. Hey,

          wunderbar das es nun funktioniert.
          Der PWM Umschalter sorgt nur dafür, dass beide Motoren die selbe PWM bekommen, damit diese gleich schnell laufen.
          Es ist ein Oder-Gatter, welches das PWM Signal zum entsprechenden Enable Pin des Motortreibers weiterführt, wenn das Schaltsignal für den Motor High ist. Damit kannst du einem Motor das PWM Signal wegschalten, woraufhin dieser sich nicht mehr dreht.
          Der Vorteil ist halt, dass beide Motoren immer das selbe PWM Signal bekommen und es so nicht vorkommen kann, dass die PWM von dem einen Motor mal anders ist als die von dem anderen und dadurch Geschwindigkeitsunterschiede entstehen.

          Gruß
          Daniel

          1. Hey Daniel,
            das hab ich dank dir nun auch verstanden.
            Da steht das der Umschalter digital sei. Also mit welcher Software soll man das realisieren ?

            Auf dem Schaltplan (http://www.directupload.net/file/d/3550/8mnwlw6e_png.html) habe ich ein Bauteil markiert. Sieht für mich ganz nach dem Umschalter aus. Aber der Umschlater ist doch digital ?

            Sorry das ich so viele Fragen hab :)
            mfg Tim

          2. Hey Tim,

            mmmh das ist, glaube ich, einfach nur unglücklich ausgedrückt.
            Die beiden notwendigen Signale sind digital und dank eines Hardwarebausteins werden die dann ausgewertet.
            Der Autor hat die Software in Python realisiert. Welche Software du verwenden willst, bleibt dir überlassen :)

            Gruß
            Daniel

  54. Hallo!
    Danke für deine ToDos nur bekomme ich es nicht gebacken.
    Was hab ich gemacht?
    Habe ein gpiodefault.sh unter /home/pi/ erstellt. Diese wird in rc.local auch ausgeführt – alle gpios sind nur als Ausgänge definiert.

    Habe dann meinen Pi per update und upgrade auf aktuellen Stand gebracht und
    sudo apt-get -y install lighttpd
    sudo apt-get -y install php5-common php5-cgi php5
    sudo lighty-enable-mod fastcgi-php
    sudo service lighttpd foce-reload
    gemacht und installiert.
    Webserver funktioniert. Auch eine erstellt phpinfo.php hab ich erstellt und in /var/WWW übertragen und ausgeführt.
    Habe deinen Code in ein gpio.php kopiert und kann die Seite am auch aufrufen. Nur kann ich nichts darüber setzen.

    Was kann falsch laufen?
    Hast du das Projekt welches ich 1:1 übernehmen kann ohne den Code in Files zu kopieren? Vielleicht hab ich mir vertippt?
    Heißt deine Webseite zum Steuern der GPIOs gpio.php?
    Bitte um deine Hilfe!
    Vielen Dank und schöne Grüße
    Chris

    1. Hey,

      hast du die Rechte und Gruppen entsprechend gesetzt. Die Webseite habe ich unter IO.php gespeichert.
      Ansonsten habe ich leider im Moment nichts fertiges :(

      Gruß
      Daniel

  55. Hallo,

    habe eine Frage, und zwar würde ich gerne ein Script über einen Taster starten und beenden. Würde soetwas generell funktionieren und wenn ja wie.?!?!?

    Danke schonmal im vorraus für die Mühe

    1. Hey,

      um was für ein Skript handelt es sich den= (Shellskript, Python, etc).
      Generell kannst du sowas natürlich machen. Das stellt kein Problem dar.

      Gruß
      Daniel

  56. Hallo Daniel,

    echt ne tolle Seite, ist immer mein erster Anlaufpunkt wenn ich nicht weiter komme.
    So auch heute. Ich hab an meinem PI einen Lichtsensor drann. Ich möchte lichtabhänig Ausgänge vom Pi schalten. Die Praxis sieht ganz gut aus, soll heißen es läuft alles. Nur möchte ich die Abfrage automatisieren. Ich glaube aber, dass es nicht sinnvoll ist ein script zu starten welches auf die Änderung eines Wertes in einer Datei wartet. hast du da eine Idee wie man das umsetzen kann? Ich würde vielleicht crontab alle zehm minuten das script ausführen lassen oder so….

    Hoffe Du kannst mir weiter helfen.

    Danke

    Christian

    1. Hallo Christian,

      du kannst mit dem Lichtsensor nur zwei Zustände überwachen (Licht an oder Licht aus), da die GPIO des Raspberry Pi digital sind und nur High und Low erkennen (weißt du das?).
      Ich würde es eher mit einem kleinen Pythonskript machen, welches im Hintergrund arbeitet und den Interrupt von dem GPIO benutzt. Dann reagiert der Raspberry Pi direkt auf eine Änderung an dem Pin und dann kannst du so deine Aktion ausführen.

      Reicht dir das als Idee :)?
      Wenn nicht einfach melden!

      Gruß
      Daniel

      1. Hi Daniel,

        Danke für die rasche Antwort. Sie ist ausreichend. Muß mich aber erst in Python einarbeiten, hab noch nichts damit gemacht. Ach ja, dass der PI nur HI und LOW erkennt weiß ich. Braucht man denn für einen Temp. Sensor noch einen A/D-Wandler????
        Ach, da fällt mir grad ein…. kann es sein, dass ich mir einen GPIO-Eingang vom PI zerschossen hab weil ich den lichtsensor schon drann hatte bevor ich den GPIO initialisiert habe???

        Gruß

        Christian

        1. Hey Christian,

          für einen Temperatursensor brauchst du schon einen A/D-Wandler, sonst macht er keinen Sinn.
          Wie kommst du darauf, dass der GPIO kaputt sein soll?

          Gruß
          Daniel

          1. Hi Daniel,

            …na ich hatte erst einen anderen Sensor und GPIO4 benutzt.
            Da funktionierte alles, d.h. die Abfrage des GPIO-Eingangs hatte ich mit watch cat /sys/class/gpio/gpio4/value beobachtet und festgestellt, dass sich der Wert ständig (nicht zyklisch) ändern obwohl der Sersor keinen anlass gegeben hätte etwas zu machen. Darauf hin hab ich einen neue schaltung gebastelt die auch wunderbar funktioniert und hatte die an den PI geklemmt ohne den GPIO auf in zu setzten. Als dann die erwartete Reaktion ausblieb, hab ich einen anderen GPIO initialisiert und ihn dann mit dem Sersor verbunden. Das hat auf anhieb funktioniert. Desshalb denke ich, dass der erste Eingang defekt ist.

            Ich werd´s aber noch einmal überprüfen.
            Meine befürchtung ist jetzt, wenn der PI resetet ist ja der Sensor schon lange aktiv weil er ja permanent mit Betriebsspannung versorgt wird. Der GPIO wird erst nach dem booten initialisiert. das hieße, ich müßte den Sensor erst mit Spannung versorgen wenn der PI den GPIO fertig initialisiert hat.

            Gruß

            Chritian

          2. Hey,

            mit dem GFPIO passiert nichts, selbst wenn er nicht initialisiert wird (die GPIOs werden Defaultmäßig als Ausgang initialisiert und solange du mit 3,3V aus dem Sensor raus kommst hast du keine Probleme).
            Deine Änderungen können was mit dem Widerstand zu tun haben. Wenn an dem Widerstand eine Spannung abfällt die minimal kleiner ist als die Spannung die der Pi benötigt um einen High-Pegel zu erkennen kann dies schon mit schwankenden Lichtverhältnissen etc. zu tun haben.
            Ich würde den Sensor eigentlich eher mit einem A/D-Wandler betreiben und dann die analogen Werte vergleichen und daraus eine Entscheidung treffen.
            Oder du nimmst eine Schaltung die bei erreichen einer bestimmten Helligkeit einschaltet und dann beim unterschreiten wieder abschaltet, sodass du feste Pegel hast. Dann sollte dein Problem auch behoben sein.

            Gruß
            Daniel

  57. hab ein problem ….
    ich kann die gpio nicht über php schalten hab alles so gemacht wie du oben beschrieben hast :(
    bitte um hilfe

        1. Hey,

          mmh das hört sich nach einem Rechteproblem an.
          Sicher das du alle Rechteeinstellungen wie oben beschrieben durchgeführt hast?

          Gruß
          Daniel

  58. Hallo
    habe das gleiche Problem wie Fitschi.
    -GPIO über Konsole schaltbar
    -php funktioniert
    -shellscript wurde ausgeführt, die gpio-Ordner sind angelegt
    -Benutzer www-data gehört zur Gruppe gpio
    -php-file gehört zur Gruppe www-data
    -php-file gehört zum Benutzer pi
    -/sys/devices/virtual/gpio hat Rechte 660

    Die Seite kommt; ich habe ein LED an GPIO 4 angeschlossen; wenn ich auf der Seite GPIO 4 anklicke und „I/O setzen“ wähle, passiert nichts; wenn ich GPIO auslese, kommt unten auf der Seite
    GPIO4:

    LED_off_GPIO
    value:
    direction:

    ohne Werte.

    Vielleicht en Tip, wo das Problem liegen könnte??

    Grüße
    Dieter

  59. Hey,
    blöde frage:
    Mit was für einem System betreibst du dein Raspberry? (also sowas wie NOOB, raspbian, wheezy?)
    oder mit was schreibst du deinen ganzen Programme?

    1. Hey Flip,

      ich nutze für meine Raspberry Pi das Betriebssystem Raspbian Wheezy.
      Die Programme schreibe ich auf meinem Windowsrechner über Programmers Notepad und kompilier die auf dem Raspi.

      Gruß
      Daniel

  60. Hallo Kampi,
    ich habe das gleiche Problem wie Dieter Steinkamp und Fitschi. Ich bin mir sicher alle Berechtigungen richtig gesetzt zu haben. Außerdem läuft der Webserver und PHP funktioniert.
    Könnte es den sein, dass sich an lighttpd irgendetwas geändert hat, dass es nun nicht mehr funktioniert? Hast du vielleicht eine Idee? Danke schon mal für die Hilfe

    1. Hallo Lukas,

      mmh keine Ahnung ob sich was geändert hat.
      Ich muss das Kapitel anscheinend noch mal neu schreiben… :(
      Du willst ganz normal einen IO per Web schalten?

      Gruß
      Daniel

  61. Hello,
    Kannst Du bitte dieses gute Tutorial etwas überarbeiten.
    Es ist sehr unsicher, was in index.hmtl und was in
    in action=“IO.php“ kommt.

    Am Ende der von Deiner Site runtergeladenen „php.txt“ zeigt HTML und PHP
    code sind zusammen.
    Also muss ich dann alle PHP code in „php.txt“ in „io.php“ kopieren?

    >>> Da wir meistens Anfänger sind, sind detailierte Beschreibungen bitter nötig.

    Aber trotzdem ein sehr gut geschriebener Artikel – auch für Ausländer wie ich gut zu lesen.

    Kannst man mir Hilfen diese zu laufen bringen ?
    Grüße

    1. Hallo Nigel,

      ich werde die Seite am Wochenende mal überarbeiten :)
      Sie ist leider noch aus der Anfangszeit des Raspberry Pi und ist daher wahrscheinlich nicht mehr ganz aktuell.

      Die .txt Dateien musst du in .php umbenennen. Der Webserver erlaubt leider keine anderen Dateiformate als .txt als Upload.

      Gruß
      Daniel

  62. pi@raspberrypi ~ $ cat /var/log/apache2/error.log

    Hallo Daniel,
    danke für Deine umfängliche Sammlung und Anleitungen zum PI.
    Ich bin noch in der Lernphase und baue einiges nach.
    Leider gelingt mir das GPIO schalten mit Deinen Dateien nicht. Wenn ich es auf der Konsole mache, funktioniert es, jedoch nicht mit den Dateien.
    Ich habe mal das Logfile vom apache2 angefügt, den Radio-Button drücke ich, nichts passiert, bei der Statusabfrage kommen die Zugriffsfehler, ich komme einfach nicht weiter!!!

    [Wed Jan 21 16:27:35 2015] [notice] Apache/2.2.22 (Debian) PHP/5.4.36-0+deb7u3 configured — resuming normal operations
    cat: /sys/class/gpio/gpio24/value: Permission denied
    cat: /sys/class/gpio/gpio24/direction: Permission denied
    [Wed Jan 21 16:28:35 2015] [error] [client 192.168.2.62] File does not exist: /var/www/LED_off.png, referer: http://192.168.2.151/IO.php

    Für Hilfe wäre ich dankbar.
    Gruß Reinald

    1. Hallo Reinald,

      zu welcher Gruppe gehören die entsprechenden PHP-Dateien? Hast du sie der Gruppe „www-data“ zugewiesen?

      Gruß
      Daniel

      1. Hallo,
        wenn ich es richtig sehe, gehören sie zur Gruppe www-date, also ok,oder?

        pi@raspberrypi ~ $ cd /var/www
        pi@raspberrypi /var/www $ ls -l
        total 20
        -rwxr-xr-x 1 pi www-data 2709 Jan 21 10:46 IO.php
        -rwxrwxrwx 1 pi www-data 2117 Jan 21 10:38 gpio-export.sh
        -rw-r–r– 1 www-data www-data 192 Jan 18 21:57 index.hhhtml
        -rwxr-x–x 1 www-data www-data 17 Jan 11 18:52 index.php
        drwxr-sr-x 2 pi www-data 4096 Jan 21 16:11 test

  63. Vielen Dank für dein Tutorial! Noch mehr aber für deine ambitionierte Hilfe für alle Fragesteller :-)

    Hier das meine:
    Ich habe 5 SolidStateRelais an einem ULN2803. Alle lassen sich nun via Website an- und ausschalten. Jedoch schlägt die Abfrage mittels trim(@shell_exec(„cat
    /sys/class/gpio/gpio0/direction“));
    fehl und im apache-log findet sich
    sh: 2: /sys/class/gpio/gpio17/direction: Permission denied : No such file or directory. Gilt auch für value. Kann das nicht so ganz nachvollziehen, zumal es der gleiche Pfad ist welcher auch durch die Buttons angesprochen wird?!
    Hast du eine Idee?

    MfG Christian

      1. Hallo Christian,

        gut das es nun funktioniert :)
        Viel Spaß damit! Falls weitere Fragen da sein sollten, kannst du sie mir ruhig per Mail schreiben :)

        Gruß
        Daniel

  64. Hallo Daniel,
    ich würde gerne eine Zeitsteuerung auf meinen Raspi realisieren. Der muss dann wohl in einen extra Programm geschrieben werden. Einstellungen über das Web Interface, wie lassen sich da Daten austauschen???

    Jörg

  65. Einfacher wäre es wohl mit einer SQL Datenbank denke ich.
    Ich werde mal ein wenig google fragen ob jemand schon etwas ähnliches gemacht hat…

  66. Hallo,
    ich bin totaler „Neuling“ mit dem Raspi.
    Nachdem ich nun diverse Beispiele aus dem dicken Buch ausprobiert habe, wollte ich nun selber mal ein kleines Programm schreiben. Dazu nutze ich Pytthon2 (IDLE) über den Desktop. Nach dem Booten bin ich als Nutzer Pi (also auch ohne root-Rechte) angemeldet. Das Programm liegt in einen Unterordner in /home/pi .
    Wenn ich das Programm aus dem LXTerminal mit sudo starte funktioniert es super. Nun wollte ich es aber gleich aus dem Python2 (IDLE) Shell mit „Run Modul“ starten. Nun erhalte ich die Fehlermeldung, dass ich keine Root-Rechte habe. Klar.
    Wie kann ich denn in der Shell Programme ausführen? Wenn ich mir die Dateieigenschaften (rechte Maustaste auf dem Desktopsymbol Python 2 IDLE) ansehe, dann ist der Besitzer dieser Programm-Datei pi und eingestellt ist, dass jeder dieses ausführen kann. Was ja auch bei einem Klick drauf funktioniert.
    Muss ich dem Benutzer Pi einfach auch root-Rechte geben? dann spare ich mir im Terminal auch das ständige sudo. Wenn ja, wie geht dieses?
    Besser wäre schon, wenn der Benutzer pi nur für das Ausführen von Python-Programmen aus der Shell root-Rechte hätte. Aber wie?

    1. Hallo,

      was macht den das Programm? Wenn es auf die IOs zugreifen will musst du das als root machen, da allen anderen Benutzer die Rechte fehlen.
      Ein Python-Programm rufst du ganz einfach über „python Programmpfad“ in der Shell auf.
      Um die Rechte eines Nutzers zu ändern musst du dem Benutzer in der Datei „sudoers“ (einfach mal Googlen, da gibt es viele gute Anleitungen zu) die Erlaubnis erteilen den Python-Interpreter ohne „sudo“ bzw. Passwort aufzurufen. Wichtig ist, du kannst nur die Berechtigungen für den Interpreter setzen und nicht für die einzelne Programme. Jedes Python-Programm wird immer über den Interpreter aufgerufen, daher sind die Rechte der Python-Programme egal, da die Rechte vom Interpreter wichtig sind.
      Hoffe das hilft weiter.

      Gruß
      Daniel

  67. Guten Morgen,

    bei mir gibt es diesen Pfad nicht.
    /sys/devices/virtual/gpio
    Leider finde ich nicht woran es liegt.

    Danke im Voraus

    Marcus Binz

  68. Hallo,

    ein neuer post…
    Nachdem ich Deine Dateien runtergeladen, den Anweisungen gefolgt bin und letztlich meines Erachtens nach alles ’richtig’ gemacht habe, kommt beim klick der command buttons der Hinweis, dass die Seite nicht erreicht werden kann.
    Im Apache2-Log steht, dass die Datei ”gopio.php” nicht gefunden werden kann.

    Da unter den command buttons das PHP-script in ’Klartext’ angezeigt wird habe ich den dumpfen Verdacht, dass dieser Teil von ”GPIO.html” als ”gpio.php” gespeichert wird.
    Zumal in der <form action="gpio.php"… auf diese Datei verwiesen wird.

    Lieg ich da richtig oder habe ich noch einen Denkfehler?
    Oder eventuell eine fehlende Datei?

    Besten Dank für die Unterstützung.

    Noch ein Hinweis: mit Deinen Erläuterungen bin ich bis dato am weitesten gekommen. Es gibt viele Tutorials aber die verlaufen sich alle sehr schnell im »Nirwana« ☺

    Grüsse
    MPunkt

    1. Hallo MPunkt,

      die Anleitung war leider etwas fehlerhaft. Ich habe nun die Fehler weitestgehend korrigiert und mal an den aktuellen Stand angepasst. Leider funktioniert PHP 7.3 noch nicht. Da muss ich noch auf Fehlersuche gehen. Daher dauert eine komplett funktionierende Lösung leider noch etwas.

      Gruß
      Daniel

  69. Na das ging ja mal flott!☺
    Besten Dank für die Info!

    Wie sagt man so schön? »Nur keinen Stress vermeiden!«
    Nochmals Danke Daniel und
    Grüsse aus dem Schwarzwald
    MPunkt

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert