Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

piloter un mpc23017 en PHP
#1

Bonjour,
Sur le port i2c du gpio d'un raspberry 2, j'ai connecter un mcp23017 qui étend le nombre d'entrée sortie.
Grâce à la console, je configure et commande les ports du mpc23017.

exemple de commande :
i2cset -y 1 0x20 0x01 0x00 // configuration de port B en sortie
i2cset -y 1 0x20 0x15 0x01 // mise à l'état de la broche 0 du port B

Ces deux commandes fonctionnent en mode console mais en PHP :
shell_exec(' /usr/sbin sudo i2cset -y 1 0x20 0x01 0x00');
shell_exec(' /usr/sbin sudo i2cset -y 1 0x20 0x15 0x01');
aucune réaction du mpc23017.

le fichier index.php (où se trouve les commandes en question) est lancé par le rasberry (configuré en serveur) lors d'une requête http.
En fouillant sur le net, je trouve des info sur les droits de l'utilisateur "www-data" mais ça reste très confus (du moins dans mon esprit ....)
je me suis inspiré de ça : http://domoraspi.leotic.fr/2014_05_01_archive.html
Je recherche donc de l'aide ....
Merci à tous
Répondre
#2

www-data est l'utilisateur du serveur apache. Comme tout utilisateur unix, il ne peut exécuter les commandes pour lesquelles il n'a pas les droits...d’exécution.
Dans ton cas, seul root et les membres du groupe sudo peuvent exécuter les trois commandes i2c.
www-data ne doit jamais avoir les droits root ou être sudoer (sans pw)...pour des raisons évidentes de sécurité.
Le plus simple est de suivre le tuto que tu as indiqué...notamment cette ligne
Code :
sudo chmod 4755 /usr/sbin/i2cdetect /usr/sbin/i2cset /usr/sbin/i2cget /usr/sbin/i2cdump
cela donne la permission d'exécuter à tous les utilisateurs et tous les groupes. Vérifie les droits avec
Code :
ls -la /usr/sbin/i2c*

Cool
Répondre
#3

Merci pour ta réponse Gambit,
mais rien ne change...
j'en viens à la syntaxe de ma fonction :
Code :
[== PHP ==]
function impulsion ($port){
    /*system("gpio mode ".$port." out");
    system("gpio write ".$port." 1");*/
    shell_exec('i2cset -y 1 0x20 0x01 0x00');
    shell_exec('i2cset -y 1 0x20 0x15 0x01');
    sleep (1);
    /*system("gpio write ".$port." 0");*/
    system('i2cset -y 1 0x20 0x15 0x00');
    }

Cette fonction agissait sur le gpio sans i2c grâce aux lignes qui sont entre /* */ et ça fonctionnait...
là les ports du 23017 ne changent pas d'état....
j'ai toujours besoin d'aide...Merci
Répondre
#4

Nouveau test :

Code :
[== PHP ==]
function impulsion ($port){
    system("gpio mode ".$port." out");
    system("gpio write ".$port." 1");
    sleep (1);
    system("gpio write ".$port." 0");
    
    system("i2cset -y 1 0x20 0x01 0x00");
    system("i2cset -y 1 0x20 0x15 0x01");
    sleep (1);
    system("i2cset -y 1 0x20 0x15 0x00");
    }

Avec un autre ordi et avec mozilla j'appelle le Rpi grâce à son adresse qui lance index.php où se trouve la fonction ci-dessus. J'ai pris soin de brancher une led sur le gpio 0 du Rpi et une led sur gpb 0 du 23017.
La première led s'allume pendant une seconde (fonctionnement attendu !) l'autre reste inactive !!!!
De plus j'ai vérifié que les commande gpio..... et i2cset.... fonctionnent sur la console.
Je me retrouve toujours dans la même impasse..... :o A l'aide...Merci

J'oriente ma recherche vers la bibliothèque GPIO pour voir si elle a des fonctionnalités i2c......
https://learn.adafruit.com/mcp230xx-gpio...he-library mais mon anglais reste insuffisant Sad
Répondre
#5

Suite des investigation :
puisque la commande "system("gpio write ".$port." 1");" fonctionne avec www-data en fouillant sur ce site :

http://wiringpi.com/the-gpio-utility/i2c...xtensions/

il semblerait que gpio fonctionne en i2c...
j'ai lancé les commandes suivant :
gpio load i2c ----> le Rpi charge le module i2c
gpio -x mpc23017:100:0:0 write 101 ----> cette commande devrait faire évoluer une sortie du 23017 mais :
"gpio: extension mpc23017 not found" mais comment installer cette extension ?
Une idée serait la bien venue... Merci
Répondre
#6

Euh, j'ai du mal à te suivre.
Comment as-tu installé wiring pi?
Et donne nous le retour des commandes
Code :
gpio -v
gpio readall

Cool
Répondre
#7

j'ai trouvé :

Code :
[== PHP ==]
gpio -x mpc23017:100:0:0 write 101

l'exemple proposé sur : http://wiringpi.com/the-gpio-utility/i2c...xtensions/
à une erreur, il faut écrire :

Code :
[== PHP ==]
gpio -x mpc23017:100:0x20 mode 101 out
gpio -x mpc23017:100:0x20 write 101 1

avec 0x20 l'adresse du 23017
avec 101 la broche gpA0 = 100 ; gpA7 = 107 ; gpB0 = 108 ; gpB15 = 115

j'utilise donc la commande :
Code :
[== PHP ==]
system("gpio -x mpc23017:100:0x20 write 101 1");

et ça marche avec l'utilisateur www-data
merci à Tous :/
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)