[Besoin d'aide]Commande de LED via site sans shield ethernet

Bonjour bonjour,

J'ai dans la tête un petit projet : celui de faire descendre de mon plafond des petites enceintes d'un home cinéma et de contrôler la monter descente des enceintes via un site internet de ma conception.

Alors histoire de débuter "facile" je souhaitais juste dans un premier temps allumer des LEDs via des boutons sur mon site internet et le tout sans shield ethernet.

Cette étape est très proche (identique même) à ce qui à été fait sur ce poste : http://arduino.cc/forum/index.php/topic,55784.0.html je me suis d’ailleurs beaucoup appuyé sur les différents codes fournis dans ce poste pour le miens.

Voici le principe de fonctionnement de ma commande des LEDs :
un site en PHP avec deux boutons (allumer et éteindre) ====> quand on appuis sur allumer, le mot "on" est écrit dans un fichier texte, si l'on appuie sur éteindre le mot off remplace on dans ce fichier texte ====> un script python viens lire le fichier texte en revoie une valeur sur le port série (COM3) en fonction de ce qui est écrit dans le fichier texte =====> l'arduino lit les valeurs renvoyé sur le port série et agit en conséquence.

Alors pour le site WEB, tout va bien, il fonctionne et remplit bien le fichier texte comme voulu. C'est après que ça se complique, je n'arrive pas à savoir si le problème biens de mon script Python ou bien de mon programme arduino ...

J'ai l'impression que lorsque je lance le script python, il s’exécute une seul fois et s’arrête (mes cours de pythons sont bien loin, je ne me rappelle plus s'il y a quelque chose de spécial à faire pour que le script tourne en boucle, mais je vois rien de spécial dans le script donné par Chicotore).
De plus quand le programme arduino tourne sur l'arduino, si j'ouvre le moniteur série et que j'envoie une des valeurs qui commande l'allumage d'une LED (en rentrant la valeur à la main et en appuyant sur send) il ne se passe rien.

Voila voila je suis donc en plein désarroi =( si quelqu'un pouvais me filer un coup de main en jetant un oeil sur mes script Python et arduino (très courts) je lui en serrais éternellement reconnaissant :grin:

voici mes programmes :

Site PHP (lui fonctionne parfaitement) :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" type="text/css" href="style1arduino.css" title="Style1" />
</head>

<body>

<div id="fondblanc">
<div id="hautpage">
<p><br/ >Mon site perso !</p>
</div>
    
<div  id="menu">	
<ul>
<li><a href="accueil.html">Accueil</a></li>
<li><a href="presentation.html">Présentation</a></li>
<li><a href="projet.html">Projets</a></li>
<li><a href="cv.html">C.V.</a></li>
<li><a href="arduino.php">Arduino</a></li>
</ul>
</div>
    
	
<div id="deco"></div>
<div id="main"> 
   
<div id="contenu"> 
	

<H3 ALIGN=CENTER> LED rouge </H3>
<?php
    $fichier="rouge.txt"; // Nom du fichier à modifier
        if(isset($_POST['boutton1'])) 
		{    
			$ouverture=fopen("$fichier","w"); 
			fwrite($ouverture,"on"); 
			fclose($ouverture); 
        }
?>

    <form method="post" action=""> 
 

    <center>
<input type="submit" name="boutton1" value="Allumer"><input type="submit" name="boutton2" value="eteindre"></center>
    </form>

	<center><?php
    $fichier="rouge.txt"; // Nom du fichier à modifier
        if(isset($_POST['boutton2'])) 
		{    
			$ouverture=fopen("$fichier","w");
			fwrite($ouverture,"off");
			fclose($ouverture); 
        }
?>

    <form method="post" action=""> 
	
	
<H3 ALIGN=CENTER> LED bleu </H3>
<?php
    $fichier="bleu.txt"; // Nom du fichier à modifier
        if(isset($_POST['boutton3'])) 
		{    
			$ouverture=fopen("$fichier","w");
			fwrite($ouverture,"on"); 
			fclose($ouverture); 
        }
?>

    <form method="post" action=""> 
	
	<center><?php
    $fichier="bleu.txt"; // Nom du fichier à modifier

        if(isset($_POST['boutton4'])) 
		{    
			$ouverture=fopen("$fichier","w");
			fwrite($ouverture,"off");
			fclose($ouverture);
        }
?>
    </form>
 

    <center>
<input type="submit" name="boutton3" value="Allumer"><input type="submit" name="boutton4" value="eteindre"></center>
    </form>
 

    </form>
   
</div>
</div>

   
</div>

</body>
</html>

Code Python (là je suis bien moins sûr de son fonctionnement) :

import feedparser
import serial
import time
import urllib

b = 0
r = 0

def recup():
        
                b1 = urllib.urlopen("C:\wamp\www\Test\bleu.txt") ## Récup des valables; 1 fichier par led
                r1 = urllib.urlopen("C:\wamp\www\Test\rouge.txt") ## Récup des valables; 1 fichier par led
               
                if r1.readline != "":
                        r = r1.readline()
                        if r == "on":
                                ser.write("97")
                                print b

                        if r == "off":
                                ser.write("98")
                                print b

                        b = b1.readline()
                        if b == "on":
                                ser.write("99")
                                print b

                        if b == "off":
                                ser.write("100")
                                print b
               

                recup()
	
print "ouverture du port"
ser = serial.Serial()
ser.setPort("COM3")
ser.baudrate = 9600
ser.close()
ser.open()
print "port ouvert"
recup()
if (ser.isOpen()):
        recup()

Et enfin le clou du spectacle : le programme arduino :

int rouge = 8; 
int bleu = 9; 
int val;

void setup()
{
 pinMode(rouge, OUTPUT);
 pinMode(bleu, OUTPUT);
 Serial.begin(9600);
 Serial.flush();
 digitalWrite(rouge, LOW);
 digitalWrite(bleu, LOW);
}

void loop()
{
 if (Serial.available()) //va consulter le port sérial
 {
   val = Serial.read();
   Serial.write(val);
   if (val == 97) 
   {
     digitalWrite(rouge, HIGH);
   }
   if (val == 98) 
   {
     digitalWrite(rouge, LOW);
   }
if (val == 99)
   {
     digitalWrite(bleu, HIGH);
   }
   else if (val == 100) 
   {
     digitalWrite(bleu, LOW);
   }
 }
}

Merci de votre aide par avance ! 8)

Bonjour,

Je ne connais pas grand chose au php donc je n'ai rien à dire sur le 1er code.
Au vue des mes modestes connaissances en Python, je ne trouve rien à redire au script Python.
Par contre sur le code Arduino :
La fonction serial.read lit un seul characters et non un entier donc tes tests ne peuvent pas fonctionner pour pouvoir lire ton nombre, il faut donc lire char par char puis transformer la chaine en entier pour réaliser cela : http://www.instructables.com/answers/How-to-input-NUMBERS-through-Arduino-serialmonito/

Serge

Salut a toi.
En regardent sur SEMAGEEK,je suis tomber sur cette page qui parle de ArduGate


Lien ver la pagehttp://www.semageek.com/ardugate-piloter-un-arduino-facilement-a-partir-de-son-navigateur-web/
Si cella peut te rendre service.

Ton code Python envoie le nombre sous forme d'une chaine de caractères.

ser.write("97")

Ton code C lit des int et teste des int

int val;

........

void loop()
{
 if (Serial.available()) //va consulter le port sérial
 {
   val = Serial.read();
   Serial.write(val);
   if (val == 97) 
   {
     digitalWrite(rouge, HIGH);
   }

Donc la solution que je te propose:
les codes que tu testes dans ton programme arduino (97,98,99,100) correspondent aux lettres a, b, c et d
donc le plus simple serait de modifier ton code Python pour faire envoyer ces lettres

par exemple remplacer

ser.write("97")

par

ser.write("a")

Merci de vos réponses.

Effectivement Fdufnews je ne me rappelais plus que python envoyait des chaines de caractères (qu'il est loin le temps à je me serais fait taper sur les doigts par mes professeurs d'informatique après une erreur aussi bête :~ )
Et d'ailleurs je me demandait aussi pourquoi Chicotore envoyait des lettres sur son python pour ensuite tester des chiffres. Je n'avais pas penser à me pencher sur la table ascii :cold_sweat:

J'essaye ça ce soir et je vous tiens au courant, mais malheureusement je ne crois pas que cela soit le seul problème mais un de moins, c'est déjà ça ! :slight_smile:

Merci pour le liens Albertrand j'ai jeté un coup d’œil mais je suis plutôt allergique à ces utilitaires tout fait.
:*

Bon voila, j'ai corrigé le problème pour le code python en remplaçant les entiers par leur équivalent en ASCII mais marche toujours pas T_T
J'ai bien l'impression que le script Python s’exécute une seule fois et se stop ....
Quelqu'un à-t'il une idée ?

Je n'ai jamais testé mais il existe une solution php/serial ce qui te permettrais de te passer de python et fichier texte en passant directement de la requête au port serie ?

http://code.google.com/p/php-serial/

Sinon la solution fichier texte pour l'échange de données entre applis c'est pas ce qu'il se fait de mieux, c'est plutôt une aberration même si censée pour un débutant. :~
Tu devrais regardé du côté des socket qui sont prévus pour, tout du moin t'y intéresser pour le futur au moin.
En perso j'ai une solution websocket -> serveur de sockets/serial (java) -> arduino , ceci me permet de faire navigateur <-> arduino en quasis temps réel et full duplex, le navigateur peut être màj par l'arduino sans aucune intervention de ma part.
Maintenant les websocket (html5) étant toujours en cours de spécification, il n'est pas encore à 100% au point :frowning: (mais ça approche :open_mouth:).