Esegui script Python tramite l'interfaccia Web


15

Ho visto molti progetti che affermano di controllare i pin GPIO, ma voglio qualcosa di un po 'diverso, ad esempio, essere in grado di lampeggiare un LED.

Esiste un sistema là fuori in cui, tramite un'interfaccia web, posso fare clic ed eseguire uno script Python, ad esempio "blink.py" sul mio lampone.

Risposte:


12

È possibile che ciò accada in diversi modi usando CGI o altri script lato server. Un problema saranno le autorizzazioni per accedere ai pin GPIO. Non sembra esserci una soluzione pulita . Attualmente potrebbe essere più semplice chown dei file gpio all'utente che esegue il web server, chiamare un programma (suid) che può accedere ai pin o avere un demone separato con accesso ai pin a cui è possibile inviare messaggi (signal, pipe / socket, altro ipc ...).

Per "l'esecuzione di uno script Python tramite un'interfaccia web", si potrebbe desiderare di guardare web.py . È un piccolo modulo molto ordinato che ti consente di scrivere un singolo "servizio web" autonomo che può fare qualsiasi cosa. Molto utile per questo tipo di cose IME. Non richiede effettivamente alcuna configurazione o software speciale (a parte la comune installazione di Python e web.py stesso). Basta scrivere i gestori per gli URL in Python, facoltativamente con i modelli HTML ed eseguire. Punta un client (browser, altri script, wget ..) alla porta giusta e funziona. :)

Modifica: individuato un nuovo progetto, serpint sembra consentire il gpio oscillante da un socket o eventualmente un'interfaccia del dispositivo char char.


4
la boccetta sembra simile a web.py. C'è anche Django che sembra avere più funzionalità, probabilmente eccessivo per questo progetto.
Frepa,

erm, per l'accesso GPIO basta aggiungere l'utente al gruppo gpio. Oppure avvia il server come root, cosa che la maggior parte delle persone fa comunque per la porta 80. Gli esempi di pallone possono chiamare script o usare il tempo per aggiungere il sonno tra gli interruttori. La caratteristica principale è {{}} nei template di cui sospetto che l'OP non abbia avuto bisogno.
mckenzm,

Grazie per l'aggiornamento. Per "l'erm", tuttavia, questa risposta è del 2012 quando i GPIO erano notoriamente solo root. Vedo che c'è un gruppo gpio ora, che è un progresso fantastico e un modo più corretto di accedere all'hardware.
XTL

2

Se hai appena iniziato con lo sviluppo web, dai un'occhiata a Bottle . Bottle è più semplice della beuta, nel senso che è un framework web completo all'interno di un singolo file. Al contrario, Flask mira a riutilizzare il codice sonoro di diverse librerie e potrebbe quindi essere più solido, ma anche più complesso.

Ecco il mondo Hello with Bottle:

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)

Eseguilo con:

python HelloBottle.py

E apri in un browser: http://localhost:8080/hello/world


Per rendere il vostro sito web a disposizione da altri computer, insieme hosta 0.0.0.0del runmetodo. L'ultima riga di Hello World sopra dovrebbe quindi leggere:

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

Ora dovresti essere in grado di accedere al tuo sito Web tramite l'indirizzo IP del Pi, in questo modo: http://192.168.0.123:8080/hello/world

Per ulteriori dettagli, consultare la documentazione del flacone in fase di distribuzione .


Sul mio Raspberry Pi, se eseguo, curl http://localhost:8080/hello/worldricevo i risultati previsti. Tuttavia, voglio essere in grado di accedervi sul mio computer normale tramite la lan. Dopo aver utilizzato ifconfigper il mio indirizzo IP, il seguente URL sul mio normale computer è in grado di stabilire una connessione: http://192.168.1.102:8080/hello/matthew. Sono in grado di accedere a un'altra pagina Web che ho creato in " 192.168.1.102/home.php ". Avresti qualche idea su come posso accedere alla mia pagina della bottiglia?
Matthew Moisen,

Al tuo home.php si accede implicitamente tramite la porta 80 (http) prova a eseguire il Bottle su quella porta e, se succede, assicurati che non ci siano Firewall tra o sul desktop e la porta di blocco pi 8080.
Bengt

Si scopre che dovevo cambiare il mio IP in localhost o 0.0.0.0
Matthew Moisen


1

Installa iPython Notebook.

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

Quindi eseguilo:

rpi#> ipython notebook

Nota: è possibile accedervi anche da un PC:
rpi #> ipython notebook --ip = 10.0.0.7
# qui 10.0.0.7 è il mio IP RPi.
# da un altro computer nel browser sto scrivendo:
http://10.0.0.7:8888

inserisci qui la descrizione dell'immagine

Vedrai questo:

inserisci qui la descrizione dell'immagine

Quindi crea un nuovo blocco note ed esegui il tuo codice lì:

inserisci qui la descrizione dell'immagine

Metodo di prova:

inserisci qui la descrizione dell'immagine

Bibliografia:

http://ipython.org/
http://jupyter.org/
https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/
http://maxembedded.com/2014/07/ utilizzando-lampone-pi-GPIO-con-python /

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

Molto importante:

La musica è in esecuzione su RPi in background nel programma dello schermo di Linux su 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.

In bocca al lupo!


La tua domanda potrebbe essere migliorata ... Perché installare il notebook Python? Che cosa fa esattamente? Dovrebbe certamente commentare potenziali problemi di sicurezza (come lasciarlo aperto a Internet).
Jacobm001

@ Jacobm001, non oggi, non ora. Se necessario, seguire la bibliografia in basso.
Vitalie Ghelbert,

0

1
Riassumi cortesemente il tutorial nella tua risposta, nel caso in cui il link scompaia un giorno o il contrent cambi.
tlhIngan

Stiamo provando una nuova politica per quanto riguarda le risposte di solo collegamento senza informazioni qui. Se questo post non viene modificato per contenere informazioni che possono rappresentare una risposta, per quanto minima, in 48 ore verrà convertito in Wiki della comunità per semplificarne la correzione da parte della community.
Steve Robillard,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.