¿Alguna vez te has preguntado cómo puedes controlar los GPIO de tu servidor web Raspberry Pi de forma sencilla y eficiente? En este artículo, te enseñaremos cómo usar Flask para lograrlo. ¡Sigue leyendo para descubrir más!
En este proyecto, creará un servidor web independiente utilizando una Raspberry Pi que puede alternar dos LED. Puede reemplazar estos LED con cualquier salida (como un relé o un transistor).
Para crear el servidor web, utiliza un microframework de Python llamado Flask.
Piezas requeridas
Aquí está el hardware que necesita para completar este proyecto:
- Frambuesa Pi (Cualquier Pi debería funcionar, recomiendo usarlo Frambuesa Pi 3) – leer Los mejores kits de inicio de Raspberry Pi
- Tarjeta SD (tamaño mínimo 8 GB y Clase 10)
- Fuente de alimentación micro USB
- Cable Ethernet o dongle WiFi
- tablero de circuitos
- 2x LED
- 2 resistencias de 470 Ω
- Cables de puente
Puedes utilizar los enlaces anteriores o ir directamente MakerAdvisor.com/tools ¡Para encontrar todas las piezas para tus proyectos al mejor precio!
Configuración básica de Raspberry Pi
Antes de continuar leyendo este proyecto, asegúrese de que el sistema operativo Raspbian esté instalado en su Raspberry Pi.
lee el mio Guía de introducción a Raspberry Pi para instalar Raspbian y completar la configuración básica.
Instalar matraz
Usaremos un microframework de Python llamado Botella para convertir la Raspberry Pi en un servidor web.
Para instalar Flask, se debe instalar 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 instale Flask y sus dependencias con pip:
pi@raspberrypi ~ $ sudo pip install flask
Esquema
Los esquemas de este proyecto son bastante simples. Simplemente conecte dos LED a los pines GPIO 23 y GPIO 24 como se muestra en la imagen a continuación.
Creando el script Python
Este es el script principal de nuestra aplicación. Configura el servidor web y realmente interactúa con los GPIO de Raspberry Pi.
Para realizar un seguimiento, primero cree una nueva carpeta:
pi@raspberrypi ~ $ mkdir web-server
pi@raspberrypi ~ $ cd web-server
pi@raspberrypi:~/web-server $
Crea un nuevo archivo llamado aplicación.py.
pi@raspberrypi:~/web-server $ nano app.py
Copie y pegue el siguiente script en su Raspberry Pi (este código está basado en el fantástico libro de Matt Richardson). Ejemplo).
'''
Adapted excerpt from Getting Started with Raspberry Pi by Matt Richardson
Modified by Rui Santos
Complete project details: https://randomnerdtutorials.com
'''
import RPi.GPIO as GPIO
from flask import Flask, render_template, request
app = Flask(__name__)
GPIO.setmode(GPIO.BCM)
# Create a dictionary called pins to store the pin number, name, and pin state:
pins = {
23 : {'name' : 'GPIO 23', 'state' : GPIO.LOW},
24 : {'name' : 'GPIO 24', 'state' : GPIO.LOW}
}
# Set each pin as an output and make it low:
for pin in pins:
GPIO.setup(pin, GPIO.OUT)
GPIO.output(pin, GPIO.LOW)
@app.route("/")
def main():
# For each pin, read the pin state and store it in the pins dictionary:
for pin in pins:
pins[pin]['state'] = GPIO.input(pin)
# Put the pin dictionary into the template data dictionary:
templateData = {
'pins' : pins
}
# Pass the template data into the template main.html and return it to the user
return render_template('main.html', **templateData)
# The function below is executed when someone requests a URL with the pin number and action in it:
@app.route("/<changePin>/<action>")
def action(changePin, action):
# Convert the pin from the URL into an integer:
changePin = int(changePin)
# Get the device name for the pin being changed:
deviceName = pins[changePin]['name']
# If the action part of the URL is "on," execute the code indented below:
if action == "on":
# Set the pin high:
GPIO.output(changePin, GPIO.HIGH)
# Save the status message to be passed into the template:
message = "Turned " + deviceName + " on."
if action == "off":
GPIO.output(changePin, GPIO.LOW)
message = "Turned " + deviceName + " off."
# For each pin, read the pin state and store it in the pins dictionary:
for pin in pins:
pins[pin]['state'] = GPIO.input(pin)
# Along with the pin dictionary, put the message into the template data dictionary:
templateData = {
'pins' : pins
}
return render_template('main.html', **templateData)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=80, debug=True)
Creando el archivo HTML
Al separar las etiquetas HTML de su secuencia de comandos Python, mantiene su proyecto organizado.
Flask utiliza un motor de plantillas llamado Jinja2 que le permite enviar datos dinámicos desde su secuencia de comandos Python a su archivo HTML.
Cree una nueva carpeta llamada «Plantillas»:
pi@raspberrypi:~/web-server $ mkdir templates pi@raspberrypi:~/web-server $ cd templates pi@raspberrypi:~/web-server/templates $
Crea un nuevo archivo llamado principal.html.
pi@raspberrypi:~/web-server/templates $ nano main.html
Copie y pegue la siguiente plantilla en su Pi:
<!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>
Iniciando el servidor web
Para iniciar su servidor web Raspberry Pi, vaya a la carpeta que contiene el archivo aplicación.py:
pi@raspberrypi:~/web-server/templates $ cd ..
Luego ejecute el siguiente comando:
pi@raspberrypi:~/web-server $ sudo python app.py
¡Su servidor web debería iniciarse inmediatamente!
demostración
Abre tu dirección de Raspberry Pi en tu navegador ingresando la dirección IP, en mi caso: http://192.168.1.98/.
Aquí hay una demostración en video del servidor web en acción.
Espero que este tutorial te haya resultado útil.
Compartir esta publicacion ¡Con un amigo al que también le gusta la electrónica!
Puedes contactar conmigo dejando un comentario. Si te gusta esta publicación, probablemente también te gustarán las siguientes. Así que por favor apóyame suscribiéndote a mi blog.
Gracias por leer,
-Rui Santos
El servidor web de Raspberry Pi utilizando Flask para controlar los GPIO
En este proyecto, crearás un servidor web independiente con una Raspberry Pi que puede alternar entre dos LEDs. Puedes reemplazar esos LEDs con cualquier otro dispositivo de salida, como un relé o un transistor.
Partes necesarias
- Raspberry Pi (cualquier modelo debería funcionar, se recomienda Raspberry Pi 3) – consulta los Mejores Kits de Inicio de Raspberry Pi
- Tarjeta SD (mínimo de 8GB y clase 10)
- Cargador de corriente micro USB
- Cable Ethernet o dongle WiFi
- Protoboard
- 2x LEDs
- 2x Resistencias de 470Ω
- Cables de puente
Puedes utilizar los enlaces anteriores o ir directamente a MakerAdvisor.com/tools para encontrar todas las piezas para tus proyectos al mejor precio.
Configuración básica de Raspberry Pi
Antes de continuar con este proyecto, asegúrate de tener instalado el sistema operativo Raspbian en tu Raspberry Pi. Puedes consultar mi Guía de Inicio con Raspberry Pi para instalar Raspbian y completar la configuración básica.
Instalación de Flask
Vamos a utilizar un microframework de Python llamado Flask para convertir la Raspberry Pi en un servidor web. Para instalar Flask, necesitarás tener pip instalado. Ejecuta los siguientes comandos para actualizar tu Pi e instalar pip:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python-pip python-flask
Luego, usa pip para instalar Flask y sus dependencias:
sudo pip install flask
Esquemáticos
Los esquemáticos para este proyecto son bastante sencillos. Simplemente conecta dos LEDs a los pines GPIO 23 y GPIO 24, como se ilustra en la figura.
Creación del Script Python
Este es el script principal de nuestra aplicación. Configura el servidor web e interactúa con los GPIO de la Raspberry Pi.
Para mantener todo organizado, comienza creando una nueva carpeta:
mkdir web-server
cd web-server
nano app.py
¡Wow! No sabía que se podía usar Flask para controlar los GPIO en una Raspberry Pi. Definitivamente quiero probar esto en mi propio proyecto. ¡Gracias por la idea!
¡Qué interesante! Me gustaría aprender más sobre cómo usar Flask para controlar los GPIO en un servidor Raspberry Pi. ¡Gracias por compartir!