रास्पबेरी पीआई और GPIO पिन: एक वेब अंतरफलक से एलईडी नियंत्रित करने

इस श्रृंखला की नवीनतम पोस्ट में, हमने देखा कि वे GPIO पिन हैं और सेवा करने के लिए, और टर्मिनल से एल ई डी की शक्ति को नियंत्रित करने के लिए कैसे; इससे पहले कि आप शुरू हम GPIO पुस्तकालयों के लिए अजगर स्थापित किया है, और इलेक्ट्रॉनिक सर्किट और काम इकट्ठा किया.
HTML में वेब अनुप्रयोग + PHP + कुछ एल ई डी GPIO के माध्यम से हैंडल करने के लिए अजगर.

इस अवसर पर हम स्थापित करेगा apache वेब सर्वर, और लिखने के लिए जानें में HTML और PHP कोड एक ही एलईडी नियंत्रित करने के लिए, या कई, एक वेब अंतरफलक से.

gpioprogramar0pngहम क्या करना चाहिए पहली बात है दीपक वेब सर्वर स्थापित करें, तो टर्मिनल में निम्न आदेश टाइप करें:

#Actualizamos los repositorios y el software de la pi
usuario@maquina:~$ sudo apt-get update && sudo apt-get upgrade

#Instalamos LAMP
usuario@maquina:~$ sudo apt-get install apache2
usuario@maquina:~$ sudo apt-get install php5 libapache2-mod-php5
usuario@maquina:~$ sudo service apache2 restart

अब हम के रूप में जोड़ देंगे sudoer उपयोगकर्ता के लिए www-डेटा, यह विकल्प अधिक सुरक्षित, लेकिन याद है कि हम एक नियंत्रित वातावरण में एक परीक्षण कर रहे हैं नहीं है; एक पर्यावरण के लिए उत्पादन में हम sudoer के रूप में पायथन में स्क्रिप्ट चलाने के लिए एक और तरीका के लिए दिखना चाहिए.

इन अनुमतियों को संपादित करने के लिए, लिखा था sudo visudo टर्मिनल में और फ़ाइल के अंत में Www-डेटा करने के लिए sudoer के रूप में जोड़ें, ऐसा होना चाहिए.

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d
pi ALL=(ALL) NOPASSWD: ALL
www-data ALL=(ALL) NOPASSWD: ALL

प्रत्येक पिन GPIO हम की जरूरत है एक subdirectory बनाएँ करने के लिए और अजगर में तीन लिपियों; चालू करने के लिए एक, दूसरे को बंद करें करने के लिए, और हमारे एलईडी चमकती बनाने के लिए एक अंतिम स्क्रिप्ट, यहाँ एक उदाहरण के साथ है पिन 4.

#!usr/bin/env/ python
## enciende.py
#Importamos la libreria y le cambiamos el nombre a GPIO
RPi.GPIO GPIO के रूप में आयात करें
#हम नंबरिंग प्रणाली है कि हम करना चाहते हैं स्थापित, 
#इस मामले में बीसीएम सिस्टम
GPIO.setmode(GPIO. बीसीएम)
#GPIO पिन कॉन्फ़िगर करें 4 एक उत्पादन के रूप में
GPIO.setup(4, GPIO. बाहर)
#हम एलईडी पर चालू करें
GPIO.output(4, GPIO. उच्च)
#!usr/bin/env/ python
## apaga.py
#हम पुस्तकालय आयात और GPIO करने के लिए उसका नाम बदल
RPi.GPIO GPIO के रूप में आयात करें
#हम नंबरिंग प्रणाली है कि हम करना चाहते हैं स्थापित, 
#इस मामले में बीसीएम सिस्टम
GPIO.setmode(GPIO. बीसीएम)
#GPIO पिन कॉन्फ़िगर करें 4 एक उत्पादन के रूप में
GPIO.setup(4, GPIO. बाहर)
#एलईडी बंद करें
GPIO.output(4, GPIO. कम)
#और हम GPIO आजाद
GPIO.cleanup()
#!usr/bin/env/ python
## parpadea.py
#हम पुस्तकालय आयात और GPIO करने के लिए उसका नाम बदल
RPi.GPIO GPIO के रूप में आयात करें

