Domotique V1.0 [ début du projet "abouti"]

Bonjours a tous,

Et bien voila après moulte question posé sur le forum, je vient vous présenter mon premier projet a peut prêt bien ficelé :D

Il s'agit donc de gérer l’allumage et l'extinction de 2 LED a partir d'une interface web. L'arduino est relier en USB au PC ou tourne un script python.

Le principe est assez "basique" ! quand j'appuis sur un bouton de mon interface web ça écrit une variable dans un fichier .txt Egalement sur mon FTP. Le script python "observe" en permanence ce fichier.txt et envoi les variables a l'arduino qui les transforme en "allumer éteindre led rouge led bleu" !

C'est pas grand chose pour le moment mais comme je découvre tout juste python ( je doit être a 4H de programmation la dessus a tout casser ), l'arduino ( 2 semaines ), le php (depuis cette après midi que je connais ^^) et compagnie c'est pas facile :disappointed_relieved:

Prochaine étape je vais essayer de récupérer les infos d'un capteur de température sur ma page "FTP" ou alors je commence a faire joujou avec des relais et du 220V :)

Vidéo (iphone+lampe allumé = pas top dsl ^^ ) :

http://www.youtube.com/watch?v=3fUonrZrxIc

car pour le moment je ne possede pas d'internet shield ni de wifi shield

je n'en est pas non plus d'ou l'utilisation d'un PC "serveur" ou est relier l'arduino ^^

Code python:

import feedparser
import serial
import time
import urllib



b = 0
r = 0


def recup():
        
                


  
                b1 = urllib.urlopen("http://modelismebychico.free.fr/bleu.txt") ## Récup des valables; 1 fichier par led
                r1 = urllib.urlopen("http://modelismebychico.free.fr/rouge.txt") ## Récup des valables; 1 fichier par led
               

                
                if b1.readline != "":
                        b = b1.readline()
                        if b == "a":
                                ser.write("a")
                                print b

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

                        r = r1.readline()
                        if r == "c":
                                ser.write("c")
                                print b

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

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

Code Arduino:

// led wired + to pin 12, resistor to positive +5v

int rouge = 13; // Output connected to digital pin 12
int bleu = 6; // Output connected to digital pin 12
int val; // Value read from the serial port
void setup()
{
 pinMode(rouge, OUTPUT);
 pinMode(bleu, OUTPUT);
 Serial.begin(9600);
 Serial.flush();

}

void loop()
{
 // Read from serial port
 if (Serial.available())
 {
   val = Serial.read();
   Serial.println(val, BYTE);
    digitalWrite(rouge, LOW);
    digitalWrite(bleu, LOW);
   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);
   }
 }
}

Salut,

