Utiliser sysfs en PHP sur la FoxBoard G20

11 nov Utiliser sysfs en PHP sur la FoxBoard G20

Suite à l’article de Yoann « Utiliser GPIO en C sur la foxboard G20« , voici une version en PHP.
Ce bout de code permet d’allumer et éteindre la led rouge de la FoxBoard G20.
On aura donc ainsi un voyant pour visualiser l’activité du port RS232 vers le bus CAN ou vers le X10.


Les broches GPIO sur la Fox Board G20 sont gérées en utilisant les interfaces Sysfs.

Sysfs est un système de fichiers virtuel fourni par Linux 2.6 qui exporte des informations sur les périphériques et les pilotes à partir du modèle du dispositif du noyau vers l’espace utilisateur, et est également utilisé pour la configuration.

Et comme l’explique Yoann, grâce à sysfs, la gestion des I/O s’effectue par de simples fichiers…
La principale fonction utilisée sera donc une fois de plus fopen

Les I/O de la Fox Board G20

La Fox Board a 3 groupes de 32 lignes I/O appelée Port A, PORT B et PORT C.

Chaque ligne est identifiée par un indice entre 0 et 31. La numérotation commence comme indiqué ci-dessous:

Numérotation des I/O de la Fox Board G20
Groupe 0 1 2 3 4 etc…
PORT A 32 33 34 35 36
PORT B 64 65 66 67 68
PORT C 96 97 98 99 100

Les I/O de la Fox Board G20

La led rouge montée sur la FoxBoard G20 est branchée sur la ligne I/O PC7 (PORT C I/O ligne 7).
Le numéro d’identification I/O pour gérer cette led est de 96 + 7 = 103.

Pour utiliser une I/O il faut l’exporter en inscrivant son numéro d’identification dans /sys/class/GPIO/export

$fp = fopen("/sys/class/gpio/export","ab");
fwrite($fp,"103");

Un nouveau répertoire appelé /sys/class/gpio/gpio103 sera créé avec deux nouveaux fichiers à l’intérieur: valeur et direction.

La direction sera tout logiquement inscrit dans /sys/class/gpio/gpio103/direction
Et la valeur de sortie dans /sys/class/gpio/gpio103/value

Ce qui nous donne ce bout de code :

< ?php
$erreur=0;

$fp = fopen("/sys/class/gpio/export","ab");
if (!$fp)
{
echo "\nErreur ouverture export";
$erreur=1;
}
else
{
echo "\nouverture export : ok";
fwrite($fp,"103");
fclose($fp);
}

$fp = fopen("/sys/class/gpio/gpio103/direction","r+b");
if (!$fp)
{
echo "\nErreur ouverture direction";
$erreur=1;
}
else
{
echo "\nouverture direction : ok";
fwrite($fp,"out");
fclose($fp);
}

if ($erreur==0)
{
for($nbr=1; $nbr < 100; $nbr++)
{
$fp = fopen("/sys/class/gpio/gpio103/value","ab");
if ($fp)
{
fwrite($fp,"1");
fclose($fp);
}
WaitMilliSec(100);
$fp = fopen("/sys/class/gpio/gpio103/value","ab");
if ($fp)
{
fwrite($fp,"0");
fclose($fp);
}
WaitMilliSec(100);
}
}
echo "\n";

function WaitMilliSec($DelaiMilliSeconde){
usleep($DelaiMilliSeconde*1000);
}
?>

Be Sociable, Share!
No Comments

Post A Comment