Clase en PHP para encender/apagar LED en Raspberry pi

 

Clase en PHP para encender/apagar LED en Raspberry pi

Clase en puro PHP para encender/apagar led en Raspberry pi. Acceso directo a los puertos GPIO.

He preparado una clase sencilla en PHP puro para poder, como os explicaba en el artículo anterior, acceder directamente a los puertos GPIO desde PHP. Este acceso a los puertos GPIO se realiza directamente y de forma nativa contra el sistema, sin necesidad de usar exec(), shell_exec() o cualquier funcion de ejecución externa al lenguaje de programación PHP.

El repositorio de la clase en PHP lo podéis descargar tanto en github.com como en phpclasses.org.

Para utilizar la clase solo tenéis que realizar el include

require_once( 'led.class.php' );

Debemos realizar el export antes de poder utilizar el puerto GPIO. La clase ya está preparada para realizar el export automáticamente con un LED individualmente o con varios. Si se utilizan varios LEDS, se pude aprovechar el sistema para que abra un solo fichero de export y un fichero unexport, común para todos los LEDS, lo que hará que solo tengamos que abrirlo una vez para todos los LEDS a la vez en lugar de abrir y cerrar individualmente para cada LED.

En todos los casos, cuando se crea la clase LED, ésta informará al puerto GPIO correspondiente, después de realizar el export, que ese número de puerto será de SALIDA, automáticamente sin tenernos que preocupar de este paso para nada.

En caso de utilizar un solo LED (o bien que no os importe abrir y cerrar cada vez que creamos una clase led nueva), solo hay que pasar el número de puerto GPIO, ya que al crear la clase se realizar internamente el Export. En este ejemplo utilizaremos un LED enlazado al puerto GPIO 17:

$Led17 = new Led( '17' );

// Utilizar el led según necesitemos, como por ejemplo:
// Encender led del puerto GPIO 17, esperar un segundo, apagarlo
$Led17->On();
sleep(1);
$Led17->Off();


// Recordar que hay que realizar el Unexport después del uso del led. En este caso la clase abrirá el fichero unexport, realizará el unexport y luego cerrará el fichero automáticamente:

$Led17->unexport();


También lo podemos utilizar individualmente para varios LEDS. Se realizará el export y unexport individualmente para cada uno de ellos. Como por ejemplo:

// Creamos la clase Led y la asignamos a las variables que utilicemos, pasándo como parámetro el número de puerto GPIO:

$Led17      = new Led( '17' );
$Led18      = new Led( '18' );
     

// Utilizar los leds según necesitemos, como por ejemplo:
// Encender led del puerto GPIO 17, esperar un segundo, apagarlo, encender led del puerto GPIO 18, esperar un segundo, apagarlo 
$Led17->On();
sleep(1);
$Led17->Off();
sleep(1); 
$Led18->On();
sleep(1);
$Led18->Off();


// Recordar al final de nuestro código de realizar el Unexport. En este caso la clase abrirá el fichero unexport, realizará el unexport y luego cerrará el fichero automáticamente para cada uno de los LEDS.

$Led17->unexport();
$Led18->unexport();



En caso de querer aprovechar la optimización del uso de recursos para varios LEDS, utilizando un 'file handle' export & unexport común para todos los LEDS, hay que utilizar el método de la siguiente forma:

// Abrimos los ficheros de export y unexport y los asignamos a las variables $fpUnexport y $fpExport respectivamente
$fpUnexport = fopen( '/sys/class/gpio/unexport', 'w' );
$fpExport   = fopen( '/sys/class/gpio/export', 'w' );
     
// Creamos la clase Led y la asignamos a las variables que utilicemos, pasando como parámetros el número de puerto GPIO y las variables anteriores $fpExport y $fpUnexport

$Led17      = new Led( '17', $fpUnexport, $fpExport);
$Led18      = new Led( '18', $fpUnexport, $fpExport);


// Después de crear las variables de la clase LED, ya no necesitamos el puntero al fichero $fpExport. Lo cerramos y liberamos memoria
fclose( $fpExport ); 
unset( $fpExport );
     

// Utilizar los leds según necesitemos, como por ejemplo:
// Encender led del puerto GPIO 17, esperar un segundo, apagarlo, encender led del puerto GPIO 18, esperar un segundo, apagarlo 
$Led17->On();
sleep(1);
$Led17->Off();
sleep(1); 
$Led18->On();
sleep(1);
$Led18->Off();


// Recordar al final de nuestro código realizar el Unexport y cerrar los ficheros $fpExport y $fpUnexport. Al utilizar el puntero a fichero de $fpUnexport y $fpExport, cuando se realiza un unexport, la clase NO cerrará el fichero porque afecta a las demás variables LED, por lo que lo debemos cerrar nosotros en el momento de finalizar el programa.


$Led17->unexport();
$Led18->unexport();

fclose( $fpUnexport );


Pues nada. ya tenéis una clase de acceso rápido en PHP para encender y apagar LEDS. Es muy sencilla, optimizada y efectiva a la vez.





Comentarios

Artículos más populares

Ingeniería de datos. Como saber qué características o features dar como Inputs a nuestras redes neuronales

¿Se puede utilizar Machine Learning en PHP?