Está en la página 1de 17

Rasberry Pi Web Service

Usando flask con


control a los GPIOS

David Díaz, blah blah blah blah


materiales
Raspberry Pi placa de pruebas

tarjeta sd LEDs 2x

cargador Micro USB resistores 2x 470

cable de Ethernet cable puente


paso 1
instalar flask
Vamos a utilizar un microframework de Python llamado Flask
para convertir la Raspberry Pi en un servidor web.

Para instalar Flask, necesitará tener instalado pip.

Ejecute los siguientes comandos para actualizar su Pi e


instalar pip:
pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get upgrade
pi@raspberrypi ~ $ sudo apt-get install python-pip python-flask

Luego, usa pip para instalar Flask y sus dependencias:

pi@raspberrypi ~ $ sudo pip install flask


paso 2
esquemas
Conecte dos LED a los pines
GPIO 23 y GPIO 24, como lo
ilustra la figura a continuación.
paso 3
Crear el script de Python

Este es el script central de nuestra aplicación. Configura el


servidor web y realmente interactúa con los GPIO de Raspberry
Pi.
Para mantener todo organizado, comience creando una nueva
carpeta:
pi@raspberrypi ~ $ mkdir web-server
pi@raspberrypi ~ $ cd web-server
pi@raspberrypi:~/web-server $

Cree un nuevo archivo llamado app.py.

pi@raspberrypi:~/web-server $ nano app.py


# Cree un diccionario llamado pines para almacenar el número de pin, el nombre y el estado del pin:
pines = {
23: {'nombre': 'GPIO 23', 'estado': GPIO.LOW},
24: {'nombre': 'GPIO 24', 'estado': GPIO.LOW}
}

# Establezca cada pin como salida y hágalo bajo:


para pin en pins:
GPIO.setup (pin, GPIO.OUT)
GPIO.output (pin, GPIO.LOW)

@ app.route ("/")
def main ():
# Para cada pin, lea el estado del pin y guárdelo en el diccionario de pines:
para pin en pins:
pines [pin] ['estado'] = GPIO.input (pin)
# Coloque el diccionario pin en el diccionario de datos de plantilla:
templateData = {
'pines': pines
}
# Pase los datos de la plantilla a la plantilla main.html y devuélvalos al usuario
return render_template ('main.html', ** templateData)

# La siguiente función se ejecuta cuando alguien solicita una URL con el número pin y la acción:
@ app.route ("/ <changePin> / <action>")
acción def (changePin, acción):
# Convierte el pin de la URL en un entero:
changePin = int (changePin)
# Obtenga el nombre del dispositivo para el pin que se cambia:
deviceName = pins [changePin] ['nombre']
# Si la parte de acción de la URL está "activada", ejecute el código sangrado a continuación:
if action == "on":
# Establezca el pin alto:
GPIO.output (changePin, GPIO.HIGH)
# Guarde el mensaje de estado que se pasará a la plantilla:
message = "Turned" + deviceName + "on".
if action == "off":
GPIO.output (changePin, GPIO.LOW)
message = "Turned" + deviceName + "off".
# Para cada pin, lea el estado del pin y guárdelo en el diccionario de pines:
para pin en pins:
pines [pin] ['estado'] = GPIO.input (pin)

# Junto con el diccionario pin, coloque el mensaje en el diccionario de datos de plantilla:


templateData = {
'pines': pines
}

return render_template ('main.html', ** templateData)

if __name__ == "__main__":
app.run (host = '0.0.0.0', puerto = 80, depuración = True)
paso 4
Crear el archivo HTML
Mantener las etiquetas HTML separadas de su secuencia de
comandos de Python es cómo mantener su proyecto organizado.

Flask usa un motor de plantillas llamado Jinja2 que puedes usar


para enviar datos dinámicos desde tu script Python a tu archivo
HTML.
Cree una nueva carpeta llamada templates:
pi@raspberrypi:~/web-server $ mkdir templates
pi@raspberrypi:~/web-server $ cd templates
pi@raspberrypi:~/web-server/templates $

Cree un nuevo archivo llamado main.html.

pi@raspberrypi:~/web-server/templates $ nano main.html


<!DOCTYPE html>
<head>
<title>RPi Web Server</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"
integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css"
integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"
integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
</head>
<body>
<h1>RPi Web Server</h1>
{% for pin in pins %}
<h2>{{ pins[pin].name }}
{% if pins[pin].state == true %}
is currently <strong>on</strong></h2><div class="row"><div class="col-md-2">
<a href="/{{pin}}/off" class="btn btn-block btn-lg btn-default" role="button">Turn off</a></div></div>
{% else %}
is currently <strong>off</strong></h2><div class="row"><div class="col-md-2">
<a href="/{{pin}}/on" class="btn btn-block btn-lg btn-primary" role="button">Turn on</a></div></div>
{% endif %}
{% endfor %}
</body>
</html>
paso 5
Lanzamiento del servidor web
Para iniciar su servidor web Raspberry Pi, vaya a la carpeta que
contiene el archivo app.py.

Luego ejecute el siguiente comando:

pi@raspberrypi:~/web-server $ sudo python app.py


paso 6
prueba

Abra su dirección Raspberry


Pi en su navegador
ingresando su dirección IP,
ejemplo: http://192.168.1.98/.

También podría gustarte