Raspberry Pi: el manejo básico del GPIO con sysfs

Raspberry Pi

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.

Compartir..

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *