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

"Aide" Allumer / éteindre une led depuis une page HTML, PHP
#1

Bonjour à tous,

Pour rappel je suis novice dans Raspbérry et linux!

Alors comme l'indiqué plus haut j'aimerai allumer et éteindre une led depuis une page html ou php.

1- j'ai installer mon serveur (Apache2, php5, php5-mysql, mysql-server) il tourne! --"It Works!"--
2- Sécurisation de celui ci --OK-- ( merci à Philippe_PMA pour son lien: http://fr.openclassrooms.com/informatiq … veur-linux)
3- Allumer et éteindre une led avec python --OK-- ( j'ai suivi l'exemple du livre " Raspberry Pi Le guide de l'utilisateur")
4- Page HTML avec deux boutons ON et OFF --le serveur affiche bien la page--

Voilà je viens de passer un bon moment sur le web à la recherche d'un ptit tuto sur le sujet mais ca part un peu dans tous les sens!

Pour commencer:

- HTML ou PHP? (j'ai retrouvé mon livre HTML pour les .... , mais PHP je ne connais pas.)

- La plupart des liens que j'ai lu n'utilise pas Python pour commander le GPIO , est ce que je me complique la vie en utilisant Python? (j'était déjà tout emballé de pouvoir allumer une led depuis ssh ! )

- Est ce que quelqu'un aurait un lien ou pourrait me décrire la marche à suivre?

Merci d'avance pour vos réponses.
Répondre
#2

Bonjour,

Pour ce faire, on peut lancer une commande système via PHP avec cette fonction : exec ( http://php.net/manual/fr/function.exec.php )
Par exemple, pour mettre le GPIO 7 à 1, on fait :
Code :
[== PHP ==]
<?php exec("gpio write 7 1"); ?>

Comme le PHP ne s'execute qu'au chargement de la page, il faut ouvrir la page PHP à partir de ta page HTML (celle où tu as ton bouton ON)
Le façon la plus simple consiste à ouvrir la page via une requete ajax en jquery :

TA PAGE HTML
Code :
[== HTML ==]
<head>
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script>
$(function(){

// ici j'ai décomposé en 2 fonction distinctes pour faciliter la compréhension. Bien entendu, on peut synthétiser en une seule fonction, mais le but ici est de comprendre la démarche ;)

   $('#btn_7_on').on('click',function(){
      $.post( "code_gpio.php",
                { gpio: 7,
                   etat: 1
                },
                function( data ) {
                   alert('commande lancee');
                });
   });

   $('#btn_7_off').on('click',function(){
      $.post( "code_gpio.php",
                { gpio: 7,
                   etat: 0
                },
                function( data ) {
                   alert('commande lancee');
                });
   });

});
</script>
</head>
<body>
  <button id="btn_7_on">allumer gpio 7</button>
  <button id="btn_7_off">eteindre gpio 7</button>
</body>

CODE_GPIO.PHP

Code :
[== PHP ==]
<?php

  exec ("gpio write " . $_POST["gpio"] . " " . $_POST["etat"]);

?>
Répondre
#3

Merci baalberith pour ta réponse rapide, je suis un peu perdu mais vais décortiquer ça!

Par contre je pensais qu'on pouvais appeler un code python depuis une page HTML ou PHP? j'avais fais quelque recherche voici la commande trouvé :

<form> action="http://var/www/cgi-bin mon_code_Python method="post">

<input name="send" value="ON" type="submit">
</form>

mais ne fonctionne pas. Ma page s'affiche bien mais lorsque je clic sur le bouton on la page se rafraîchis et le message "Nous éprouvons des difficultés à afficher cette page" apparaît et rien sur le GPIO.
Répondre
#4

La méthode que je t'ai donnée juste avant marche pour n'importe quel sript. Moi je m'en sers aussi pour lancer des scripts batch par exemple.

Pour un script python, tu le lance depuis PHP de la même façon que depuis un terminal : "python ton_script.py"

Cette méthode permet également de récupérer le retour des commandes dans la variable javascript data (voir la fonction que j'ai mise avant). C'est souvent utile.

En allant plus loin, on peut aussi lancer des programmes X directement sur le serveur.
Par exemple, j'utilise mon PI en serveur domotique. Il est branché sur mon téléviseur et commandé via smartphone (interface web + vocale)

Le pi est démarré en session X car il doit pouvoir afficher plusieurs choses nécessitant un serveur X.
Avec quelques bidouilles, je peux afficher mes caméras avec mplayer directement sur le bureau : perso j'ai mis en place une commande vocale "caméra 2 sur écran". J'avais vu ça dans un film et j'ai toujours voulu faire pareil xD
Répondre
#5

Hello baalberith,

j'ai tester ta méthode et à vrais dire j'ai bien du mal. En fait je ne comprend pas se que je fais et çà sa m'énerve!
Le mieux serais peut être d'apprendre en partant du début le langage PHP.
Par contre sur le net j'ai lu que l'on pouvais écrire des page avec python? ça serait cool, car au lieu d'apprendre deux nouveaux langage je pourrais me passer de PHP. Enfin je dis ça mais je ni connais rien. :/

Mon but est de pouvoir faire de la domotique, pouvoir commander et recevoir des infos sur mon smartphone par ex et donc exploiter le port GPIO.
Quel langage me conseillez vous?

Merci
Répondre
#6

Avec webiopi ? https://code.google.com/p/webiopi/

Raspberry Pi Home Server : http://www.pihomeserver.fr
Hotspot Wifi avec portail captif pour Raspberry Pi: Kupiki Hotspot
Répondre
#7

en fait, le code que je t'ai mis tu peux juste le copier/coller.

Le seul truc à changer est la commande à exécuter dans le fichier code_gpio.php

Ceci est valable pour le lancement d'une commande (ou d'un script python, batch...).

Si tu veux continuer sur cette voie, on verra pour la réception de données quand tu auras mis en place ceci.

En ce qui concerne webiopi c'est pas mal sinon (après faut prendre le temps de le décortiquer pour l'utiliser dans ton projet)
Répondre
#8

bonjour j ai creer une page php pour pouvoir la lancer depuis une requete url .
pouvez vous me dir j ai pas fais d erreur ,j ai entrer le code de la prise , faut il remplir le numero de la prise et l etat?

[== PHP ==]
<?php

$status = $_GET['status'];
$numero_prise = $_GET['numero_prise'];
exec('sudo /home/pi/rcswitch-pi/./send 10101 '.$numero_prise.' '.$status);

?>
Répondre
#9

- apache est'il autorisé à lancer une commande sudo ?
- la commande devrait plutôt être : /home/pi/rcswitch-pi/send
Répondre
#10

De plus avant de faire l'hardening d'Apache, tu devrais tester tes commandes. La sécurisation vient plutôt à la fin qu'au début.

Raspberry Pi Home Server : http://www.pihomeserver.fr
Hotspot Wifi avec portail captif pour Raspberry Pi: Kupiki Hotspot
Répondre
#11

ca fonctionne j ai un rpi avec domoticz avec l adresse 192.168.1.40 et je commande un autre rpi sous l adresse 192.168.1.24 avec un emetteur 433
j envoi une requete url depuis domoticz (http://192.168.1.24/prise.php?status=1&numero_prise=1) pour on et (http://192.168.1.24/prise.php?status=0&numero_prise=1) pour off
et magique la prise s allume et s eteint.
merci pour votre aide
Répondre
#12

Je voulais pas mettre 60 euros pour un razberry ou pas loin de 100 euros pour un rfxcom.
Pour moins de 3 euros ça marche plutot bien
Répondre
#13

@nathan04, 07 : pourquoi as tu 2 comptes ?
Répondre
#14

Désolé, mais je sais pas?
Répondre
#15

Tu t'es inscrit 2 fois non ?

nathan0407
nathan04

Ces 2 comptes ont sensiblement la même adresse mail...
Répondre
#16

Hello baalberith,

Je revient de vacances et me replonge sur mon ptit prog. Wink
J'ai re-testé ton programme, les pages html et php fonctionnent bien mais rien ne se passe sur la sortie gpio.
Parcontre je ne sais pas comment faire pour juste appeler un code python. j'ai tenté de modifier le code php mais ca ne fonctionne pas Sad
Si peux tu m’aiguiller un peu?

Merci
Répondre
#17

il ne faut pas confondre PHP et HTML.
Ca c est du HTML, et tu appel la page http://var/www/ qui n'est pas un domain valide, mais le pth de ton ordinateur :
Code :
[== HTML ==]
<form> action="http://var/www/cgi-bin mon_code_Python method="post">
    <input name="send" value="ON" type="submit">
</form>

Si ton code python se trouve sur ton serveur, dans le dossier www/cgi-bin tu dois utiliser cette URL :
http://adresse_du_raspberry/cgi-bin/code-python.py
Par exemple :
Code :
[== HTML ==]
<form> action="http://url_du_raspberry/mon_code_Python" method="post">
    <input name="send" value="ON" type="submit">
</form>

Maintenant, je n'utilise pas python en serveur web, donc je ne sais pas si il y a une configuration particuliere a faire sur le serveur. Personellement j'ai une page PHP qui appel un script python
Répondre


Atteindre :


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