Este es uno de los capítulos del tutorial La Raspberry Pi. Primera primeros pasos.. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.
En el artículo anterior vimos como instalar WordPress en la Raspberry Pi, una solución que pone a tu alcance todo un mundo de posibilidades. Sin embargo, para esto, es necesario tener montada la infraestructura LAMP, y es posible que no necesites todo esto, y tan solo quieras un servidor web sencillo, ya sea para mostrar unos datos del funcionamiento de la Raspberry Pi, o quizá mostrar una imagen que tomes con la cámara instalada en la Raspberry, o mostrar algunos datos como la temperatura, o la humedad, o lo que sea. En este caso lo que necesitas es un servidor web sencillo con Flask.
En este artículo te mostraré como instalar y poner en funcionamiento un servidor web sencillo con Flask. Como crear páginas y plantillas, y como utilizarlo para mostrar información, resultados, etc. Igualmente verás algunos ejemplos prácticos.
Un servidor web sencillo
¿Que es Flask?
Flask es un microframework para Python basado en Werkzeug y Jinja 2. Que sea microframework, se refiere a que no dispone de todas sus funcionalidades. El objetivo es mantener el núcleo tan simple como sea posible, pero a la vez dando la posibilidad de tener todo lo que necesites a base de extender este núcleo.
Así, por ejemplo, Flask no dispone de una capa de abstracción para bases de datos o para validación de formularios, pero soporta complementos que pueden añadir esta funcionalidad a tus aplicaciones web, como si estuvieran implementados en Flask.
Instalando Flask, nuestro servidor web sencillo.
Una vez introducido Flask, vamos a meternos en harina. Lo primero, instalamos lo que necesitamos. Para ello solo tienes que entrar en tu Raspberry Pi, vía SSH, y ejecutar lo siguiente,
sudo apt install python3-flask
Nuestra primera página
Ahora que ya tenemos instalado todo lo que necesitamos, vamos a crear nuestra primera aplicación web. Para ello crea un archivo ~/ejemplo.py
con el siguiente contenido,
from flask import Flask app = Flask(__name__) @app.route('/') def hola(): return '<html><body><h1>¡Hola Mundo!</h1></body></html>' if __name__ == '__main__': app.run(host='0.0.0.0',debug=True)
Guarda el archivo, ejecuta el siguiente comando,
python3 ejemplo.py
Ya tienes tu servidor en marcha, tan solo tienes que abrir un navegador e ir a la dirección IP de tu Raspberry Pi, al puerto 5000. Así en mi caso es https://192.168.1.48:5000
. Lo que verás será lo siguiente,
Otra página
Crear una segunda página en nuestro servidor web sencillo, es tan fácil como añadir el siguiente código al archivo anterior (antes de if __name__==...
),
@app.route('/sorpresa') def sorpresa(): return '<html><body><h1>¡Sorpresa!</h1></body></html>'
Si ahora visitamos la página https://192.168.1.48:5000/sorpresa
, lo que veremos será lo siguiente.
Por supuesto podemos añadir una hoja de estilo. Esta hoja de estilo hay que situarla en un subdirectorio. Así si nuestro archivo es ~/flask/ejemplo.py
, la hoja de estilo estará en ~/flask/static/style.css
. Nuestra nueva página, será,
@app.route('/conestilo') def conestilo(): return '<html><head><link rel="stylesheet" href="/static/style.css"/></head><body><h1>Una página con estilo</h1></body></html>'
Un aspecto interesante y a tener en cuenta es que si modificas el archivo ~/flask/ejemplo.py
, este se recarga, con lo que cuando accedas de nuevo a una de las páginas podrás ver lo que hayas modificado.
Las plantillas
Una de las características mas interesantes que tiene Flask son las plantillas. Esta característica precisamente será la que utilicemos en próximos artículos para mostrar información.
Para poder hacer uso de las plantillas tenemos que crear un directorio llamado templates
. La ubicación de este directorio será ~/flask/templates/
. En este directorio colocaremos nuestra primera plantilla. Por ejemplo,
<!DOCTYPE html> <html> <head> <link rel='stylesheet' href='/static/style.css'> </head> <body> <h1>Información sobre la Raspberry Pi:</h1> <p><strong>Máquina:</strong> {{ data[0] }}</p> <p><strong>Sistema operativo:</strong> {{ data[1] }}</p> <p><strong>Temperatura: </strong>{{ data[2] }}</p> <p><strong>Uso de memoria: </strong>{{ data[3] }}%</p> </body> </html>
Y tendremos que añadir el siguiente código en ~/flask/ejemplo.py
,
@app.route('/info') def info(): afile = open('/sys/class/thermal/thermal_zone0/temp', 'r') temp = afile.read() afile.close() temp = temp[:-1] temp = str(float(temp) / 1000.0) + ' ºC' mem = psutil.virtual_memory()[2] data = [platform.machine(), platform.system(), temp, mem] return render_template('index.html', data=data)
Así cuando visitemos la página https://192.168.1.48:5000/info
, veremos lo siguiente,
Para poder utilizar esta última función, tenemos que importar dos módulos adicionales como son platform
y psutil
. Igualmente tendremos que importar la función render_template
. Así, nuestras importaciones al incicio del archivo quedarán de la siguiente manera,
from flask import Flask, render_template import platform import psutil
Iniciando nuestro servidor web sencillo con la Raspberry
Llegados a este punto, y ahora que empiezas a tener claro las posibilidades que nos ofrece esto de Flask, querás que este servidor web sencillo se inicie con la Raspberry Pi.
Sin problemas, iniciar nuestro servidor web sencillo con la Raspberry Pi, es tan sencillo, como crear una nueva tarea en cron. Para ello, solo tienes que ejecutar la orden crontab -e
, y añadir el siguiente código al final del archivo que se ha abierto,
@reboot /usr/bin/python3 /home/pi/flask/ejemplo.py
Debes prestar atención a la ubicación del archivo donde tienes tanto la página como los directorios donde están tanto las plantillas como las hojas de estilo, para que todo cuadre. De esta manera la próxima vez que se inicie la Raspberry, tendrás tu servidor en funcionamiento.
GitHub
En el repositorio de GitHub donde se encuentran los scripts para Raspberry, encontrarás el código que he utilizado para este ejemplo. Así puedes descargar los diferentes archivos ejecutando las siguientes órdenes,
cd ~ mkdir flask mkdir flask/static mkdir flask/templates cd flask wget https://raw.githubusercontent.com/atareao/raspberry-scritps/master/flask/ejemplo-01.py cd static wget https://raw.githubusercontent.com/atareao/raspberry-scritps/master/flask/static/style.css cd ../templates wget https://raw.githubusercontent.com/atareao/raspberry-scritps/master/flask/templates/index.html wget https://github.com/atareao/raspberry-scritps/blob/master/flask/templates/page.html
Conclusiones
Con esto ya tienes una idea clara de por donde empezar y como, pero sobre todo te has podido hacer una idea del potencial que tiene, y de las posibilidades que ofrece de mostrar información de forma muy, pero que muy sencilla.
Posteriormente, en otros artículos veremos como podemos utilizar este servidor web sencillo y darle diferentes utilidades. Empezando por monitorizar la temperatura y humedad de un local, pasando por un cuestionario y terminando por una webcam a tiempo real.
Más información,