#देरी के लिए आवश्यक
आयात समय

#हम नंबरिंग प्रणाली है कि हम करना चाहते हैं स्थापित, 
#इस मामले में बीसीएम सिस्टम
GPIO.setmode(GPIO. बीसीएम)

#GPIO पिन कॉन्फ़िगर करें 4 एक उत्पादन के रूप में
GPIO.setup(4, GPIO. बाहर)

#और एलईडी बंद चालू 5 बार
मैं के लिए रेंज में(0,5):

        GPIO.output(4, GPIO. उच्च)
        time.sleep(1)(1)
        GPIO.output(4, GPIO. कम)
        time.sleep(1)(1)

#और हम GPIO आजाद
GPIO.cleanup()

अब हमारे घर पृष्ठ बनाने के लिए समय है HTML और PHP में, हम स्क्रिप्ट को चलाने करने के लिए प्रेस जाएगा बटंस होते हैं अजगर एक वेब अंतरफलक से, बाद में हम देखेंगे कैसे अंतिम पदानुक्रम.

<html>
 <head>
                        <!--index.php--> 
 </head>
 <body>

  <!--GPIO17--> 
  <form action="" method="post">
   GPIO 17&nbsp;<input type="submit" name="encender17" value="Encender">
   <input type="submit" name="apagar17" value="Apagar">
   <input type="submit" name="parpadear17" value="Parpadear">

 <br></br>

  <!--GPIO27--> 
  <form action="" method="post">
   GPIO 27&nbsp;<input type="submit" name="encender27" value="Encender">
   <input type="submit" name="apagar27" value="Apagar">
   <input type="submit" name="parpadear27" value="Parpadear">

 <br></br>

  <!--GPIO4--> 
  <form action="" method="post">
   GPIO 04&nbsp;<input type="submit" name="encender4" value="Encender">
   <input type="submit" name="apagar4" value="Apagar">
   <input type="submit" name="parpadear4" value="Parpadear">

 <br></br>

  <!--GPIO22--> 
  <form action="" method="post">
   GPIO 22&nbsp;<input type="submit" name="encender22" value="Encender">
   <input type="submit" name="apagar22" value="Apagar">
   <input type="submit" name="parpadear22" value="Parpadear">

 </body>
</html>

<?php

// Funciones PHP del pin GPIO 17

  if ($_POST[encender17]) { 
   $a- exec("sudo python /var/www/leds/gpio/17/enciende.py");
   echo $a;
  }

  if ($_POST[apagar17]) { 
   $a- exec("sudo python /var/www/leds/gpio/17/apaga.py");
   echo $a;
  }

  if ($_POST[parpadear17]) { 
   $a- exec("sudo python /var/www/leds/gpio/17/parpadea.py");
   echo $a;
  }

// Fin de las funciónes del pin GPIO 17


// Funciones PHP del pin GPIO 27

  if ($_POST[encender27]) { 
   $a- exec("sudo python /var/www/leds/gpio/27/enciende.py");
   echo $a;
  }

  if ($_POST[apagar27]) { 
   $a- exec("sudo python /var/www/leds/gpio/27/apaga.py");
   echo $a;
  }

  if ($_POST[parpadear27]) { 
   $a- exec("sudo python /var/www/leds/gpio/27/parpadea.py");
   echo $a;
  }

// Fin de las funciónes del pin GPIO 27


// Funciones PHP del pin GPIO 4

  if ($_POST[encender4]) { 
   $a- exec("sudo python /var/www/leds/gpio/4/enciende.py");
   echo $a;
  }

  if ($_POST[apagar4]) { 
   $a- exec("sudo python /var/www/leds/gpio/4/apaga.py");
   echo $a;
  }

  if ($_POST[parpadear4]) { 
   $a- exec("sudo python /var/www/leds/gpio/4/parpadea.py");
   echo $a;
  }

// Fin de las funciónes del pin GPIO 4


