Cada loco con su tema ? pues yo aquí que sigo con la Raspberry Pi, como niño con juguete nuevo.. ? En un post anterior estuve escribiendo sobre el GPIO desde el punto de vista del programador PHP, y con Symfony. Sigo quitando capas, mientras que voy aprendiendo, y aquí que he llegado al sistema de ficheros..
Cité que podíamos tener acceso directo al hardware, pero realmente me equivocaba, no es acceso directo al hardware, sino a través del sistema de ficheros, ya que estaba usando PHP. Después de unas cuantas pruebas, así como haciendo Machine Learning 😀 me corrijo a mi mismo, y también me corregí los errores del post anterior.
Un poco de teoría sobre el acceso mediante sysfs al GPIO
Realmente, usando PHP y sysfs, hacemos llamadas al sistema de ficheros, al núcleo del sistema operativo GNU/Linux. Y este sistema de ficheros es el que finalmente lee o escribe en los pines GPIO. En los sistemas UNIX tenemos que los dispositivos se pueden trabajar como si de ficheros se trataran.
Es decir, Raspbian, y todos los sistemas operativos GNU/Linux compatibles con la Raspberry Pi te proporcionan la posibilidad de interactuar con el GPIO mediante el sistema de ficheros. Es el acceso más estándar, y te permite conectar desde todos los lenguajes de programación que puedan acceder a ficheros.
Configurar un pin de salida o entrada
Los pines GPIO se pueden manejar desde el sistema de ficheros. Podemos configurar un pin en modo lectura (IN) o escritura (OUT). Y podemos leer o escribir desde el mismo sistema de ficheros.
Para habilitar un pin desde el sistema de ficheros hacemos:
echo 17 > /sys/class/gpio/export
Así podemos configurar el pin para escribir, de salida:
echo out > /sys/class/gpio/gpio17/direction
Así podemos configurarlo para leer, de entrada:
echo in > /sys/class/gpio/gpio17/direction
Y lo deshabilitamos de nuevo:
echo 17 > /sys/class/gpio/unexport
Leer o escribir en un pin
Esto igualmente se puede hacer con los ficheros que lo referencian. Si usamos el mismo pin 17 anterior, para escribir un 0 podemos hacer:
echo 17 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio17/direction
echo 0 > /sys/class/gpio/gpio17/value
Si lo mantenemos ‘exportado’, podemos igualmente seguir escribiendo:
echo 1 > /sys/class/gpio/gpio17/value
echo 0 > /sys/class/gpio/gpio17/value
echo 1 > /sys/class/gpio/gpio17/value
echo 0 > /sys/class/gpio/gpio17/value
Y si le cambiamos la dirección a entrada, para leer datos así:
echo out > /sys/class/gpio/gpio17/direction
cat /sys/class/gpio/gpio17/value
Es curioso que no hace falta cambiarle el método a entrada para leer datos si lo tienes en modo salida. Lo que sí que pasa es al revés, si tienes el pin configurado para entrada, no puedes escribir, no te da permiso de escritura, sólo de lectura.
Terminando
A saber, sea el lenguaje de programación que sea, será bastante sencillo hacer un wrapper del GPIO usando el sistema de ficheros. Así se podrá manejar gran cantidad de dispositivos conectados desde muchos lenguajes. Además de que todas las distribuciones GNU/Linux serán compatibles con tu programa.
Gracias por el aporte, he intentado usar el puerto GPIO desde php7 pero el script deja de ejecutarse con la instrucción setup en python, y no logro activar un pin, probare con esto, espero me funcione
De nada, gracias por comentar. Para usar los pines GPIO también tienes un post relacionado aquí:
https://jnjsite.com/raspberry-pi-gnu-linux-montando-un-sistema-embebido-con-una-interfaz-web/
..en las últimas secciones he dejado unos scripts para el uso de GPIO sin librerías, con sysfs.
Un saludo y ánimo con ello!
DEBO DE AGRADECER LA INFORMACION, ME SENTIRIA MAL SI NO LO HAGO JAJA MUCHAS GRACIAAAS
? gracias por dejar un comentario Elionai
Muchas gracias por compartir
No hay de qué, muchas gracias por dejar un comentario.
Saludos Victor.