Aix en Provence
Offline
Full Member
Karma: 0
Posts: 229
Arduino rocks
|
 |
« Reply #15 on: March 02, 2012, 03:08:02 am » |
Merci à ArtBotHack pour sa super contribution.
J'ai testé => cela fonctionne très bien.
J'ai deux questions de néophyte : 1) si l'on veut commander plusieurs sorties, les modifs sont-elles complexes ? 2) pour lire les états d'entrées logiques, ou pour transmettre des valeurs dans le sens arduino => serveur web (par exemple affichage température), quelles fonctions utiliser ?
Bien à vous
|
|
|
|
« Last Edit: March 02, 2012, 03:22:04 am by Brisebee »
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 98
|
 |
« Reply #16 on: March 02, 2012, 07:02:36 am » |
ou pour transmettre des valeurs dans le sens arduino => serveur web (par exemple affichage température), quelles fonctions utiliser ?
Tu trouveras une base de code ici : http://www.jfkreuter.com/?p=9 ++
|
|
|
|
|
Logged
|
|
|
|
|
Aix en Provence
Offline
Full Member
Karma: 0
Posts: 229
Arduino rocks
|
 |
« Reply #17 on: March 02, 2012, 08:33:09 am » |
Merci, je vais tester cela dès que j'ai un moment.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 7
|
 |