quels sont les avantages (hors mis le non investissement d'une carte ethernet shield) et les inconvenients de ton systeme ??

Bah en fait j'ai fait ça car pour le moment je n'est pas vraiment envie d’investir dans un ethernet shield. Mais il faut savoir que même avec un ethernet shield j'ai lu qu'il fallait un PC comme serveur pour stocker les "images" et autres si on fait une interface web un peu poussé car la mémoire de l'ethernet shield est limité ;)

Le pilotage (des leds pour le moment) peut-il etre fait à distance (NO AT HOME d'un PC ou Mac ) ??

Oui c'est bien ça le but ^^ mon interface web est accessible partout dans le monde (waouhh c'est fort internet quand même ^^ ) donc tant que le PC ou est relier l'arduino est allumé je peut gérer mon allumage de partout par le biais de mon netbook, de mon pc fixe, de mon iphone, ipod touch, android mobile .... Tous ce qui se connecte au NET peut gérer les LED a distance !

et une petite derniere , comment doit-on procéder pour effectuer une page ( ton exemple ) , faut-il des logiciels spécifiques ,un ébergement spéciale par un fournisseur d'accès ?? car PYTHON hors mis le nom ,je ne connais pas du tout , mais je suis curieux . pourquoi ne pas avoir pris Processing ou autre .

Ma page en fait c'est un truc tout moche en HTML et PHP fait a la va vite pour tester le système. Tu peut utiliser Dreamweaver pour créer des pages si tu ne connais pas le HTML, PHP et compagnie ... mais sinon on trouve des exemples un peu partout sur le net. J'ai fait ma page en récupérant des morceaux de code un peu partout, surtout pour la partie PHP pour écrire une variable dans mon fichier.txt

Pour l’hébergement pour le moment j'ai un FTP free. C'est gratuit et ça marche relativement bien mais une fois que j'aurais vraiment commencer le projet je pense heberger mon FTP directement sur le PC serveur ou est relié l'arduino et ou tourne le code PYTHON ! Ça évite d'avoir le .free.fr comme adresse et c'est beaucoup plus flexible pour transférer les fichiers.

A vrai dire PYTHON je vient de découvrir ça il y a même pas 2 semaines. J'avais essayer PROCESSING mais en fait j'ai trouver plus de tuto pour PYTHON sur internet donc je suis resté la dessus mais pour être franc en PYTHON j'y connais quedal ^^

merci +++

Re,

Tient voila mon code PHP+HTML pour l’interface Web si tu veut :wink:

Elle parait complexe mais en fait si tu regarde bien il y a 4 fois la même chose car il y a 4 bouton ! j’ai mis en rose la partie PHP qui fait que quand tu appuis sur le bouton ça ecrit une variable dans un fichier texte. Ici la variable est “a” dans le fichier “bleu.txt”.

<html>
<body>
<H1 ALIGN=CENTER> Domotique by Chico's </H1>

<H3 ALIGN=CENTER> LED rouge </H3>
[color=pink]<?php
    $fichier="bleu.txt"; // Nom du fichier à modifier

        if(isset($_POST['boutton1'])) {    
        //if(is_file($fichier)) unlink($fichier); //si le fichier existe :  suppression du fichier pour le remplacer par le nouveau avec les nouveau éléments
        $ouverture=fopen("$fichier","w"); // Création du nouveau fichier et ouverture du fichier avec le mode w on ouvre le fichier qu'en écriture et unlink devient inutile car le fichier est vidé automatiquement
        fwrite($ouverture,"a"); // ecriture
        fclose($ouverture); // fermeture du fichier
        echo ' '; // Affichage validation
        }
?>

    <form method="post" action=""> <!-- j'ai modifié action pour qu'il soit compatible peut importe le nom de la page-->
 

    <center>
<input type="submit" name="boutton1" value="Allumer"><input type="submit" name="boutton2" value="eteindre"></center>
    </form>
<!-- retour au code HTML -->
</body>
</html>[/color]
<html>
<body>
<center><?php
    $fichier="bleu.txt"; // Nom du fichier à modifier

        if(isset($_POST['boutton2'])) {    
        //if(is_file($fichier)) unlink($fichier); //si le fichier existe :  suppression du fichier pour le remplacer par le nouveau avec les nouveau éléments
        $ouverture=fopen("$fichier","w"); // Création du nouveau fichier et ouverture du fichier avec le mode w on ouvre le fichier qu'en écriture et unlink devient inutile car le fichier est vidé automatiquement
        fwrite($ouverture,"b"); // ecriture
        fclose($ouverture); // fermeture du fichier
        echo ' '; // Affichage validation
        }
?>

    <form method="post" action=""> <!-- j'ai modifié action pour qu'il soit compatible peut importe le nom de la page-->
 

    </form>
<!-- retour au code HTML -->
<BODY BGCOLOR="#B5E655">
</body>
</html>
<html>
<body>

<H3 ALIGN=CENTER> LED bleu </H3>
<?php
    $fichier="rouge.txt"; // Nom du fichier à modifier

        if(isset($_POST['boutton3'])) {    
        //if(is_file($fichier)) unlink($fichier); //si le fichier existe :  suppression du fichier pour le remplacer par le nouveau avec les nouveau éléments
        $ouverture=fopen("$fichier","w"); // Création du nouveau fichier et ouverture du fichier avec le mode w on ouvre le fichier qu'en écriture et unlink devient inutile car le fichier est vidé automatiquement
        fwrite($ouverture,"c"); // ecriture
        fclose($ouverture); // fermeture du fichier
        echo ' '; // Affichage validation
        }
?>

    <form method="post" action=""> <!-- j'ai modifié action pour qu'il soit compatible peut importe le nom de la page-->
 

    <center>
<input type="submit" name="boutton3" value="Allumer"><input type="submit" name="boutton4" value="eteindre"></center>
    </form>
<!-- retour au code HTML -->
</body>
</html>
<html>
<body>
<center><?php
    $fichier="rouge.txt"; // Nom du fichier à modifier

        if(isset($_POST['boutton4'])) {    
        //if(is_file($fichier)) unlink($fichier); //si le fichier existe :  suppression du fichier pour le remplacer par le nouveau avec les nouveau éléments
        $ouverture=fopen("$fichier","w"); // Création du nouveau fichier et ouverture du fichier avec le mode w on ouvre le fichier qu'en écriture et unlink devient inutile car le fichier est vidé automatiquement
        fwrite($ouverture,"d"); // ecriture
        fclose($ouverture); // fermeture du fichier
        echo ' '; // Affichage validation
        }
?>

    <form method="post" action=""> <!-- j'ai modifié action pour qu'il soit compatible peut importe le nom de la page-->
 

    </form>
<!-- retour au code HTML -->
<BODY BGCOLOR="#B5E655">
</body>
</html>

Qu’entends-tu par PC serveur ??

J’entend par “PC serveur” le PC auquel est connecté en USB la carte arduino et sur lequel tourne le code PYTHON qui analyse les variables . En gros mon “PC serveur” joue le role d’ethernet shield .

Peut-on faire une petite interface sous Flash (j’ai un peu bossé avec il y a un moment) ,et ensuite prendre la meme procedure ( c’est à dire suivre le cheminement de création de page Web sur le fournisseur d’accès ) ??
Procedure d’ailleur ,que j’ai déjà fait il y a 7-8 ans ,je ne sais meme plus comment faire ,mais pas grave .je dis ça car à l’époque c’etait club-internet (très facile ) NOW SFR ,leur interface est trop bordelique (excuse) .

En fait je sait pas FLASH je connais pas :sweat_smile: Mais la procédure pour faire une page internet assez rapidement c’est de taper son code dans le bloc note, l’enregistrer en .php et ensuite tu la transfert sur ton FTP . Apres je sait pas si j’ai repondu a ta question car j’ai pas vraiment compris :roll_eyes: désolé ^^

je suppose que la phase la plus délicate est d'envoyer les valeurs et de déclarer les bonnes variables ??

Pour ma part oui car en fait je ne connaissait pas le srcipt PHP pour ecrire des variables dans un fichier.txt mais la je l’est posté donc maintenant c’est bon ^^
Les variables du déclare celle que tu veut. Moi j’ai mis ça
a= allumer led bleu
b= éteindre led bleu
c=allumer led rouge
d= éteindre led rouge

voila merci ++

Il n'y a pas de souci un forum c'est fait pour partager et discuter :D

C'est d’ailleurs nos amis du forum Anglais qui m'ont donné la solution pour le script PYTHON pour infos ^^ Il faut donc pas hésiter a aller voir de leurs coté aussi car ils ont une section bien plus remplis que la notre ;)

