Vigingi Raspberry PI na GPIO: Kudhibiti LED kutoka kiolesura cha wavuti

Katika posts ya hivi karibuni ya mfululizo huu, Tuliona wao ni vigingi GPIO na kuhudumu, na Jinsi ya kudhibiti nguvu ya leds kutoka kwa Temino; kabla ya kuanza Kuwa imewekwa maktaba ya GPIO kwa Chatu, na wamekusanyika mzunguko wa kielektroniki na kazi.
Programu tumizi ya wavuti katika HTML + PHP + Chatu kushughulikia Leds chache kupitia GPIO ya.

Katika tukio hili sisi kufunga na seva ya wavuti ya Apache, na kujifunza kuandika na Msimbo HTML na PHP kudhibiti LED sawa, au kadhaa, kutoka kiolesura cha wavuti.

gpioprogramar0pngKitu cha kwanza lazima kufanya ni Sanidi seva ya wavuti ya taa, hivyo Chapa amri ifuatayo kwa Temino:

#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

Sasa tutaweza kuongeza kama sudoer kwa mtumiaji data ya www, Hii si chaguo zaidi salama lakini Kumbuka kwamba tunafanya mtihani katika mazingira ya kudhibitiwa; kwa mazingira katika uzalishaji tunafaa kutafuta njia nyingine ya kuendesha hati katika Chatu kama sudoer.

Kwa Hariri vibali hivi, aliandika sudo visudo katika njia za kuondokea na katika mwisho wa faili Ongeza kwenye www-data kama sudoer, Ni lazima hivyo.

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

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

Kwa siri kila GPIO Tunahitaji kujenga jalidi ndogo na hati tatu katika Chatu; moja kurejea kwenye, mwingine kuzima, na hati ya mwisho kwa ajili ya kufanya LED yetu flashing, Hapa ni mfano na ya BANA 4.

#!usr/bin/env/ python
## enciende.py
#Importamos la libreria y le cambiamos el nombre a GPIO
Leta RPi.GPIO kama GPIO
#Sisi kuanzisha mfumo wa namba kwamba tunataka, 
#katika kesi hii mfumo BCM
GPIO.setmode(GPIO. BCM)
#Sanidi GPIO pin 4 kama matokeo ya
GPIO.setup(4, GPIO. NJE)
#Sisi Washa ya imesababisha
GPIO.output(4, GPIO. JUU)
#!usr/bin/env/ python
## apaga.py
#Leta maktaba na kubadilisha jina lake ili GPIO
Leta RPi.GPIO kama GPIO
#Sisi kuanzisha mfumo wa namba kwamba tunataka, 
#katika kesi hii mfumo BCM
GPIO.setmode(GPIO. BCM)
#Sanidi GPIO pin 4 kama matokeo ya
GPIO.setup(4, GPIO. NJE)
#Zima imesababisha
GPIO.output(4, GPIO. CHINI)
#Na sisi kuikomboa GPIO ya
GPIO.cleanup()
#!usr/bin/env/ python
## parpadea.py
#Leta maktaba na kubadilisha jina lake ili GPIO
Leta RPi.GPIO kama GPIO

#Muhimu kwa ajili ya ucheleweshaji
Leta wakati

#Sisi kuanzisha mfumo wa namba kwamba tunataka, 
#katika kesi hii mfumo BCM
GPIO.setmode(GPIO. BCM)

#Sanidi GPIO pin 4 kama matokeo ya
GPIO.setup(4, GPIO. NJE)

#Washa na zima ya imesababisha 5 mara
kwa mimi katika masafa(0,5):

        GPIO.output(4, GPIO. JUU)
        Time.sleep(1)(1)
        GPIO.output(4, GPIO. CHINI)
        Time.sleep(1)(1)

#Na sisi kuikomboa GPIO ya
GPIO.cleanup()

Sasa ni wakati wa kujenga ukurasa wetu wa nyumbani katika HTML na PHP, kina vitufe kwamba sisi bonyeza kuendesha hati ya Chatu kutoka kiolesura cha wavuti, baadaye tutaona jinsi uongozi wa mwisho.

<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

?>

Kuwa na makundi ni yote katika ukurasa huo kama kuunda ukurasa katika PHP kwa kila chaguo, kuendesha ni, mimi ulitumwa kwenye ukurasa wa hati (ukurasa tupu); Endesha Kanuni sasa na anakaa katika ukurasa huo.

Hatimaye Lazima kufikia uongozi yafuatayo ndani ya jalidi ndogo ya seva ya wavuti /Var/www.

