Servo ansteuern aus PHP.

  • Hallo Freunde.
    Ich baue zurZeit eine Website, über die ich ein Auto mit dem Raspberry Pi steuern kann...
    Und jetzt will ich für die Lenkung einen Servo ansteuern.


    Wie mache ich das jetzt am besten? Ich hatte die Idee, in php selber schleifen zu schreiben,
    wo dann immer steht "shell_exec("gpio write 0 1")" usw.
    Aber mir wurde gesagt, so schnell kann php die Befehle garnicht übergeben, und es hat auch nicht funktioniert...


    Dann habe ich weiter gegooglet, und gesehen dass man es über Python machen kann mit einer While-Schleife... Aber dann haben die da irgendwie gesagt, dass die anderen laufenden Programme sich darauf dann auch einwirken undso, und meinten irgendwas mit "Servoblaster" oder so...


    Am besten wäre ja einfach, wenn ich schreiben könnte "shell_exec("servo_start(75)")"
    und "shell_exec("servo_stop()"). Wobei 75 für die Gradzahl der Drehung stehen soll :D


    Geht sowas irgendwie? Wie soll ich das machen?
    Ich brauch die PWM auchnoch für die Regelung der Geschwindigkeit meiner Motoren...


    Mit freundlichen Grüßen,


    BDG


  • Hat denn noch nie jemand von euch ein Servo angesteuert? :(


    Moin BDG,


    scheint so als nicht ...


    Ob das alles so ganz lapidar funktioniert, kann ich nicht sagen. Ich hab' sowas mal auf einem ATMEGA in Assmbler gemacht - da ist es relativ easy. Jedenfalls sind die Hinweise in Richtung servoblaster schon mal nicht verkehrt.
    Ich für meinen Teil versuche gerade eine RGB-LED mit drei PWM-Signalen anzusteuern. Blöderweise habe ich mich, wie es so manchmal meine Art ist, im Steuerungsprogramm verhaspelt. Das sollte nur was ganz simples werden und jetzt bin ich bei einem Programm mit vier Threads und einem integrierten Telnet-Server ;) ...


    Ich verwende dabei pigpio um die einzelnen Pins anzusprechen. Ob es für pigpio jetzt eine PHP-Schnittstelle gibt, vermag ich nicht zu sagen.


    Du kannst ja mal ab und zu in meinem LED-Thread reinschauen. Ich muss noch ein paar Sachen ausprobieren und auskodieren und werde dann mal meine Erkenntnisse inkl. meines Testprogramms dort posten. Letzteres ist zwar in C, aber das pigpio Handling kann man da sicherlich rauslesen.


    ciao,
    -ds-

  • dreamshader : Nene, das muss keine extra php-Schnittstelle geben. Man muss es nur aus dem Terminal raus starten und stoppen können...
    Weil dann benutz ich einfach die Funktion in php, die etwas in der shell ausführt.
    shell_exec("der Befehl, wie als wenn man den selber eingeben würde");


    Kann man denn dann einfach bei pigpio schreiben (z.B.) : "pigpio_pwm(frequenz, länge, ...)" oder wie funktioniert das?

    Edited once, last by BDG ().

  • Hi BDG,


    pigpio ist einfach nur eine Library für den Zugriff auf die GPIOs in der z.B. das Erzeugen von PWM-Signalen bereits integriert ist.
    Ein schönes Demo-Video ist z.B. hier.


    Es gibt da verschiedene APIs zum draufsetzen, die hier ist z.B. eine API für node.js. Auch eine für python ist vorhanden, so weit ich weiss.
    Es kommt halt drauf an, was Du genau dann brauchst und machen willst.


    Dass Du jetzt eine für Deine Bedürfnisse vorgefertigte API findest, halte ich persönlich für ziemlich unwahrscheinlich. Ich kann mich zwar erinnern, dass in der pigpio Library ein spezielles Servo-Handling integriert ist, das habe ich mir aber mangels Verwendung bisher noch nicht genauer angeschaut.
    Da wird Dir dann nichts anderes übrig bleiben und Du wirst Dir halt mal die Bibliothek holen, installieren und dann gucken, was Du damit anfangen kannst.
    Das ist halt eine C-Library ...


    Da mir die C-Funktionen ausreichen, habe ich nicht weiter herum recherchiert. Da wird Dir vermutlich eine umfangreiche Suchaktion bevorstehen.
    Selbiges gilt für servoblaster. Die habe ich gleich links liegen gelassen, weil ich den Eindruck hatte, das wäre für meinen Verwendungszweck das falsche.


    Notfalls musst Du die PWM-Signale selbst erzeugen ... in PHP sehe ich da allerdings eher schwarz ...


    cu,
    -ds-

  • Ja oke, aber gibt es denn einen Befehl, denn ich einfach ins Terminal eingeben muss, damit die PWM startet? z.B.:
    startePWM(pin, frequenz, ..., ...)
    Weil ich finde da nirgendwo Befehle oder so...
    Ja, wenn ichs sowieso selber erzeugen muss, kann ich ja auch WiringPi nehmen, aber da ist ja dann das Problem, dass sich das
    alles beeinflussen lässt...


  • Nein ... ich hatte ja schon gesagt, pigpio ist eine Bibliothek und kein Programm, und stellt Dir nur diverse Funktionen zur Verfügung.


    Ja, Du könntest auch wiringPi nehmen, allerdings würde mir das hier zu denken geben.


    Könntest Du Deine Bemerkung "aber da ist ja dann das Problem, dass sich das alles beeinflussen lässt..." ein bisschen genauer erkären? Das versteh ich nämlich irgendwie nicht ..


    cu,
    -ds-

  • Und wie benutz ich das? Da sind immernur links zu den Ordnern und Datein, aber keine Beispiele/Anleitungen...


    Kann man das denn einfach in der shell/dem Terminal aufrufen?
    Sowas brauch ich. Dann kann ich das nämlich auch von PHP aus starten...


    Also z.B. "start_pwm(1, 2, 3)"

  • Auf der Seite ist eine ausführliche Anleitung.


    Wenn der Daemon oder das Modul läuft kannst Du mit 'echo 3=120 > /dev/servoblaster' Servo 3 auf Position 120 fahren. Mit PHP kannst Du die Datei mit fopen öffnen und die Werte reinschreiben.

  • Oke, habs installiert und alles. Aber wenn ich jetzt eingebe :
    sudo echo 3=120 > /dev/servoblaster


    Dann steht da nur : bash /dev/servoblaster: permission denied


    Was kann ich tun?

  • Typisches sudo-Problem mit der Pipe.
    Der Befehl 'echo 3=120' wird mit Root-Rechten ausgeführt und das Ergebnis mit Userrechten umgeleitet >.


    Richtiger währe:
    sudo su -c 'echo 3=120 > /dev/servoblaster'


    Durch das su -c wird der komplette folgende Befehlsstring mit anderen Benutzerrechten ausgeführt. Das hier kein anderer Benutzer angegeben ist nimmt das System 'root'. Davor kommt ein 'sudo' da 'su' sonst nach dem Kennwort von 'root' fragen würde.


    Aber nach dem chmod 777 sollte ein echo ohne sudo funktionieren.


  • ...
    Aber nach dem chmod 777 sollte ein echo ohne sudo funktionieren.



    Hi orb, altes Schlitzohr ;) ...


    Jetzt muss ich mich dann wohl doch mal näher mit diesem servoblaster beschäftigen ...
    Das ist doch ein Kernelmodul, oder?


    BDG: Hast Du das installiert? Wenn ja, wie und ist es geladen (lsmod)?
    Ich geh mal ein bisschen googoo machen :) ...


    ciao,
    -ds-


  • Du kannst Servoblaster als Kernelmodul oder als Userspace-Deamon laufen lassen.
    Der Hauptunterschied ist der, daß Du beim Kernelmodul den Zustand aus /dev/servoblaster auslesen kannst.


    Hi, ja ... danke orb, hab ich schon gefunden ...


    jetzt schreibt der gute Mann, der den servoblaster entwickelt hat, dass Servo 3 an GPIO21 hängt.
    Entweder bin ich blind oder die Wärme tut mir nicht gut ;) ... ich kann beim Pi R2 keinen GPIO21 finden :(
    Das sollte P1-13 sein, da ist aber imho PCM - also vermutlich der Sound - drauf.


    BDG: versuch doch mal einen anderen "Servo" ... z.B. 1 ...
    der wäre an einem freien Pin (GPIO17, Pin 1-11).


    cu,
    -ds-

  • Was ist mit diesem P1-11 immer gemeint?


    Also Freunde, ich wollte das, was orb geschrieben hat jetzt ausprobieren, aber soweit kam es garnicht erst.
    Ich hab von meinem Servo das Orange Kabel an Pin 21 angeschlossen
    (http://robig.net/blog/files/im…sion-2-e1347664831557.png der dritte von unten links)
    Und das braune Kabel an Masse und das Rote an 5v und als ich das letzte kabel ran gehalten hab, kam sofort kurzschluss....
    Der Raspy lebt zum glück noch.... Aber wie kann das sein?! Ich hab doch alles richtig gemacht! :( ?