Pour le FTP si tu veut un free comme moi (alors que je suis avec l'IDEO de Bouygues ^^ ) il faut s'inscrire sur leurs site pour l'offre de internet 56K gratuitement ! tu va recevoir un courier avec des identifiant et tu aura un FTP free gratuit ;)

avec quelques CAM en plus

C'est quoi des CAM ? ^^

CAM (cameras )

ah oui ok j'y été pas :D

Je vient d'ailleur de recup une vieille Webcam en plus pour essayer d'avoir un "retour image" sur le ftp ;)

chicotore je viens de regarder ton code php … dit moi c’est pas le fichier réel ?? car niveau html … disont que c’est un faux … dans une page afficher tu ne doit avoir qu’un seul et body… pas en avoir 4 …

Oui bien sur je vais poster un truc qui marche pas .... :D fait un copier coller et essaye le dans un navigateur et tu me dira si c'est un faux ou pas ;)

Non sinon c'est clair que pour le moment il est "crade" avec plein de balise HTML partout mais il fonctionne, si quelqu'un veut le rendre clean il n'y a pas de soucis j'accepte avec plaisir ;)

EDIT: tient voila le "faux"

http://modelismebychico.free.fr/faux.php

Tu peut vérifier le code source c'est bien le même ....

Salut
Disons que le terme “faux” est mal choisi, en fait il ne respecte pas le langage et ses standards. Le navigateur peut arriver à s’en sortir mais certains pourraient être plus pointilleux et afficher n’importe quoi.
Je vais regarder ton code et te proposer le même résultat avec du code plus propre et plus correct si tu veux :wink:

(Ce n’est pas une attaque hein, chacun son domaine de compétences on a tous démarré en faisant des erreurs :wink: )

