El servidor web Raspberry Pi usa Flask para controlar los GPIO

¿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.

El servidor web Raspberry Pi usa Flask para controlar los GPIO

Piezas requeridas

Aquí está el hardware que necesita para completar este proyecto:

El servidor web Raspberry Pi usa Flask para controlar los GPIO

Puedes utilizar los enlaces anteriores o ir directamente MakerAdvisor.com/tools ¡Para encontrar todas las piezas para tus proyectos al mejor precio!

El servidor web Raspberry Pi usa Flask para controlar los GPIO

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.

El servidor web Raspberry Pi usa Flask para controlar los GPIO

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)

Ver código sin formato

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>

Ver código sin formato

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!

El servidor web Raspberry Pi usa Flask para controlar los GPIO

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/.

El servidor web Raspberry Pi usa Flask para controlar los GPIO

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

Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded




Servidor Web Raspberry Pi con Flask

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

  1. Raspberry Pi (cualquier modelo debería funcionar, se recomienda Raspberry Pi 3) – consulta los Mejores Kits de Inicio de Raspberry Pi
  2. Tarjeta SD (mínimo de 8GB y clase 10)
  3. Cargador de corriente micro USB
  4. Cable Ethernet o dongle WiFi
  5. Protoboard
  6. 2x LEDs
  7. 2x Resistencias de 470Ω
  8. 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
    


2 comentarios en «El servidor web Raspberry Pi usa Flask para controlar los GPIO»

Deja un comentario