« Reply #18 on: March 02, 2012, 09:15:14 am » |
Bonjour je cherche aussi un communication bi directionelle avec un serveur php.
En gros Navigateur Utilisateur<=>serveur php <=> arduino.
Par exemple, une page sur laquelle je peux monitorer la température d'une pièce et sur laquelle je puisse lancer l’allumage de la lumière ou du chauffage...
Je n'arrive pas, pour le moment à utiliser une méthode pour transmettre des info (variables...) à mon serveur php afin qu'il les affichent et dans l'autre sens, suite à un retour de page du client, que mon serveur envoi des commandes de modification de valeurs (variables) pour des sortie. J'arrive à faire afficher des entrées sur une page générée par mon arduino (accès à l'arduino par son ip) J'arrive à envoyer des info à l' arduino par UDP (mais pas de retour...). Mais impossible d'avoir du bi directionnel "réel"...
L'utilisation d'un socket d’échange me plait beaucoup, l'utilisation de page on off etc n'est pas viable à mon avis car si l'on a X capteurs et Y actionneur il faut autant de "pages" ce qui n'est pas propre et lisible... Je tiens vraiment à utiliser mon serveur php pour échanger par ethernet avec l'arduino et éviter ainsi la génération des page à ce dernier car je voudrais gérer une partie graphique lourde avec les valeurs récupérée de l'arduino...
Si quelqu'un à une solution, je suis preneur! @++
|
|
|
|
|
Logged
|
|
|
|
|
Made in Belgium
Offline
God Member
Karma: 0
Posts: 756
|
 |
« Reply #19 on: March 02, 2012, 09:40:03 am » |
Mais impossible d'avoir du bi directionnel "réel"...
J'avais un projet d'utilisation des websocket et arduino, mis en pause en raison de la non finalisation de la norme qui ne devrait tardé ... http://arduino.cc/forum/index.php/topic,72035.0.htmlAu final j'ai également donné un exemple de la solution de chesnel version tcp.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 7
|
 |
« Reply #20 on: March 02, 2012, 10:47:28 am » |
Salut Osaka, je suis déjà passé par ces très intéressantes pages... Je n'ai pour le moment pas encore trop cherché autour de la partie Json/picbus... apparemment prometteuse. Concernant la partie UDP, je n'arrive à transférer des valeur que dans un sens, apparemment le retour UDP ne fonctionne pas? en tout cas je ne récupère apparemment rien... Il faut que je regarde cela de plus prêt! L'autre "difficulté" que je m'impose est d'utiliser Arduino 1.0 ce qui fait qu'une bonne partie des scripts utilisant les librairies stream, ethernet etc ne sont pas compatibles et difficiles surtout pour un débutant comme moi à modifier... je vais regarder la partie socket tcp ce weekend... Merci.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 4
Posts: 831
|
 |
« Reply #21 on: March 03, 2012, 04:25:09 am » |
bonjour, je reviens sur cette phrase L'utilisation d'un socket d’échange me plait beaucoup, l'utilisation de page on off etc n'est pas viable à mon avis car si l'on a X capteurs et Y actionneur il faut autant de "pages" ce qui n'est pas propre et lisible... Je tiens vraiment à utiliser mon serveur php pour échanger par ethernet avec l'arduino et éviter ainsi la génération des page à ce dernier car je voudrais gérer une partie graphique lourde avec les valeurs récupérée de l'arduino... je dirais qu'une seule page et nécessaire pour toutes les pages demandées  il faut sur le server apache le rewrite activé simplement dans le htaccess on met une ligne de ce style #SetEnv PHP_VER 5_3 SetEnv REGISTER_GLOBALS 0 SetEnv PHP_VER 5 //active PHP5 #Active l'url rewrite RewriteEngine on //active url rewrite RewriteRule ^ON\.html$ page.php [L] RewriteRule ^OFF\.html$ page.php [L]
dans le script du fichier page.php (celui qui sera appelé pour toutes les commandes, on met ceci <?php $PHP_SELF =$_SERVER['REQUEST_URI'] ;; $page= substr($PHP_SELF, strrpos($PHP_SELF, '/')+1, strrpos($PHP_SELF,'.')-1); //echo "page appel : ".$page; ?> en gros on récupère le nom appelé ce qui donnera ON ou OFF au lieu de ON.html et OFF.html après dans le script page.php toujours, on met des conditions de ce style <?php if ($page!='ON' & $page!='OFF'){header("location:erreur.php");} if ($page='ON'){$allumled=1;} if ($page='OFF'){$allumled=0;} ?>
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 163
|
 |
« Reply #22 on: March 03, 2012, 08:19:38 am » |
bonjour à vous, Je viens de voir que vous avez essayer de suivre les instructions de mon tuto : http://blog.weeboo.net/tutoriel-arduino-ethernet-shield-controler-led-depuis-une-page-web/ et que vous aviez des difficultés. Souhaitant tout de même avoir un tuto qui fonctionne. Je me permet de revenir sur les erreurs que vous avez rencontré. Est-il possible d'utiliser firebug sous mozilla lorsque vous tentez de bouger le slider et de regarder dans la console log les messages qui s'affiche ? Cela permet de contrôler si la communication ce fait ou non.
|
|
|
|
|
Logged
|
|
|
|
|
Aix en Provence
Offline
Full Member
Karma: 0
Posts: 229
Arduino rocks
|
 |
« Reply #23 on: March 03, 2012, 10:31:54 am » |
Bonjour, J'ai essayé le tuto, mais hélas cela ne fonctionne pas Dans la console de firefox j'ai une suite de lignes : [16:16:42,239] POST http://127.0.0.1:8887/udp_control_led.php [HTTP/1.1 200 OK 0ms] qui s'affichent lorsque je bouge le curseur. Par contre le monitor serial reste vide et la LED éteinte. voici mes paramètres : .pde : byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 192,168,0,49 }; unsigned int localPort = 8886; et pour udp_control_led.php : $host="192.168.0.49"; // Adresse ip défini dans le code arduino $port=8886; // Port défini dans le code arduino Je ne sais pas ce que j'ai loupé ?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 98
|
 |
« Reply #24 on: March 03, 2012, 12:39:11 pm » |
Idem pour moi
Si on developpe la ligne on peut voir :
Fatal error: Call to undefined function socket_create() in C:\wamp\www\SliderLed\udp_control_led.php on line <i>7</i></th></tr>
++
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 4
Posts: 831
|
 |
« Reply #25 on: March 03, 2012, 12:44:15 pm » |
je viens de prendre le script pour le tester, tout fonctionne impeccable. j'ai remplacé le port par le 80.
une erreur a pu se glisser dans le copier coller des php a vérifier si un espace ou une ligne ne s'est pas retrouvée devant <?php ce qui aurait pour effet de mettre out le php.
|
|
|
|
|
Logged
|
|
|
|
|
|
|
Offline
God Member
Karma: 4
Posts: 831
|
 |
« Reply #27 on: March 03, 2012, 01:26:35 pm » |
tu passe par un router ou une box pour faire ton test? peux tu pingger au moins ton arduino? par ce que la communication se fait bien pourtant [18:56:54,156] POST http://127.0.0.1:8887/udp_control_led.php [HTTP/1.1 200 OK 6ms] [18:56:54,226] POST http://127.0.0.1:8887/udp_control_led.php [HTTP/1.1 200 OK 1ms] [18:56:54,274] POST http://127.0.0.1:8887/udp_control_led.php [HTTP/1.1 200 OK 2ms] mets ton pde pour vérifier mes assignements ip mask gateway sont comme ca pour moi // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 192,168,2,200 }; unsigned char gateway[] = { 192,168,2,2 }; unsigned char mask[] = {255,255,255,0};
unsigned int localPort = 80; // local port to listen on
void setup() { // start the Ethernet and UDP: Ethernet.begin(mac, ip, gateway, mask); Udp.begin(localPort); Serial.begin(9600);
}
|
|
|
|
|
Logged
|
|
|
|
|
Aix en Provence
Offline
Full Member
Karma: 0
Posts: 229
Arduino rocks
|
 |
« Reply #28 on: March 03, 2012, 03:13:07 pm » |
Merci pour ton aide Je suis sur un switch branché sur ma freebox. J'ai pingué => pas de Pb J'ai testé le fonctionnement proposé par ArtBotHack plus haut dans ce forum avec les pages php on.php et off.php et cela fonctionne très bien. Voici mon code : #include <SPI.h> // needed for Arduino versions later than 0018 #include <Ethernet.h> #include <Udp.h> // UDP library from: bjoern@cs.stanford.edu 12/30/2008 // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 192,168,0,49 }; unsigned char gateway[] = { 192,168,0,254 }; unsigned char mask[] = {255,255,255,0};
unsigned int localPort = 80; // local port to listen on // the next two variables are set when a packet is received byte remoteIp[4]; // holds received packet's originating IP unsigned int remotePort; // holds received packet's originating port // buffers for receiving and sending data char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet, char ReplyBuffer[] = "acknowledged"; // a string to send back void setup() { // start the Ethernet and UDP: Ethernet.begin(mac, ip, gateway, mask); Udp.begin(localPort); Serial.begin(9600); } void loop() { // if there's data available, read a packet int packetSize = Udp.available(); // note that this includes the UDP header if(packetSize) { packetSize = packetSize - 8; // subtract the 8 byte header Serial.print("Received packet of size "); Serial.println(packetSize); memset(packetBuffer, 0, UDP_TX_PACKET_MAX_SIZE); // read the packet into packetBufffer and get the senders IP addr and port number Udp.readPacket(packetBuffer,UDP_TX_PACKET_MAX_SIZE, remoteIp, remotePort); Serial.println("Contents:"); Serial.println(packetBuffer); analogWrite(9, atoi(packetBuffer)); //utiliser la valeur reçu pour allumer la led } delay(2); } je ne sais pas ce qui se passe.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 4
Posts: 831
|
 |
« Reply #29 on: March 03, 2012, 05:31:08 pm » |
je viens de m'amuser un peu en partant du script et rajoutant des trucs. essaye avec ce php sans utiliser le JS avec juste un input dans le fichier slider_led.php <?php if (isset($_POST['envoyer'])){ $valeur_led = $_POST["led1"]; // récupération de la valeur transmise en méthode POST $host="192.168.2.200"; // Adresse ip défini dans le code arduino $port=80; // Port défini dans le code arduino $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); socket_sendto($socket, $valeur_led , strlen($valeur_led), 0, $host, $port); socket_close($socket); } ?>
<!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>arduiboo - contrôle intensité LED</title> </head> <body> <form action="" method="POST"> Valeur led <input name="led1" type="text" value="<?php echo $valeur_led;?>"><br> <input name="envoyer" type="submit" value="envoyer"> </form> </body> </html>
|
|
|
|
|
Logged
|
|
|
|
|
|