pierre68
Posts: 56
Joined: Wed Nov 21, 2012 9:36 pm

Controler GPIO depuis page Web

Wed Jan 16, 2013 5:48 pm

Bonjour, je vous parle en tant que NOVICE dans la matière, je connais cependant quelques languages web tel HTML,CSS et un peu le PHP, je ne connais pas le python mais si besoin je suis capable d'installer des scripts...

Voilà, j'ai déjà posté sur ce forum il y a une dizaine de jours, j'ai déjà bien avancé sur la chose mais je ne suis toujours pas arrivé à l'aboutissement de ce que j'attends alors je recommence en essayant d'expliquer au mieux mon besoin:

Voilà, j'ai un Raspberry-pi B 512 Mo avec LAMP installé dessus, je peux donc m'en servir comme d'un véritable serveur Web en mettant des pages dans le dossier var/www/ du raspberry.

C'est à partir d'une des pages présente dans ce dossier que je souhaite pouvoir commander les broches GPIO, par contre ce qui lors de mon précédent post n'a pas été compris c'est que je souhaite créer quelque chose moi même ( par exemple sur une page web quelconque qu'il puisse y avoir à un endroit un bouton qui permette de passer le GPIO 7 à 1 et un autre bouton qui pemette de le passer à 0 ) pour faire simple je ne veux pas d'interfaces toutes faites type http://www.adafruit.com/adablog/wp-cont ... chrome.jpg.


Dans mon précédent Post, on m'a dit

" Il faudra écrire un script python cote serveur qui accède aux GPIO par l'entremise du module RPi.GPIO. Le probleme avec RPi.GPIO c'est qu'il faut être root (sudo) pour démarrer ce script. On envoie des requêtes GET ou POST a ce script de notre page web pour contrôler les GPIO.

Erik Ptak (trouch sur ce forum) a écrit un serveur REST qui fait cela grosso modo:
http://code.google.com/p/webiopi/

Et donc, de ta page web, il suffit d'utiliser cette interface:
http://code.google.com/p/webiopi/wiki/RESTAPI"


Le problème c'est que ne n'ai pas du tout réussi à mettre cela en application, j'ai bien installer Webiopi sur la machine, mais ensuite pour faire simple je n'ai rien réussi à faire :? mis à part avoir accès d'une façon bizarre à cette interface déjà faite: http://www.adafruit.com/adablog/wp-cont ... chrome.jpg

Voilà j'ai essayer d'expliquer mes problèmes et mes attentes du mieux que j'ai pu, si quelque chose n'es pas trop clair demandez moi :D

Toutes vos réponses m'aidant dans ce que je cherche sont les bienvenues !! Merci d'avance ! :)

zdudz
Posts: 8
Joined: Fri Jan 11, 2013 11:24 pm

Re: Controler GPIO depuis page Web

Wed Jan 16, 2013 6:03 pm

Salut,

tout est expliquer sur ce site : http://www.instructables.com/id/Control ... r-t/#step1

pierre68
Posts: 56
Joined: Wed Nov 21, 2012 9:36 pm

Re: Controler GPIO depuis page Web

Sat Jan 19, 2013 8:58 am

Bonjour, et merci j'ai essayé de suivre la démarche de votre page qui à l'air de correspondre à ce que je cherche, voilà ce que j'ai fait:

1) j'ai créer le fichier php avec le code donné, (gpio.txt) puis je l'ai placé dans var/www
2) j'ai créer un fichier .txt avec le code donné (gpioCheck.txt) puis je l'ai placé dans un répertoire (le premier accessible venu: home )
3) je me suis connecté en root via Putty puis je me suis placé dans le répertoire home ( cd /home )
4) j'ai lancé les commandes

Code: Select all

mv gpioCheck.txt gpioCheck.sh

Code: Select all

chmod +x gpioCheck.sh

Code: Select all

./gpioCheck.sh
5) et voilà ce que j'obtient : http://hpics.li/4b247d7 :cry:

Je ne comprends plus rien ! D’où viens le problème ???

Tatayet
Posts: 6
Joined: Sat Jan 19, 2013 9:39 am