// Funciones PHP del pin GPIO 22

  if ($_POST[encender22]) { 
   $a- exec("sudo python /var/www/leds/gpio/22/enciende.py");
   echo $a;
  }

  if ($_POST[apagar22]) { 
   $a- exec("sudo python /var/www/leds/gpio/22/apaga.py");
   echo $a;
  }

  if ($_POST[parpadear22]) { 
   $a- exec("sudo python /var/www/leds/ejecgpio/22/parpadea.py");
   echo $a;
  }

// Fin de las funciónes del pin GPIO 22

?>

मैं इसे में समूहीकृत किए गए एक ही पन्ने पर सभी एक पृष्ठ में बना, तो के रूप में PHP प्रत्येक विकल्प के लिए, इसे चलाने के लिए, मैं करने के लिए स्क्रिप्ट पृष्ठ भेजा गया था (कोई रिक्त पृष्ठ); अब कोड को चलाने और एक ही पृष्ठ पर रहता है.

आखि़रकार हम निम्नलिखित पदानुक्रम को प्राप्त करना होगा वेब सर्वर की उपनिर्देशिका के भीतर /var/www.

Captura de pantalla डे 2014-10-05 00:06:52यदि आप आप की तरह मुझे अनुसरण कर सकते हैं चहचहाना, Facebook, Google +, LinkedIn, या यह इस प्रकाशन के अंतर्गत इस बटन के साथ साझा करें, यदि आप कोई प्रश्न या सुझाव टिप्पणी करने के लिए कृपया संकोच नहीं करते.

Artículos relacionados

हमें और अधिक पाठकों तक पहुँचने के लिए मदद Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+Email this to someone

