Ausführen von Python-Skripten über die Weboberfläche

15

Ich habe viele Projekte gesehen, die behaupten, die GPIO-Pins zu steuern, aber ich möchte etwas anderes, zum Beispiel, dass eine LED blinken kann.

Gibt es ein System, auf dem ich über eine Weboberfläche auf ein Python-Skript klicken und es ausführen kann, beispielsweise "blink.py" auf meiner Himbeere?

J.Zil
quelle

Antworten:

12

Sie können dies mithilfe von CGI oder einem anderen serverseitigen Skript auf verschiedene Arten erreichen. Ein Problem ist die Berechtigung zum Zugriff auf GPIO-Pins. Es scheint keine saubere Lösung zu geben . Derzeit ist es möglicherweise am einfachsten, die gpio-Dateien dem Benutzer anzuzeigen , der den Webserver ausführt , ein (suid-) Programm aufzurufen, das auf die Pins zugreifen kann, oder einen separaten Daemon mit Zugriff auf die Pins, an die Sie Nachrichten senden können (signal, pipe) / socket, other ipc ...).

Zum "Ausführen eines Python-Skripts über ein Webinterface" sollten Sie sich web.py ansehen . Es ist ein sehr hübsches kleines Modul, mit dem Sie einen einzelnen, eigenständigen "Web-Service" schreiben können, der alles kann. Sehr praktisch für solche Sachen IME. Benötigt praktisch keine Konfiguration oder spezielle Software (abgesehen von der üblichen Python-Installation und web.py selbst). Schreiben Sie einfach Handler für URLs in Python, optional mit HTML-Vorlagen, und führen Sie sie aus. Richten Sie einen Client (Browser, anderes Skript, wget ..) auf den richtigen Port und es funktioniert einfach. :)

Bearbeiten: Ein neues Projekt entdeckt, Serpint scheint das Wackeln von GPIO von einem Sockel oder möglicherweise gefälschten Char Device Interface zu ermöglichen.

XTL
quelle
4
flask ähnelt web.py. Es gibt auch Django, der mehr Funktionen zu haben scheint - wahrscheinlich übertrieben für dieses Projekt.
Frepa
ähm, für den GPIO-Zugriff fügen Sie einfach den Benutzer der GPIO-Gruppe hinzu. Oder starten Sie den Server als root, was die meisten Leute sowieso für Port 80 tun. Beispiele für Kolben können Skripte aufrufen oder die Zeit verwenden, um den Ruhezustand zwischen den Umschaltungen hinzuzufügen. Das Hauptfeature ist {{}} in den Vorlagen, von denen ich vermute, dass sie das OP nicht brauchten.
McKenzm
Danke für das Update. Für die "erm" ist diese Antwort jedoch aus dem Jahr 2012, als GPIOs notorisch nur Root waren. Ich sehe, dass es jetzt eine GPIO-Gruppe gibt, was ein fantastischer Fortschritt und eine korrektere Art des Zugriffs auf Hardware ist.
XTL
2

Wenn Sie gerade erst mit der Webentwicklung beginnen, schauen Sie sich Bottle an . Flasche ist einfacher als Flasche in dem Sinne, dass es ein vollständiges Web-Framework innerhalb einer einzelnen Datei ist. Im Gegensatz dazu zielt Flask darauf ab, Soundcode aus verschiedenen Bibliotheken wiederzuverwenden und ist daher möglicherweise solider, aber auch komplexer.

Hier ist die Hallo Welt mit Flasche:

from bottle import route, run, template

@route('/hello/:name')
def index(name='World'):
    return template('<b>Hello {{name}}</b>!', name=name)

run(host='localhost', port=8080)

Führen Sie es mit:

python HelloBottle.py

Und in einem Browser öffnen: http://localhost:8080/hello/world


Um von anderen Computern Ihrer Website zur Verfügung stellen , hostum 0.0.0.0in dem runVerfahren. Die letzte Zeile der obigen Hello World sollte dann lauten:

run(host='0.0.0.0', port=8080)

Sie sollten nun in der Lage sein, über die IP-Adresse des Pi auf Ihre Website zuzugreifen: http://192.168.0.123:8080/hello/world

