Webbläsare php köra python script

Permalänk
Medlem

Webbläsare php köra python script

Hej! har försökt att få min rpi att genom en apache webserver när en php sida anropas köra ett pythonscript på rpin som aktiverar GPIO portar. Jag vet verkligen inte hur jag ska få php delen att fungera. Pythonscriptet fungerar utan problem.

Mvh
Dalgren

Visa signatur

Crosshair IV | 1055T @ 3.2 GHz | 4 GB Corsair dominator | Corsair H50 | Fractal Design R3 | 2x PowerColor 6950 2GB | Corsair HX 750W

Permalänk
Medlem
Visa signatur

CPU: Ryzen 9 3900x Noctua NH-D14 MOBO: TUF Gaming X570-PLUS GPU: GTX 980 RAM: 32 GB 3200 MHz Chassi: R4 PSU: Corsair AX860 Hörlurar: SteelSeries 840 Mus: Logitech G502 Lightspeed V.v. nämn eller citera mig för att få svar.

Permalänk
Medlem

Du hade kunnat göra system("sudo python gpio-script.py"), men problemet är att GPIO kräver superuser-privilegier, vilket Apache vanligtvis inte har, så det går inte. Tror det ska gå med hjälp av WSGI, men kan inte hjälpa dig med det. (kolla efter mod_wsgi för Apache)

Jag kämpade själv länge med detta, fast med nginx istället för Apache. Lyckades till slut genom att köra en dedikerad Python-server bakom nginx.

Edit: Glömde nästan, jag fick det visst att fungera på Apache genom att kombinera system-funktionen med följande verktyg:
http://wiringpi.com/the-gpio-utility/
Upplevde det en aning långsamt (knappt en sekunds fördröjning), men om det inte är ett bekymmer så kan du testa det. Inte så svårt att komma igång, och det fixar alltså superuser-hindret.

Visa signatur

AMD Ryzen 7 5800X | 32 GB Corsair Vengeance 3200 MHz | ASUS TUF Geforce RTX 3080

Permalänk
Medlem
Skrivet av L'ombra:

Du hade kunnat göra system("sudo python gpio-script.py"), men problemet är att GPIO kräver superuser-privilegier, vilket Apache vanligtvis inte har, så det går inte. Tror det ska gå med hjälp av WSGI, men kan inte hjälpa dig med det. (kolla efter mod_wsgi för Apache)

Jag kämpade själv länge med detta, fast med nginx istället för Apache. Lyckades till slut genom att köra en dedikerad Python-server bakom nginx.

Edit: Glömde nästan, jag fick det visst att fungera på Apache genom att kombinera system-funktionen med följande verktyg:
http://wiringpi.com/the-gpio-utility/
Upplevde det en aning långsamt (knappt en sekunds fördröjning), men om det inte är ett bekymmer så kan du testa det. Inte så svårt att komma igång, och det fixar alltså superuser-hindret.

Jag har installerat detta nu men jag är inte riktigt fullt förstående i hur detta ska kunna köra pythonscript?

Visa signatur

Crosshair IV | 1055T @ 3.2 GHz | 4 GB Corsair dominator | Corsair H50 | Fractal Design R3 | 2x PowerColor 6950 2GB | Corsair HX 750W

Permalänk
Medlem

Nej, jag var nog otydlig. Det hjälper dig inte att köra Python-skript, så om det är det som är slutmålet så har du ingen nytta av detta. Men det låter dig styra GPIO. (via PHP)

T ex, för att sätta upp GPIO 17 som output och slå på den:

system("gpio -g mode 17 out") system("gpio -g write 17 1")

För att stänga av:

system("gpio -g write 17 1")

Visa signatur

AMD Ryzen 7 5800X | 32 GB Corsair Vengeance 3200 MHz | ASUS TUF Geforce RTX 3080

Permalänk
Medlem

Det ska gå att exportera GPIO pinnar så att de går att styra utan root access:
http://elinux.org/RPi_Low-level_peripherals: "Additionally, it can export/un-export the GPIO devices for use by other non-root programms - e.g. Python scripts. (Although you may need to drop the calls to GPIO.Setup() in the Python scripts, and do the setup separately in a little shell script, or call the gpio program from inside Python)."

Går eventuellt att skapa något program som ligger och körs i bakgrunden (startat som root) som du anropar från PHP också.