Re: Controler GPIO depuis page Web

Sat Jan 19, 2013 9:59 am

Bonjour,
La première démarche est de de créer un programme en c, bash, php-cli, python, perl, etc.... pour commander les GPIO
Mais il faut être root pour accéder aux GPIO
Donc, il faut autoriser un groupe à lancer le script
visudo et ajouter: %gpio_user ALL=(root) NOPASSWD:/opt/share/bin/gpio.sh
groupadd gpio_user
adduser www-data gpio_user
Voici le script bash dont je ne suis pas l'auteur

Code: Select all

#!/bin/sh
#source: https://www.ridgerun.com/developer/wiki/index.php/How_to_use_GPIO_signals
show_usage()
{
    printf "\ngpio.sh <gpio pin number> [in|out [<value>]]\n"
}
if [ \( $# -eq 0 \) -o \( $# -gt 3 \) ] ; then
    show_usage
    printf "\n\nERROR: incorrect number of parameters\n"
    exit 255
fi
#doesn't hurt to export a gpio more than once
echo $1 > /sys/class/gpio/export
if [  $# -eq 1 ] ; then
   cat /sys/class/gpio/gpio$1/value
   exit 0
fi
if [ \( "$2" != "in" \) -a  \( "$2" != "out" \) ] ; then
    show_usage
    printf "\n\nERROR: second parameter must be 'in' or 'out'\n"
    exit 255
fi
echo $2 > /sys/class/gpio/gpio$1/direction
if [  $# -eq 2 ] ; then
   cat /sys/class/gpio/gpio$1/value
   exit 0
fi
VAL=$3
if [ $VAL -ne 0 ] ; then
    VAL=1
fi
echo $VAL > /sys/class/gpio/gpio$1/value
Il y a aussi une bibliothèque très intéressante wiringPi qui fourni entre autre gpio un exécutable qui permet d’accéder au I/O
Ensuite, en php il suffit d'utiliser la fct exec

pierre68
Posts: 56
Joined: Wed Nov 21, 2012 9:36 pm

Re: Controler GPIO depuis page Web

Sat Jan 19, 2013 11:05 am

Vous ne répondez helas pas à ma question ci-dessus mais ce n'est pas grave. WiringPi est déjà installé sur mon Rpi donc par exemple, comment commander Wiring Pi depuis une page en PHP ????

Tatayet
Posts: 6
Joined: Sat Jan 19, 2013 9:39 am

Re: Controler GPIO depuis page Web

Sat Jan 19, 2013 11:31 am

Bonjour, la réponse était la fct exec.

J'ai quand même essayé et cela fonctionne avec la fonction system voici un exemple:

Code: Select all

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test GPIO</title>
</head>
<body>
<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
echo "état des I/O en vrac!<br>";
echo system('/usr/local/bin/gpio readall');
echo"<br> etat entrée gpio17:  ";
echo system('/usr/local/bin/gpio -g read 17');
?>
</body>
</html>

pierre68
Posts: 56
Joined: Wed Nov 21, 2012 9:36 pm

Re: Controler GPIO depuis page Web

Sat Jan 19, 2013 8:51 pm

Don si je ne me trompe pas, le code de test que vous m'avez donné :

Code: Select all

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test GPIO</title>
</head>
<body>
<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
echo "état des I/O en vrac!<br>";
echo system('/usr/local/bin/gpio readall');
echo"<br> etat entrée gpio17:  ";
echo system('/usr/local/bin/gpio -g read 17');
?>
</body>
</html>
sert à contrôler WiringPi, sans avoir à lancer de script depuis le Rpi, j'ai essayé votre script PHP, je ne comprend d'ailleurs pas très bien les valeurs renvoyées par "état des I/O en vrac!" mais je comprend par exemple, l'état de GPIO 17, par contre il s'agit la d'un script qui permet de voir l'état des entrées ce qui pourra également m'être utile par la suite mais comment créer un script qui permet de mettre un pin en sortie et de changer son état ??

Merci d'avance :)

Tatayet
Posts: 6
Joined: Sat Jan 19, 2013 9:39 am

Re: Controler GPIO depuis page Web

Sun Jan 20, 2013 10:06 am

Bonjour,
Dans une console, tapez gpio vous donne une aide sommaire ou man gpio une aide détaillée. Dans cette dernière vous trouverez la commande mode qui permet de déterminer le type in, out, pwm, up, down. write, permet de positionner l'état de la sortie. Il est même possible via up et down de définir la position de la résistance de pull up
Donc pour commander une sortie gpio -g write 17 1 positionne la sortie GPIO17 à 1.
Pour commander des relais je vous recommande la carte 4 relais pour Arduino que l'on trouve sur Ebay pour 19€

PS:
On ne le dis pas assez sur les forum, des I/O sont extrêmement fragiles électriquement parlant. Toutes entrées et sorties devraient être opto couplée ou relayée. D'une part vu la mauvaise qualité des alimentations des courants peuvent circuler d'un périphérique vers l'autre et entraîner leur destruction. D'autre part en domotique on est amené à commuter des charges en 220V il est donc impératif pour des raison de sécurité de tout relayer.

pierre68
Posts: 56
Joined: Wed Nov 21, 2012 9:36 pm

Re: Controler GPIO depuis page Web

Sun Jan 20, 2013 10:35 am

D'accord, mais une question me vient à l'esprit, je pense qu'il faut mettre le numéro correspondant à la librairie wiringPi puisque c'est au travers de celle la que l'on travaille ?? en revanche j'ai donc modifié le code :

Code: Select all

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test GPIO</title>
</head>
<body>


<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);

echo"<br> etat entrée gpio17:  ";
echo system('/usr/local/bin/gpio -g write 7 1');
echo"<br> etat entrée gpio 4:  ";
echo system('/usr/local/bin/gpio -g write 0 1');
?>

</body>
</html>
J'ai mis le fichier php dans var/www mais quand j'ouvre la page depuis un pc local, rien ne se passe, j'ai pourtant branché deux led avec resistances sur les gpios 7 et 11 ce qui correspond en WiringPi à 7 et 0.

Qu'est-ce qui ne va pas ? faut il appeler "echo" depuis un bouton html ?? ou bien ?? désolé si mes questions vous paraissent bêtes mais je ne suis pas un pro du php :?

pierre68
Posts: 56
Joined: Wed Nov 21, 2012 9:36 pm

Re: Controler GPIO depuis page Web

Sun Jan 20, 2013 10:47 am

Rectification, j'ai réussi en faisant:

Code: Select all

echo"<br> etat entrée gpio7:  ";
echo system('/usr/local/bin/gpio write 7 1');
je ne sais pas à quoi correspondait ton "-g" ??

En tout cas MERCI, c'est ta méthode la plus simple et celle que je comprend le mieux !! :D

Tatayet
Posts: 6
Joined: Sat Jan 19, 2013 9:39 am

Re: Controler GPIO depuis page Web

Sun Jan 20, 2013 10:49 am

Bonjour,
avant de chercher à le faire en php, commencez en ligne de commande, cela permettra de savoir d’où viens le problème.
J’insiste, lisez la man page
Votre exemple ne peux pas fonctionner, vous n'avez pas défini le type du gpio par un: gpio mode 17 out
Dans le man page:
-g Use the BCM_GPIO pins numbers rather than wiringPi pin numbers.
-p Use the PiFace interface board and its corresponding pin numbers.

Code: Select all

root@raspberrypi:~# gpio -g mode 17 out
root@raspberrypi:~# gpio -g write 17 1
root@raspberrypi:~# gpio -g read 17
1
root@raspberrypi:~# gpio -g write 17 0
root@raspberrypi:~# gpio -g read 17
0
root@raspberrypi:~# 

pierre68
Posts: 56
Joined: Wed Nov 21, 2012 9:36 pm

Re: Controler GPIO depuis page Web

Sun Jan 20, 2013 12:59 pm

Ne vous inquiétez pas WiringPi avec la ligne de commande dans la console a été mon premier contact avec les GPIO sur raspberry, Merci encore pour tout :)

Return to “Français”