Weitere Informationen finden Sie in der Flaschendokumentation zur Bereitstellung .

Bengt
quelle
Wenn ich auf meinem Raspberry Pi ausführe, curl http://localhost:8080/hello/worlderhalte ich die erwarteten Ergebnisse. Ich möchte jedoch auf meinem normalen Computer über das LAN darauf zugreifen können. Nach der Verwendung ifconfigfür meine IP - Adresse ist die folgende URL auf meinem normalen Computer nicht in der Lage , eine Verbindung herzustellen: http://192.168.1.102:8080/hello/matthew. Ich kann auf eine andere Webseite zugreifen, die ich unter ` 192.168.1.102/home.php 'erstellt habe. Hättest du eine Idee, wie ich zu meiner Flaschenseite kommen kann?
Matthew Moisen
Auf Ihre home.php wird implizit über Port 80 (http) zugegriffen. Versuchen Sie, Bottle auf diesem Port auszuführen. Wenn dies erfolgreich ist, stellen Sie sicher, dass keine Firewalls zwischen oder auf Ihrem Desktop und dem Pi-Blocking-Port 8080 vorhanden sind.
Bengt
Es stellte sich heraus, dass ich meine IP entweder auf localhost oder
0.0.0.0
1

Installieren Sie iPython Notebook.

rpi#> sudo apt-get install ipython-notebook ipython3-notebook

Dann führe es aus:

rpi#> ipython notebook

Hinweis: Sie können auch von einem PC aus darauf zugreifen:
rpi #> ipython notebook --ip = 10.0.0.7
# hier ist 10.0.0.7 meine RPi-IP.
# von einem anderen Computer im Browser Ich tippe ein:
http://10.0.0.7:8888

Bildbeschreibung hier eingeben

Du wirst folgendes sehen:

Bildbeschreibung hier eingeben

Dann erstelle ein neues Notizbuch und führe deinen Code dort aus:

Bildbeschreibung hier eingeben

Methodentest:

Bildbeschreibung hier eingeben

Literaturverzeichnis:

http://ipython.org/
http://jupyter.org/
https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/
http://maxembedded.com/2014/07/ mit-himbeer-pi-gpio-mit-python /

Youtube: https://www.youtube.com/watch?v=cJuF4IDMuLY

Sehr wichtig:

Die Musik läuft auf RPi im Hintergrund im Linux-Screen-Programm über mps-youtube.

rpi#> sudo apt-get install python3-pip
rpi#> sudo pip3 install --upgrade mps-youtube  
rpi#> sudo pip3 install --upgrade https://github.com/mps-youtube/pafy/archive/develop.zip
rpi#> mpsyt # to start it
    # configure mpsyt to show video, player.
    mpsyt#> set show_video True
    mpsyt#> set player omxplayer
    mpsyt#> set search_music False
    mpsyt#> . lindsey stirling
    mpsyt#> 2 # to play song from a list.

Viel Glück!

Vitalie Ghelbert
quelle
Ihre Frage könnte verbessert werden ... Warum Python-Notebook installieren? Was genau macht es? Es sollte auf jeden Fall auf mögliche Sicherheitsbedenken eingegangen werden (z. B. das Internet offen lassen).
Jacobm001
@ Jacobm001, nicht heute, nicht jetzt. Befolgen Sie bei Bedarf die Bibliographie unten.
Vitalie Ghelbert
0

Hier ist ein Tutorial, wie dies erreicht werden kann: https://roderickvella.wordpress.com/2017/01/04/control-a-separate-running-script-from-a-web-server-python-rpi/

Joe
quelle
1
Fassen Sie das Tutorial bitte in Ihrer Antwort zusammen, falls der Link eines Tages verschwindet oder sich der Inhalt ändert.
tlhIngan
Wir versuchen hier eine neue Richtlinie in Bezug auf informationslose Nur-Link-Antworten. Wenn dieser Beitrag nicht so bearbeitet wurde, dass er Informationen enthält, die als Antwort stehen können, jedoch nur minimal, wird er in 48 Stunden in das Community-Wiki konvertiert, um die Korrektur durch die Community zu vereinfachen.
Steve Robillard