Pour le reste de la discussion, si je peux aider à comprendre un peu le fonctionnement:

Interface web (php + HTML/CSS) ==== modifie ====> Fichiers texte <==== lus par ===== Code python === envoie des ordres à ==> Arduino ===== connectée par USB ====> PC

Il est effectivement possible de faire une chaîne un peu moins compliquée:

L’arduino avec l’Ethernet shield qui va directement lire le fichier texte qui est créé par l’interface Web (PHP …)

L’interface web peut être hébergée chez un fournisseur (Free ou autre) ou sur le PC où est connectée l’arduino si celle-ci reste en USB
MAIS cela comporte un problème:
Pour que “n’importe quelle machine reliée à internet” puisse y accéder, il faudra ouvrir des ports sur le routeur, donc un accès potentiel à toute la machine s’il y a une faille (et c’est fréquent, notemment quand on débute en code PHP, je débute trop dans ce domaine aussi pour me risquer à cela par exemple)

Sans parler du fait qu’il suffit que l’adresse du PC relié à internet soit connue pour que des gens puissent s’amuser avec tes boutons et faire n’importe quoi (tant que ce sont des leds c’est vraiment pas grave, mais si tu mets autre chose … ) il faudrait au moins mettre un login/mot de passe, mais ça n’est pas infaillible

Je conseillerais deux solutions:
Un NAS: ils ont souvent un hébergement web intégré disponible, et fait pour héberger des sites (HTML/CSS et PHP), ils sont sécurisés pour que personne n’aille trifouiller autre chose et sont assez simples à mettre en œuvre (il faudra aussi ouvrir l’accès sur le routeur, mais seulement au NAS qui est plus apte à gérer cela)
Ou un hébergeur extérieur, donc rester chez Free ou en prendre un autre

Je vais regarder ton code et te proposer le même résultat avec du code plus propre et plus correct si tu veux

Oui je veut bien merci XD

Pour le coté sécurisé c'est clair que pour le moment c'est un peu en mode "porte ouverte" ;) mais c'est juste en étape de test, pour la suite je vais déjà mettre un MDP sur ma page HTML et on verra plus tard pour l'investissement d'un NAS mais pour le moment c'est vraiment juste dans le but de découvrir la domotique ;) et de mettre ça en place chez moi quand j'aurais quitter la maison familiale ^^

merci +++

Tout à fait d'accord, je proposais des solutions pour du "durable" mais en mode découverte c'est suffisant :)

Voilà quelque chose de plus propre et lisible :wink:
Ça devrait fonctionner comme avant

<!------------------------
== Par Epy pour Chicotore ==

Commande de leds par Arduino

Licence WTFPL: http://sam.zoy.org/wtfpl/
---------------------------->