71 पर विचार'रास्पबेरी पीआई और GPIO पिन: एक वेब अंतरफलक से एलईडी नियंत्रित करने

  1. अच्छा, despues de mirar por internet soluciones domoticas, me he decidido por tu sistema, me parece bien expuesto.
    Aun asi y debido a mi experiencia nula en soft. me surgen dudas, ojala me las pudieras solucionar, llevo haciendo muchas pruebas y nada, no lo consigo….:)
    realice todos los pasos que explicas y puedo gestionar los gpio desde el terminal con putty, pero desde web no consigo activar los script en python.
    necesito hacer una pagina en /val/www con html (index.html) para que me la sirva apache. Colocando tu pagina aqui si me salen los botones, pero no me ejecuta los script de php. En la pagina index.php, no se que poner dentro.
    Perdona por las molestias y gracias.

  2. अच्छा, me está sirviendo de mucho tus trabajos, eres un máquina!
    Estoy intentando hacer el sistema domotico para controlar varios leds desde la web pero tengo un problema que no consigo paliar.
    El tema está en que he activado los GPIO que necesito, los activo y desactivo desde terminal, me conecto desde otro pc conectado en la misma red a 192.168.X.X/leds/ y la pagina web se ve bien, el menú para el control de la vivienda se ve perfecto, pero no responden los leds, lo he intentado por activa y por pasiva, algo estoy haciendo mal
    Lo único que puedo decir es que visualizo el código fuente de la página y solo se muestra el código html, el php no aparece, no se si debería o si no.
    Pienso que puede ser algo del PHP pero tampoco estoy muy convencido porque he probado un test de PHP y lo hace bien, estoy desesperado jajaja

    • हाय जॉन,

      Me alegro mucho de que le sean de utilidad mis artículos 🙂 siempre son de agradecer los comentarios positivos.

      Todo código PHP en el navegador se muestra como HTML, ya que la función de PHP es crear en el momento y de forma dinámica las páginas web que se sirven en el navegador.

      Ejecutando los scripts en Python directamente si se encienden los leds? lo correcto seria empezar probando desde ahí e ir avanzando.

  3. नमस्कार, tengo una duda/problemilla. Quisiera conectar un buzzer en lugar de un led, pero quiero probar primero con un led para aprender. Es necesario hacer un index.html y otro .php?
    Yo tengo el led conectado al gpio4, y tengo un script on.py y otro off.py dentro de la carpeta 4. en consola funcionan perfectamente.
    y el index.html no lo puedo poner porque no me deja, pero solo tiene las funcionalidades para el led 4.

    Espero que me puedas ayudar, he visitado tu perfil de facebook y espero algún día saber tanto de Raspberry Pi como tú. Un saludo y gracias.

  4. Una web en PHP puede contener HTML por lo que solo necesitas un index.php

    Si colocas las órdenes PHP para ejecutar tus scripts en python en un archivo HTML, no se ejecutarán.

    Ahora que en la terminal funciona, podrías copiar exactamente el index.php de este tutorial, eliminando los otros GPIO y dejando únicamente el 4 que es el que utilizas; y debería funcionar.

    Si no puedes editar archivos en /var/www seguramente será por permisos, en este mismo tutorial está la solución y debería funcionar, si no es así comenta e intentaré echarte una mano.

  5. नमस्कार, voy a aprovechar para poner por aquí otra duda, por si tú o alguien me puede echar un cable. Tengo este script y quisiera que borrara la carpeta con la fecha una vez reiniciado, y lo que más me interesa, saber como hacer para que cuando llegue a un x tamaño la cantidad de capturas, se borren todas o se reinicie la RPi. Gracias un saludo.

    #! /bin/sh
    # /etc/init.d/motionStartup
    #

    # Some things that run always
    #touch /var/lock/motionStartup
    logger -sScript motionStartup called

    # Carry out specific functions when asked to by the system
    case “$1” in
    start)
    logger -sScript motionStartup started
    TIMESTAMP=$(date +%Y%m%d%H%M%S | sed ‘s/ //g’) # No spaces
    logger -sScript motionStartup $TIMESTAMP
    sudo mkdir /motiontmp/$TIMESTAMP || logger -sError mkdir start
    find /motiontmp/motion/. -type f -size 0 -print0 -delete
    find /motiontmp/motion/. -maxdepth 1 -type f | \
    xargs -I ‘{}’ sudo mv {} /motiontmp/$TIMESTAMP
    ;;
    stop)
    logger -sScript motionStartup stopped
    ;;
    *)
    echoUsage: /etc/init.d/motionStartup {start|stop}”
    बाहर निकलें 1
    ;;
    esac

    बाहर निकलें 0

  6. Si añades al principio de tu script esta linea, cada vez que se ejecute el script antes de hacer nada borrará todas las carpetas dentro de /motiontmp/

    sudo rm -rf /motiontmp/*

    En cuanto a lo de borrar los archivos cuando llegue a un tamaño determinado, podrías probar concatenando el comando df -h que muestra el uso en disco de un directorio, o una partición:

    df -h /motiontmp

    Con otro comando como wc o sed para que solo lea la frase referente a los MB o GB usados, finalmente con if podrías programar la parte en que si el resultado es mayor a N, ejecute el comando rm anteriormente descrito.

  7. Disculpen por tantos mensajes seguidos pero conforme voy averiguando actualizo. Algo así podría funcionar?

    #! /bin/sh
    # /etc/init.d/motionStartup
    #

    size= du -sh /motiontmp

    readsize

    अगर [ “$size” > “2048000K” ]; then

    sudo rm -rf /motiontmp/*

    else

    logger -sScript motionStartup called

    # Carry out specific functions when asked to by the system
    case “$1” in
    start)
    logger -sScript motionStartup started
    TIMESTAMP=$(date +%Y%m%d%H%M%S | sed ‘s/ //g’) # No spaces
    logger -sScript motionStartup $TIMESTAMP
    sudo mkdir /motiontmp/$TIMESTAMP || logger -sError mkdir start
    find /motiontmp/motion/. -type f -size 0 -print0 -delete
    find /motiontmp/motion/. -maxdepth 1 -type f | \
    xargs -I ‘{}’ sudo mv {} /motiontmp/$TIMESTAMP
    ;;
    stop)
    logger -sScript motionStartup stopped
    ;;
    *)
    echoUsage: /etc/init.d/motionStartup {start|stop}”
    बाहर निकलें 1
    ;;
    esac

    बाहर निकलें 0

    fi

  8. Hola otra vez a todos, otra duda más para añadir jeje.

    Antes pongo en antecedentes, resulta que para activar el sonido de un buzzer (zumbador) hay que hacer un bucle que ponga su pin a 1 और एक 0 constantemente, no como un led que mientras tenga 1 sigue luciendo.
    El problema está en como parar ese bucle al emplearlo en una web php, porque en consola añadiendo al final de la llamada del script un & se ejecuta en segundo plano y deja la consola libre para llamar al script que lo finaliza, ejemplo:

    sudo python sonar.py &

    estos son los dos scripts, el que hace que suene y el que hace que deje de sonar:

    आयात समय
    import RPi.GPIO as gpio

    gpio.setwarnings(False)
    gpi.setmode(gpio.BOARD)
    gpio.setup(7,gpio.OUT)

    gpio.output(7,1)
    time.sleep(1)(.3)
    gpio.output(7,0)
    time.sleep(1)(.3)

    y el de apagado:

    आयात समय
    import RPi.GPIO as gpio

    gpio.setwarnings(False)
    gpi.setmode(gpio.BOARD)
    gpio.setup(7,gpio.OUT)

    gpio.output(7,0)
    gpio.cleanup()

    aunque simplemente con interrumpir el primero bastaria. Gracias un saludo.

  9. नमस्कार, सुप्रभात,
    पर कुछ भी नहीं, धन्यवाद.

    Permite una pregunta, todo funciona perfectamente, अब, quisiera poder agregar una pantalla que indique cuando los leds están encendidos o apagados, encontré algunos artículos incluso con imágenes que muestran lamparas cambiando de color según si están funcionando o no, trate de entender el funcionamiento pero no logre hacerlo funcionar, llego a la web con los comandos pero nada se activa, espero no molestar con esto y otra ves, gracias por tu increíble amabilidad.

    Ignacio बेल्जियम से

    • नमस्ते Ignacio, आप अपनी टिप्पणी के लिए बहुत बहुत धन्यवाद.

      Supongo que para ello estás utilizando Javascript, integrando en él las funciones PHP que activan el script en Python para, gestionar el encendido y apagado de las luminarias.

      No domino JavaScript, ya que no soy desarrollador web pero quizás pueda orientarte un poco mejor, o algún otro lector pueda ayudarte a conseguir lo que tú quieres; pero para ello necesitaría ver el código, o los tutoriales que has seguido para intentar detectar donde está el fallo.

      जल्दी ही मिलेंगे, y ¡mucho ánimo!

  10. Hola ante todo muchas gracias, aprendo un monton.
    He seguido todos los pasos expuestos, logro encender los leds desde el terminal local, cargue el parche php como lo indicó ullu, otorgue los permisos incluso uno 775—-आदि. Carga la página con los botones despues de leds/gpio pero nada. Estoy usando Raspberry pi 2…..sera algo con esta tarjeta?. Aprecio su colaboración.

    • Hola Jameson,

      Efectivamente la IP que debes escribir en tu navegador es la de Raspberry PI puesto que esta es la que actúa como servidor web, además si tu archivo php no lo nombraste como index.php tendrás que añadir tras la ip el nombre de tu archivo separado por una “/”.

      En mi caso la IP es del rango 10.42.0.0 ya que es una IP del tipo NAT proporcionada por una interfaz virtual de red.

  11. Si no os funciona la web pero si los scripts, pronto haré un artículo para que podáis solucionarlo; gracias a los datos que he recopilado de los distintos usuarios a los que no les ha funcionado.

    Si os corre prisa solucionarlo, podéis revisar si el directorio /var/www/html existe en vuestra raspberry, y si es así debéis mover todos los archivos a esa ruta y substituir en los scripts “/var/www” द्वारा “/var/www/htmlya que ahora
    esa es la ruta por defecto del servidor web.

    También es posible que no hayáis borrado el index por defecto, “index.htmlo que os falte cambiarlo por “index.php”.

    Espero que sea de ayuda, जल्दी ही मिलेंगे.

  12. नमस्ते एंटोनियो,
    me preguntaba si se puede montar un servidor web para montar un sistema domótico y probar la api de twitter para encender luces etc… (he visto que también se puede hacer por python con algunas librerías y resulta sencillo siguiendo los tutorialespero se podría hacer como digo y con php? यानी, que la raspberry tenga el servidor web con twitter y los puertos gpio enciendan los leds
    Gracias de antemano.

    • Hola Nano,

      Desde la web en php puedes ejecutar cualquier orden en el interprete de órdenes BASH, lo que incluye scripts en Python.

      Puedes utilizar la librería o API de Twitter para que cuando envíes cierto tweet citando el nombre de usuario de la cuenta del bot, apague o encienda la luz o electrodomestico asociada a ese mensaje en concreto.

      Veo un problema, y es que cualquiera podría encenderte y apagarte las luces y los electrodomésticos de casa; a no ser que se pueda restringir dependiendo del usuario que envía el tweet.

      Sería interesante si vas comentando lo que encuentres al respecto.

      टिप्पणी के लिए धन्यवाद, जल्दी ही मिलेंगे.

  13. गुड ऑफ़्टरनून,
    He seguido el tutorial, copie el codigo de la web, lo guarde como .php, en la carpeta que me crea el servidor /var/www/html , porque si pongo el index.php fuera de la carpeta html no me encuentra el archivo, pero bueno, parece que todo esta bien. Solo estoy probando con el GPIO 17, entonces he creado dos .py, uno para encender y otro para apagar, los he ubicado en la misma carpeta del archivo index.php. Abro el navegador, entro en el index, pero no me prende el led. Si accedo por ssh al archivo enciende y lo ejecuto por consola si que funciona. no se donde puedo estar fallando. Por supuesto cambie la ruta de acceso a los scripts desde el php, ya que es diferente a tu tutoria.
    Espero puedas echarme una mano, estoy pillado.
    एक ग्रीटिंग.

    Muchas gracias.

  14. Hola peatonet, estoy intentando hacer un invento para activar un modulo de 4 relés desde la web para encender o apagar las luces de un local que tengo, el problema es que en la prueba, el led puesto con redistencia se enciende y apaga a voluntad desde la web, pero cuando conecto el pin40 (que es el que tengo configurado) quitando la resistencia y el led, se apaga la luz roja del módulo de relés y ni enciende ni apaga la bombilla que tengo para probar.

    Por favor ayudadme porque ya no se si es que esta mal el módulo de relés (maldito aliexchinapress) aunque en ninguno de los 2 módulos que tengo funciona o si es que la raspberrypi no manda bastante tensión al relé (como VCC le tengo puesto al pin3)

    Perdón por la parrafada y gracias de antemano

    Un saludo amigos

      • Hola Jesús, muchas gracias a ti por compartir la solución con nosotros.

        Disculpa si no pude contestar antes pero me pillaste con fiebre, en la última semana de clases preparando exámenes, y hasta arriba de trabajo (los Freelance no tenemos permiso para ponernos enfermos).

        Respecto al pin al que tienes conectado el VCC, en mi caso lo conecto al pin 2 o al 4 en su defecto ya que requiere 5V de alimentación.

        Si quieres puedes dar más detalles de tu prueba de concepto, estás utilizando leds en lugar de tomas de 220V AC entonces?

        अपनी टिप्पणी के लिए धन्यवाद.

  15. नमस्कार, estoy haciendo un proyecto para la facultad y quisiera saber si existe la forma que desde una aplicacion android se pueda emular este sistema, यानी, como manejar los pines de la raspberry de esta forma me parece 100 veces mas facil que en una aplicacion de android, quisiera saber si creando una aplicacion podria de alguna forma automatica direccionarme a este tipo de sistema para no tener que aprender de la nada a programar semejante cosa en android. Lamentablemente estoy obligado a entregar el proyecto como aplicacion de celular, no de forma web.
    Espero tu respuesta

  16. Hola colegas, necesito de vuestra ayuda pues estoy inmerso en un proyecto entre 3 especialidades, eléctrica, electrónica e informática, yo domino la parte de electricidad pero no soy especialista en las dos restantes. Les explico, necesito conectar un analizador de red M2DL2 a una Raspberry pi con el objetivo de registrar datos de consumo de corriente y poder trasmitirlos a la raspberry y que esta a su vez lo registre y visualice en una tabla de datos. Sé que la señal que saca el analizador es RS485 y la que debe entrar a la raspberry es RS232 por lo que necesito un convertidor de una señal a otra, lo que no sé es como hacer la interconexion entre el analizador, el convertidor y la raspberry. Sabéis algo de esto o me podéis orientar donde buscar información al respecto?
    सादर.
    Ramon.

    • Hola Juani, टिप्पणी के लिए धन्यवाद.

      El subsistema GPIO es al fin y al cabo parte del sistema de archivos /sys de GNU/Linux, y realmente se gestiona editando los valores de los archivos asignados a cada puerto GPIO.

      Puedes consultar si un GPIO está activo o inactivo leyendo el archivo que contiene su valor, un ejemplo en PHP para el GPIO 18:

      $estado_gpio18 = file_get_contents(“/sys/class/gpio/gpio18/value”);

      Si el valor es “1” el GPIO está activo, por el contrario si el valor es “0” está inactivo.

      जल्दी ही मिलेंगे.

  17. नमस्कार, lo primero agradecerte la molestia de compartir tus conocimientos con los que tenemos inquietudes similares.

    Quisiera hacerte una consulta (espero que no sea muy tonta), ya hace meses que llevo dándole vueltas al tema de la creación de interfaces web para la raspi. Tu comentas el tema de darle permisos a www-data, pero eso, estaría bien como comentas para accesos desde entornos locales o para pruebas. ¿Que soluciones aconsejarías para entornos más seguros?

    Un saludo y gracias nuevamente

    • Hola Gon, gracias a tí por tu comentario; únicamente intento documentar como voy aprendiendo día a día sobre este fascinante mundo, de forma online para que así podamos aprender todos juntos.

      Quiero recordar a todos los lectores que a pesar de ser funcional este panel no es en absoluto perfecto, es un ejemplo realmente básico de lo que puede hacerse y cuanto más aprendo más cuenta me doy de lo mucho que se podría mejorar; este año estoy tratando de mejorar mis habilidades como programador ya que siempre me dediqué más a los sistemas y a la seguridad, y no tenía apenas nociones sobre estructuras de código, metodologías de diseño ni algoritmos; espero en breves sacar tiempo para mejorar el panel web y compartir una siguiente versión de la cual ya no me averguence tanto.

      En principio desde la versión 3 de la web es suficiente con añadir el usuario www-data al grupo GPIO para gestionar el estado de los pins evitando darle permisos de sudoer; esto puede hacerse mediante la siguiente orden:

      sudo usermod -a -G gpio www-data

      De todos modos creo que tu pregunta va más enfocada a restringir el acceso a dicho panel mediante autenticación, y esto puede hacerse con el modulo mod_auth para Apache2; también es recomendable utilizar mod_ssl aunque sea con un certificado autofirmado.

      Si vas a acceder desde el exterior siempre puedes añadir una capa más de seguridad configurando una VPN, a la cual puedes proteger el acceso con certificados x509, usuario y contraseña, y sistemas de prevención como fail2ban entre otros.

      Espero haber aclarado un poco tus dudas, muchas gracias por tu interés acerca del artículo.

      • नमस्ते एंटोनियो! En primer lugar muchísimas Gracias por responder y tan rápido.

        A mi me pasa un poco al revés, soy desarrollador web intentando empaparme del mundo de los sistemas y la seguridad. Es un placer que haya personas como tu que inviertan su tiempo documentando sus proyectos para que otros podamos aprender un poquito más cada día.

        Decirte que me has ayudado mucho. Tengo un proyectito conectado a la raspi, y llevo meses dándole vueltas a lo del interfaz y sin decidirme mucho que hacer ( que si php, que si cylon.js, servicios ya creados tipo mydevice y similares…) y siempre me topé con las mismas dudas: permisos, सुरक्षा, …आदि. Tu artículo (créeme que leído muchos) es de los pocos que van un poco más allá de como pinchar cables en las GPIO, de ahí el preguntarte.

        Gracias nuevamente, has aclarado muchas dudas.

        Iré probando e implementando según tenga tiempo libre, y si te interesa te comento resultados.

        एक ग्रीटिंग

कोई जवाब दो