Screenshot ya 2014-10-05 00:06:52Kama wewe kama wewe Nifuate Mtandao wa Twitter, Facebook, Google +, LinkedIn, au kushiriki na vitufe chini ya chapisho hili, Kama una maswali yoyote au maoni Tafadhali usisite kutoa maoni.

75 mawazo juu ya"Vigingi Raspberry PI na GPIO: Kudhibiti LED kutoka kiolesura cha wavuti

  1. Nzuri, Baada ya kuangalia tovuti ufumbuzi home automatisering, Niliamua kwa mfumo wako, inaonekana wazi vizuri.
    Hata hivyo na kwa sababu ya uzoefu wangu sifuri katika laini. ana shaka mimi, Napenda anaweza kuyatatua, Nimekuwa kufanya majaribio mengi na hakuna, Siielewi….:)
    kutekeleza hatua zote kueleza na mimi kusimamia gpio ya kutoka Temino na putty, Lakini tangu wavuti unaweza kuamilisha hati ya Chatu.
    Nahitaji kufanya ukurasa kwenye /val/www na html (index.html) hivyo kumtumikia ni mimi apache. Kwa kuweka tovuti yako hapa kama vitufe kuondoka kwangu, lakini kutekeleza php script. Katika ukurasa index.php, si kuwekwa ndani.
    Samahani kwa usumbufu na Asante.

      • Asante kwa kujibu haraka, Ndio alifanya hatua ili kupeana vibali vya katika faili ambayo unaweza kuweka, Nimechanganyikiwa na ukurasa index.php, Unaweza hutegemea mpangilio orodha GPiO, tu kuona vitufe kwenye wavuti kama mimi kuweka katika /val/www….katika html!…index.html, lakini kutekeleza PHP script. Watiao index.php ambayo hutegemea mpangilio orodha GPIO?

        • Kama ukiangalia kwa karibu, index.php /var/www/leds 🙂 hangs kama bado haifanyi kazi, maoni makala hii na kuangalia ni.

          Kama /var/ www/index.php cuelgas wataiona katika mwelekeo huu lakini ni si kazi kitu chochote:

          http://ipdelapi

          Kama hutegemea /var/www/leds/will kazi vizuri lakini tangu njia hii:

          http://ipdelapi/leds

          Natumaini hii unasuluhisha mashaka yako na kwamba unaweza kuhamisha katika ulimwengu huu wa kusisimua.

          • Nina furaha kwamba nimefanya kazi, mwisho ilikuwa njia ya hati ya?

            Shukrani kwa ajili ya 🙂 yako ya maoni

          • Nzuri, Nina tatizo moja kama wenzetu hapo juu.

            Index.php yangu hangs kutoka /var/www/html/index.html
            , Kama nitapata html yangu kielezo kutoka huko si umeonyesha, lakini hakuna tatizo kwa kuwa kuna, Shida yangu inakuja wakati mdundo kitufe na si kuendesha mimi Mkoba wa.

            PD: Nilimpa kila kitu na vibali vya

            Asante kwa jibu lako.
            Salamu

            J.G.

  2. Nzuri, kazi yako ni kumtumikia mimi mengi, wewe ni mashine ya!
    Mimi kujaribu kufanya mfumo automatisering kudhibiti leds anuwai kutoka wavuti lakini nina tatizo unaweza kupunguza.
    Mandhari ni kwamba kuwa ulioamilishwa GPIO nahitaji, Kuamilisha yao na kulemaza kutoka Temino, Kuunganisha PC nyingine imeunganishwa kwenye mtandao huo kwa 192.168.X.X/leds/ na tovuti inaonekana vizuri, Menyu kwa ajili ya udhibiti wa nyumbani inaonekana kamili, lakini leds ya kujibu, Nimekuwa walijaribu amilifu na passiv, kitu mimi nina kufanya makosa…
    Jambo pekee unaweza kusema ni kwamba unaweza kuonyesha Msimbo chanzo ya ukurasa na tu inaonyesha msimbo wa html, php haionekani, kuwa kama ni lazima au si.
    Nadhani inaweza kuwa kitu PHP lakini sina hakika sana kwa sababu Nilijaribu mtihani PHP na inafanya vizuri, Mimi lol kukata tamaa

    • Jambo Yohana,

      Mimi alegro kiasi kwamba inaweza kuwa na manufaa 🙂 yangu makala daima ni karibu maoni chanya.

      Wote PHP code kwa kivinjari ni kuonyeshwa kama HTML, Tangu kazi PHP ni wakati na pakubwa kuunda kurasa za wavuti ni waliohudumu katika kivinjari.

      Kuendesha hati ya Chatu moja kwa moja kama ya leds iliwashwa? jambo sahihi kuwa kuanza kupima kutoka hapa na kwenda mbele.

  3. Asante kwa kujibu haraka!
    Hatimaye umbizo rasiberi tena, Kufuata hatua zote tena na kila kitu kazi nzuri, kuwa kwamba kushindwa.
    Hata hivyo shukrani kwa ajili ya tahadhari.
    Salamu

    • Asante kwa kushiriki mashaka yako, Nina furaha kwamba hatimaye amepangilia m.

      Umebadilisha kitu katika yako rasiberi kama vile umbizo, kama kwa mfano transfoma microUSB?

      • Ndio, Wakati mimi kununuliwa ni mimi kuweka karo kwa midogo kwa kasi yake juu na hivyo itakuwa kazi haraka, lakini wala ni mabadiliko liko sana.
        Hiyo ilikuwa ni kitu tu kwamba kubadilisha kwa rasp ya.

        • Jambo Yohana, Nafurahi kusoma wewe tena hapa.

          Katika kanuni na kushawishi Overclock katika suala hili, Lakini hiyo inaweza kuwa configuration yoyote; sasa kwa kuwa unafanya kazi na Raspbian kusafisha anarudi kutoa matatizo baada ya kuwa katika uzalishaji, Sasa kama kwamba ningependa kupendekeza wewe Tafuta mzizi wa tatizo.

          Kubadilisha katika Overclock utakuwa taarifa nayo kwa mujibu wa kazi maalum ambayo haja uwezo mwingi ikihesabu, Lakini baadhi ya mambo kama vile bandari ya Ethernet itaendelea kwa mujibu wa chupa-shingo ambayo inatumia.

          Unaweza kuona mapitio nilifanya ya mifano ya rasiberi PI B, B + na B2 katika kiungo kifuatacho, na kupima utendaji kamili:

          http://www.peatonet.com/raspberry-pi-y-los-pines-gpio-controlando-el-led-desde-una-interfaz-web/

          Natumaini utakuwa muhimu, Angalia hivi karibuni 🙂

  4. Hello, Nina swali/tatizo kidogo. Nataka kuunganisha buzzer badala ya imesababisha, Lakini mimi nataka kujaribu kwanza na imesababisha kujifunza. Ni muhimu kufanya index.html na na php nyingine?
    Nina ya imesababisha kushikamana na gpio4 ya, na nina hati ya on.py na wengine off.py ndani ya kabrasha 4. Kazi ya Kiweko kikamilifu.
    na unaweza si kuweka index.html na kwa sababu hiyo si basi mimi, lakini tu kwa kuongozwa utendaji 4.

    Natumaini unaweza kunisaidia, Alitembelea profile yako facebook na natumaini siku moja wote ya rasiberi Pi kama unajua. Salamu na shukrani.

  5. Wavuti katika PHP kunauwezekano wa HTML na ambayo tu haja ya index.php

    Kama kuweka amri ya PHP kuendesha hati yako katika Chatu katika faili ya HTML, si kukimbia.

    Sasa kwamba kituo kazi, inaweza tu Nakili index.php ya mafunzo haya, kuondoa GPIO nyingine na kuacha tu ya 4 ndiyo unaweza kutumia; na ni lazima kazi.

    Kama wewe unaweza kuhariri faili katika/var/www hakika itakuwa kwa ruhusa, katika mafunzo haya ni ufumbuzi na ni lazima kazi, Kama haina maoni na nitajaribu kukupa mkono.

  6. Hello, Mimi naenda kuchukua kuweka swali lingine hapa, 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
    ;;
    *)
    mwangwi “Usage: /etc/init.d/motionStartup {start|stop}”
    toka 1
    ;;
    esac

    toka 0

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

    • Hasta lo de borrar las carpetas perfecto, pero luego
      Disculpa pero es que soy un poco nuevo y me he perdido, kama ingekuwa kwa mfano kwa wakati kufikia mpangilio orodha/motiontmp/hoja / 5 Gigas? Asante salamu.

  8. Samahani kwa hivyo nafasi nyingi ikifuatiwa lakini kama ni kutafuta nje sasishi. Kitu kama hiki huenda kazi?

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

    Ukubwa = du - sh /motiontmp

    Soma “Ukubwa”

    Kama [ “$Ukubwa” > “2048000K” ]; Kisha

    sudo rm -rf /motiontmp/*

    mwingine

    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
    ;;
    *)
    mwangwi “Usage: /etc/init.d/motionStartup {start|stop}”
    toka 1
    ;;
    esac

    toka 0

    Fi

  9. Hello kwamba rafiki kama, Samahani kufuata mfano wako na ya imesababisha ni lit, hakuna tatizo, Lakini wakati unapo bofya kwenye kitufe cha zima, mmuliko imesababisha, tayari kuangalia misimbo na kila kitu ni sahihi :/ una wazo lolote kwamba unaweza kufanya makosa?

    • Hello Fco, Asante kwa maoni yako.

      Kwenye wavuti, Kuna vitufe vitatu:

      Washa, Zima, na upeo.

      Kama unaweza, Bandika hapa msimbo ambao nimekuwa imepangiwa kwenye kitufe cha zima, ya que por lo que comentas es posible que el botón apagar esté ejecutando el script que debería ir asociado al botón de parpadeo.

      Tuonane hivi karibuni.

  10. 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 na 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:

    Leta wakati
    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:

    Leta wakati
    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.

  11. Puedes concatenar distintos comandos, para que basándose en el nombre de tu script, la terminal busque su PID y mate posteriormente su ejecución con Kill.

    Una vez hallado el comando, cambia la función pensada para cerrar con Ctrl + C, por una que en lugar de ello, al zumbar N veces lo mate automáticamente con dicho comando.

  12. Si con Ctrl + C se cierra en consola, pero yo trato de implementarlo a través de PHP como los leds de tu post, entonces tendrá que ser de otra manera digo yo.

    • Arriba tienes la solución para matar tu proceso con BASH, hallando su PID a partir del nombre de archivo; solo tienes que integrarlo en tu web PHP con “Exec”.

  13. Hello.
    Shukrani kwa ajili ya mafunzo ya.

    Nina tatizo, kutekeleza hati, Kama unaweza kukimbia kwao kutoka Kiweko, Lakini tangu ukurasa si, Sijui kwamba inaweza. Tumefanya nini maoni ya
    “Tunaandika sudo visudo katika njia za kuondokea na katika mwisho wa faili Ongeza kwenye www-data kama sudoer, Lazima iwe hivyo.”

    Lakini hakuna lolote. Nionyeshe ni kitu gani kingine?

    Kila la heri.

  14. Hello, Asubuhi njema,
    Ante nada, Asante.

    Permite una pregunta, todo funciona perfectamente, sasa, 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 kutoka Ubelgiji

    • Hello Ignacio, Asante sana kwa maoni yako.

      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.

      Tuonane hivi karibuni, y ¡mucho ánimo!

  15. 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—-nk. 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 Rafael, gracias a ti por comentar.

      Es posible que la solución se halle en los comentarios de los tutoriales anteriores de esta serie dedicada a la domotica asequible basada en Raspberry PI.

      Los pasos a seguir son compatibles con cualquiera de las versiones de la PI, se me ocurre que podrías cambiar en la página web la ejecución del script en python por la siguiente orden que creará un archivo en el directorio home de tu Raspberry:

      sudo touch /home/pi/funciona

      Si todo está funcionando bien, debería crearse dicho archivo.

      • Gracias por su rápida respuesta. Hice los cambios, conforme me lo indicó, en index.html retirando la parte de python y colocando a cambio: sudo touch /home/pi/funciona , pero infortunadamente no se crea el archivo en mi raspberry. Me parece una excelente prueba y por el resultado creo que concentra el problema en la zona web. Buscare mas información en otros tutoriales. Gracias por su ayuda. Estamos en contacto.

        • Hola Rafael, a continuación podrías hacer la misma prueba cambiando ligeramente la ruta del archivo para comprobar si el problema recae en los permisos del directorio /var/www.

          sudo touch /var/www/funciona

  16. Hello, me podrias decir alguna manera de poner una etiqueta con el estatus de el LED desde la interfaz web PHP
    que cambie automaticamente al darle Clic a dicho boton ya sea encender, Zima, parpadeartener una etiqueta que te diga el estatus. Gracias por tu aporte espero me puedas ayudar..

    • Hola Chaka, Asante sana kwa maoni yako.

      Creo que podrías hacerlo con PHP y JavaScript si quieres darle algún efecto más visual, o realizar cambios en el botón.

      Si solo quieres añadir una etiqueta de texto según que botón presiones, únicamente tendrías que ampliar las funciones asociadas a cada input; te adjunto una lista de las funciones disponibles en PHP:

      http://php.net/manual/es/indexes.functions.php

    • Hola Jameson,

      No entiendo bien la pregunta, pero para encontrar la IP de algún dispositivo puedes utilizar NMAP.

      También dispones de herramientas con interfaz gráfica como ZenMap basada en NMAP y Fing para dispositivos Android.

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

  17. Por favor necesito ayuda. La cuestión es que tengo todo según tal cual lo explicas, pero no funcionan los scripts en PHP.

    Shukrani nyingi

    • Hola Sergio,

      Supongo que te refieres a los scripts en Python, otros usuarios tuvieron el mismo problema y hay varias soluciones en los comentarios anteriores; si tras probarlas persiste el fallo si aportas más datos quizás otros lectores o yo podríamos ayudarte.

      Tuonane hivi karibuni.

  18. ¿por qué “kwa- Exec…” Badala ya “a= exec…” ?

    no entiendo y no he encontrado esta formula en google.

    • Hola Roberto, bienvenido.

      No soy experto en php, y en esos momentos busqué un tutorial para ejecutar ordenes en el interprete bash desde php y así lo encontré.

      ¿Sería mas apropiado utilizar a= exec en lugar de a- Exec?

      Muchas gracias por tu comentario, Tuonane hivi karibuni.

  19. 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” na “/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.html” o que os falte cambiarlo por “index.php”.

    Espero que sea de ayuda, Tuonane hivi karibuni.

  20. Hello Antonio,
    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? yaani, 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.

      Asante kwa maoni, Tuonane hivi karibuni.

  21. Mchana mwema,
    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.
    Salamu.

    Shukrani nyingi.

    • Hola Charlie,

      Desde hace un par de versiones, Raspbian ha actualizado Apache y las páginas web se sirven desde /var/www/html en lugar de /var/www

      Hay una nueva versión de la web en la que puedes prescindir de utilizar archivos adicionales, también puedes colaborar en su desarrollo mediante github si lo deseas:

      http://www.peatonet.com/raspberry-pi-implementando-un-sistema-domotico-asequible-parte-iii/

      De todos modos si quieres utilizar esta versión del panel de control puedes probar añadiendo al usuario www-data en el grupo gpio, parece que ese es el problema puesto que te funciona mediante ssh.

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

    • Hello, me autorespondo yo amigos, el problema lo tenía en que en el pin20 (katika kesi yangu) le tenía que poner una resistencia, yo la he puesto de 330 unida a tierra.
      Supongo que será porque cuando pase de led a relé elimine la resistencia

      Gracias por todo ?

      • 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?

        Gracias por tu comentario.

  23. Hello, estoy haciendo un proyecto para la facultad y quisiera saber si existe la forma que desde una aplicacion android se pueda emular este sistema, yaani, 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

  24. Hola amigo muchas gracias!! excelente explicación!! que viva el OpenSource. gracias por tu aporte.

  25. amigo disculpa mi ignorancia es posible realizar el mismo proyecto pero sin utilizar python solamente con php?????

  26. Hola y gracias por todo, repito mi pregunta, cual es la diferencia para que esto funcione en la raspberry pi 3, mapema,

    Asante

    • Hello Ignacio, Asante kwa maoni.

      Este tutorial está desarrollado sobre una Raspberry PI 3 por lo que debería funcionar sin complicaciones.

      Si aún así no logras hacerlo funcionar, puedes compartir los errores o problemas que has encontrado.

  27. 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?
    Kila la heri.
    Ramon.

  28. Hola como andas?
    Si quisiera consultar el estado de un gpio, a traves de php, para que me diga si esta ON / OFF ya que me encuentro remoto. Como deberia hacer?

    Quizá existe alguna manera de que la rasp devuelva el valor que esta el gpio.

    Sino lo hare en una db ingresando 1 Ee 0 al presionar los botones, pero eso lo veo medio rustico

    • Hola Juani, Asante kwa maoni.

      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.

      Tuonane hivi karibuni.

  29. Hello, 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.

      • Hello Antonio! 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, Usalama, …nk. 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.

        Salamu

  30. Hola Que aplicaciones se pueden utilizar en los automóviles
    Se podría que funcionara milrrolling
    Alguien a echó algún proyecto sobre este tema
    Saudos

  31. estimado y si deseo hacerlo con input type radio y sin el boton submit, este podria ser llamado desde un js ? ajax? me gustaria puedas asesorarme gracias

  32. Nzuri,
    He estado intentando realizar lo que propones y no lo he conseguido. He seguido todos los pasos y nada. El problema es el archivo php. He creado un archivo de texto en el que he copiado todo lo que has puesto arriba, sin modificar nada, tal cuál, y lo he guardado como php. Lo he ubicado dentro de la carpeta leds y no hay manera de que se ejecute. No sé cuál es el problema.
    Gracias y un saludo

  33. Hola Amigo, para mi proyecto me pidieron madar al prender el led de la misma forma pero publicnado desde tweter,tendras algun tuto para eso?? yo tenfo un codigo pero no lo puedo hacer jalar te lo podria compartir para que lo cheques??

Jibu