<html>
	<head>
		<title>Domotique by Chico's</title>
	<style type="text/css">
	body { text-align: center ;
		background-color: #b5e655;}
	h1 { font-weight: bold;}
	h3 {}
	fieldset { }
	#global { width: 100%;}
	</style>
	</head>
<body>
<div id="global">
<h1>Domotique by Chico's</h1>
    <form method="post" action=""> <!-- j'ai modifié action pour qu'il soit compatible peut importe le nom de la page-->
	<fieldset>
	<legend> Leds rouges </legend>		
		<input type="submit" name="boutton1" value="Allumer">
		<input type="submit" name="boutton2" value="&Eacute;teindre">
	</fieldset>
	<fieldset>
	<legend> Leds bleues </legend>
		<input type="submit" name="boutton3" value="Allumer">
		<input type="submit" name="boutton4" value="&Eacute;teindre">
	</fieldset>
    </form>
</div>
<?php
    $fichier="bleu.txt"; // Nom du fichier à modifier

        if(isset($_POST['boutton1'])) {    
		    //if(is_file($fichier)) unlink($fichier); //si le fichier existe :  suppression du fichier pour le remplacer par le nouveau avec les nouveau éléments
		    $ouverture=fopen("$fichier","w"); // Création du nouveau fichier et ouverture du fichier avec le mode w on ouvre le fichier qu'en écriture et unlink devient inutile car le fichier est vidé automatiquement
		    fwrite($ouverture,"a"); // ecriture
		    fclose($ouverture); // fermeture du fichier
		    echo ' '; // Affichage validation
        }

		if(isset($_POST['boutton2'])) {    
        //if(is_file($fichier)) unlink($fichier); //si le fichier existe :  suppression du fichier pour le remplacer par le nouveau avec les nouveau éléments
        	$ouverture=fopen("$fichier","w"); // Création du nouveau fichier et ouverture du fichier avec le mode w on ouvre le fichier qu'en écriture et unlink devient inutile car le fichier est vidé automatiquement
        	fwrite($ouverture,"b"); // ecriture
        	fclose($ouverture); // fermeture du fichier
        	echo ' '; // Affichage validation
        }

    $fichier="rouge.txt"; // Nom du fichier à modifier

        if(isset($_POST['boutton3'])) {    
		    //if(is_file($fichier)) unlink($fichier); //si le fichier existe :  suppression du fichier pour le remplacer par le nouveau avec les nouveau éléments
		    $ouverture=fopen("$fichier","w"); // Création du nouveau fichier et ouverture du fichier avec le mode w on ouvre le fichier qu'en écriture et unlink devient inutile car le fichier est vidé automatiquement
		    fwrite($ouverture,"c"); // ecriture
		    fclose($ouverture); // fermeture du fichier
		    echo ' '; // Affichage validation
        }

        if(isset($_POST['boutton4'])) {    
		    //if(is_file($fichier)) unlink($fichier); //si le fichier existe :  suppression du fichier pour le remplacer par le nouveau avec les nouveau éléments
		    $ouverture=fopen("$fichier","w"); // Création du nouveau fichier et ouverture du fichier avec le mode w on ouvre le fichier qu'en écriture et unlink devient inutile car le fichier est vidé automatiquement
		    fwrite($ouverture,"d"); // ecriture
		    fclose($ouverture); // fermeture du fichier
		    echo ' '; // Affichage validation
        }
?>
</body>
</html>

On doit pouvoir faire mieux niveau PHP (pour que tu puisses plus facilement ajouter d’autres leds de couleur par exemple), un peu mieux niveau interface aussi
mais vu que c’est pour tester je ne pense pas que ce soit nécessaire de se casser la tête :wink:

Confirmes moi que ton système fonctionne toujours avec cette nouvelle page (tu n’a besoin que de la mettre à coté de ton actuelle sans l’effacer ça permettra de revenir en arrière si elle ne fonctionne pas)
Tu peux renommer le fichier test.php comme tu le souhaites si tu gardes cette version :slight_smile:

Ouep c'est bon ça marche nikel merci ;) j'ai juste remis les légendes en gras et retiré les petits cadre autour des boutons ^^

Sinon, est-ce que tu serait par hasard comment transformer mes 2 boutons en un seul bouton ? un seul bouton qui est d'abord en "allumer" et quand je Click dessus il passe en "éteindre" et ainsi de suite ? le tous en gardant le fait qu'il écrive deux variables différentes entre la phase allumer et la phase éteindre ?

merci

Il faudrait que je me penche dessus oui, ça ne devrait pas être ultra compliqué mais comme je début aussi en php ça va me prendre un peu de temps. Je vais regarder, si quelqu'un qui passerait par là peut le faire en 30s qu'il ne se gêne pas ;)

Salut,

Je up ton code HTML sur mon FTP et j'ai rien ... page blanche :( Donc a mon avis il ne fonctionne pas je pense :/

dsl

Pour ton code il ne faudrait-il pas que j'upload la "photo" sur le FTP par hasard non ? le "design" des boutons est directement dans le code ?

Pour mon code moi non plus en le lançant direct avec le navigateur ça ne marche pas mais une fois sur le FTP c'est OK. Pourquoi tu ne te prend pas un hébergement FREE pour essayer ? c'est gratuit en plus ^^

Ok cool ;)

Pour le flash alors la je peut pas t'aider désolé ... j'ai jamais touché a cette chose :D

bon courage ;)

AlienArea51: Salut tant pis

pourtant je l'ai testé chez-moi ,et ça fonctionne .bizarre n'est-ce pas .Flash fait un fichier HTML (en sauvegarde ) quand je click dessus ,il lance le navigateur (OK) j'ai fait la meme expérience avec ton code et ça ne marche pas non plus.(pas de page blanche mais le code en faisant la meme chose que ci-dessus)) quelque chose m'echappe !!!

@+ William

Ton code pour le Flash semble n'être activé que si on utilise Internet Explorer :X (pas testé, juste lu le code) Et en plus l'emplacement pour les actions des boutons est vide: "// place your code here"

Super classe l'interface :astonished: I love it :D