Ejecute scripts de Python a través de la interfaz web

15

He visto muchos proyectos que afirman controlar los pines GPIO, pero quiero algo un poco diferente, por ejemplo, poder parpadear un LED.

¿Existe algún sistema en el que, a través de una interfaz web, pueda hacer clic y ejecutar un script de Python, por ejemplo "blink.py" en mi frambuesa?

J.Zil
fuente

Respuestas:

12

Puede hacer que esto suceda de muchas maneras utilizando CGI u otro script del lado del servidor. Un problema serán los permisos para acceder a los pines GPIO. No parece haber una solución limpia . Actualmente, podría ser más fácil compartir los archivos gpio para el usuario que ejecuta el servidor web, llamar a un programa (suid) que pueda acceder a los pines o tener un demonio separado con acceso a los pines a los que puede enviar mensajes (señal, canalización) / socket, otro ipc ...).

Por "la ejecución de un script en Python, a través de una interfaz web", es posible que desee ver en web.py . Es un pequeño módulo muy ordenado que le permite escribir un solo "servicio web" independiente de archivos que podría hacer cualquier cosa. Muy útil para este tipo de cosas IME. No requiere efectivamente ninguna configuración o software especial (aparte de la instalación común de Python y el propio web.py). Simplemente escriba controladores para las URL en Python, opcionalmente con plantillas html y ejecútelo. Apunte un cliente (navegador, otro script, wget ...) al puerto correcto y simplemente funciona. :)

Editar: un nuevo proyecto detectado, serpint parece permitir mover gpio desde un zócalo o posiblemente una interfaz de dispositivo char falsa.

XTL
fuente
44
matraz parece similar a web.py. También está Django, que parece tener más funciones, probablemente exagerado para este proyecto.
Frepa
erm, para acceder a GPIO solo agregue el usuario al grupo gpio. O inicie el servidor como root, lo que la mayoría de la gente hace para el puerto 80 de todos modos. Los ejemplos de frascos pueden invocar scripts o usar el tiempo para agregar el sueño entre alternar. La característica principal es {{}} en las plantillas que sospecho que el OP no necesitaba.
mckenzm
Gracias por la actualización. Sin embargo, para el "erm", esta respuesta es de 2012 cuando los GPIO solo eran notoriamente root. Veo que ahora hay un grupo gpio, que es un progreso fantástico y una forma más correcta de acceder al hardware.
XTL
2

Si recién está comenzando con el desarrollo web, eche un vistazo a Bottle . La botella es más simple que el matraz en el sentido de que es un marco web completo dentro de un solo archivo. Por el contrario, Flask pretende reutilizar el código de sonido de diferentes bibliotecas y, por lo tanto, podría ser más sólido, pero también más complejo.

Aquí está el Hola Mundo con Botella:

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)

Ejecútalo con:

python HelloBottle.py

Y abrir en un navegador: http://localhost:8080/hello/world


Para hacer que su sitio web a disposición de otros equipos, establecidos hosta 0.0.0.0en el runmétodo. La última línea del anterior Hello World debería leer:

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

Ahora debería poder acceder a su sitio web a través de la dirección IP de Pi, así: http://192.168.0.123:8080/hello/world

Consulte la documentación de la botella en la implementación para obtener más detalles.

Bengt
fuente
En mi Raspberry Pi, si ejecuto curl http://localhost:8080/hello/world, recibo los resultados esperados. Sin embargo, quiero poder acceder a esto en mi computadora normal a través del LAN. Después de usar ifconfigmi dirección IP, la dirección URL siguiente en mi ordenador normal no es capaz de establecer una conexión: http://192.168.1.102:8080/hello/matthew. Puedo acceder a otra página web que hice en ` 192.168.1.102/home.php '. ¿Tendrías alguna idea de cómo puedo ir a mi página de botellas?
Matthew Moisen
Se accede implícitamente a su home.php a través del puerto 80 (http) intente ejecutar la botella en ese puerto y, si tiene éxito, asegúrese de que no haya cortafuegos entre su escritorio y el puerto de bloqueo pi 8080.
Bengt
Resulta que necesitaba cambiar mi IP a localhost o 0.0.0.0
Matthew Moisen
1

Instalar iPython Notebook.

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

Luego ejecútalo:

rpi#> ipython notebook

Nota: También puede acceder desde una PC:
rpi #> ipython notebook --ip = 10.0.0.7
# aquí 10.0.0.7 es mi IP RPi.
# desde otra computadora en el navegador que estoy escribiendo:
http://10.0.0.7:8888

ingrese la descripción de la imagen aquí

Verás esto:

ingrese la descripción de la imagen aquí

Luego cree un nuevo cuaderno y ejecute su código allí:

ingrese la descripción de la imagen aquí

Método de prueba:

ingrese la descripción de la imagen aquí

Bibliografía:

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

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

Muy importante:

La música se ejecuta en RPi en segundo plano en el programa de pantalla de Linux en 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.

¡Buena suerte!

Vitalie Ghelbert
fuente
Su pregunta podría mejorarse ... ¿Por qué instalar Python notebook? ¿Qué hace exactamente? Sin duda, debería comentar sobre posibles problemas de seguridad (como dejarlo abierto a Internet).
Jacobm001
@ Jacobm001, no hoy, no ahora. Si es necesario, siga la Bibliografía en la parte inferior.
Vitalie Ghelbert
0

Aquí hay un tutorial sobre cómo se puede lograr esto: https://roderickvella.wordpress.com/2017/01/04/control-a-separate-running-script-from-a-web-server-python-rpi/

joe
fuente
1
Resuma amablemente el tutorial en su respuesta, en caso de que el enlace desaparezca algún día o cambie el contenido.
tlhIngan
Estamos probando una nueva política con respecto a las respuestas sin información de solo enlace aquí. Si esta publicación no se edita para contener información que pueda ser una respuesta, por mínima que sea, en 48 horas se convertirá a Community Wiki para simplificar que la comunidad la corrija.
Steve Robillard