Probleme communication UDP arduino/serveur APACHE

Bonjour a tous,

Je tente en ce moment de faire passer du udp entre un arduino et un serveur apache avec php.

Pour le moment le passage du serveur ( page php ) au arduino ce fait très bien en broadcast ou adresse spécifique, mais la ou sa na pas avancé c'est dans l'autre sens.. recevoir en udp par php ne semble pas fonctionné...

sur le serveur apache j'ai rajouter plusieur ligne listen 1234 ou listen 192.168.0.90:1234 mais rien n'y fait :s

l'ip apache : 192.168.0.90

l'ip arduino : 192.168.0.100

les deux relier par un µswitch

Voila mon code php :

$ft = stream_socket_client("udp://192.168.0.90:1234", $errno, $errstr);

if (!$ft) {
    echo "ERREUR : $errno - $errstr
\n";
} else {

    $recv = fread($ft,6);

    fclose($ft);
}

voici le code arudino qui sais, c'est peut être sa qui pèche.. ( sans les déclarations bien sur )

    Udp.beginPacket(ip2, localPort);
    Udp.write("aaaaaaaaa");
    Udp.endPacket();

Si vous avez des idées ou du code différent de celui la je suis preneur je sais pas pourquoi je suis pas venu vous demander avant j'ai eu envie de lutter seul mais la j'ai retourné la question dans tout les sens changé mile fois les ip les ports etc.. rien n'y fait..

Merci a vous

Skizo !

Bonsoir,

Tu devrais aller voir les exemples suivants : http://arduino.cc/en/Tutorial/UDPSendReceiveString et http://arduino.cc/en/Tutorial/UdpNtpClient icare

hum hum.. honnêtement je ne pense pas que ce sois coté arduino le problème mais plutôt coté php...

Merci quand même..

Comment s'exécute ton PHP ? Comme code d'une page Web ou lancé séparément ?

Le code PHP d'une page Web ne peut s'exécuter que sur requête de la page et pour un temps limite.

Ton process socket doit donc s'exécuter indépendemment d'Apache comme un process séparé. Par exemple script PHP lancé depuis la ligne de commande

Est-ce le cas ?

bonjour, sous quel forme est installé ton apache? easyphp sous windows? si c'est le cas, il y a une ligne a décommenter de mémoire.

alors c'est bien installer sous windows easy php et le programme php s’exécute bien par appel de la page web dans un fichier php séparé, j'ai pas trouver de ligne à dé commenté appart une ligne socket mais pas de udp..

merci de votre aide

skizoh: le programme php s’exécute bien par appel de la page web dans un fichier php séparé

Quand je dis séparé, c'est séparé d'Apache Prog a lancer en ligne de commande directement

Depuis une page web tu ne peut pas créer un serveur (listen/accept)

aaahh d'accord mais alors si c'est pas apache qui fait le php quel logiciel le fait? dans un .exe je mets la réception? ou en langage C au pire.. par ce que l'émission ça marche.

PHP et Apache c’est 2 choses différentes.

Tu crées mon-prog.php et tu l’exécutes avec php.exe

ahhhh ok ok merci je vais mettre sa en place et je te dit ce que ca donne merci encore :)

Salut tout le monde :)

un petit bien sympa qui peu peut être aider : http://blog.weeboo.net/tutoriel-arduino-ethernet-shield-controler-led-depuis-une-page-web/

Bon courage, Trigger

euhhh bon au début je voulais faire sa en .bat puis j’ai vue le lien de trigger et la c’est en .js… donc quel est le mieux? et pour l’un est l’autre je suppose qu’il n’y a pas de logiciel c’est une extension et du texte quoi ^^’

Merci de votre aide.

Le lien de trigger mélange du JS et du PHP. A la fin c'est du PHP qui ouvre une socket pour accéder à l'Arduino. J'ai pas tout compris le code JavaScript. Est-ce parce que ca utilise du JQuery mais je trouve la syntaxe bizarre.

Le JavaScript gère le slider dans la page Web. Quand l'utilisateur lâche le slider ca déclenche une requète POST vers un script PHP qui ouvre une socket UDP pour causer à l'Arduino.

Je trouve çà étrange comme façon de faire, pourquoi ne pas faire la requète directement vers l'Arduino ? De plus ce type de code utilise des sockets PHP qui comme cela a déjà été abordé 20000 fois n'est pas disponible sur un serveur de page perso ou mutualisé. Cela ne marche que sur un serveur dédié.

Note qu'il est immensément moins dangereux d'exposer une Arduino sur Internet que n'importe quel serveur sous n'importe quel OS. L'Arduino exécute un code en Flah ROM. Il est strictement impossible de prendre la main sur une Arduino quelque soit le type d'attaque envisagée, même si on sait que c'est une Arduino, car on ne peut pas télécharger du code à exécuter qui ne se trouve pas déjà dans la Flash.

moi aussi ça ma paru bien compliquer pour rien mais je peut le faire en coi alorS? en .bat c'est bien non? sauf que en html mon lien télécharge au lieu d’exécuter mais je vais trouver je pense

Je comprend pas le "en .bat"

Si tu beux dire que tu exécute php.exe mon-prog.php dans un fichier bat, pourquoi pas.

PHP est un langage de script/programmation générique. Il s'interface facilement avec Apache mais pas plus / pas moins que PERL ou Python ou C++. Et il peut être utilisé en dehors.

Donc si tu veux programmer un serveur TCP qui "listen" sur une socket, tu n'as pas le choix. Que tu l'écrives en Perl, Python, PHP ou C++, c'est en dehors d'Apache qu'il faut l'exécuter.

hum okok je serais tenter de le faire en python alors j'ai déjà fait un peut les base et j'ai trouver sa bien maniable, et oui les fichier.bat permet de faire des lancements de fichier comme çà.

Bon j'ai un souci les fichier .bat ne s’exécute pas depuis une page html apparemment trop compliquer :s A quel langage tu pensais pour faire le lien barbudor? j'aimerai ne pas avoir à installer d'autre logiciel comme python vue que c'est pour une page destiner à des ordinateurs XP un peu vieux je préfère rester léger :s

Je m'en sort pas et j'ai jusqu’à demain ça me rend fou :s

Merci de votre aide.

skizoh: Bon j'ai un souci les fichier .bat ne s’exécute pas depuis une page html apparemment trop compliquer :s

On ne se comprend pas. TU NE PEUX PAS FAIRE DE SERVEUR SOCKET QUELQUE SOIT LE LANGAGE EN TANT QUE SCRIPT DE PAGE WEB

Tout script appelé depuis Apache à une durée d'exécution maximale. Si tu la dépasses, Apache va tuer le thread pour éviter d'être coincé. Un script de page web est sensé : - traiter une requête - envoyer une réponse - se terminer

Donc c'est utilisable pour faire un client de base: - créer une socket - utiliser la socket - fermer la socket Le tout dans un temps déterminé.

Mais pas utilisable pour faire un serveur qui est essentiellement une boucle d'attente sur listen et accept.

Si tu veux faire du listen() / accept() il faut lancer cela en dehors de Apache Ouvrir une commande dos et exécuter php.exe mon-prog.php Et là ton prog est une boucle sans fin qui écoute et accepte les connexion.

Si ce programme là doit échanger avec quelque chose qui tourne dans le serveur Web, ca sera par des requêtes GET/POST.

Je sais pas si j'ai été clair cette fois :cold_sweat:

si si ^^ ne t’inquiète pas c'était déjà compris c'était le dos que j’avais pas compris comme moyen de faire le php.exe monrprog.php ^^ je voulais utilisé un prog en .bat mais sa passe pas en html donc je vais essayer en dos :) ça aurais été sur linux j'aurai fait du bash mais la sur windows je savais pas trop comment faire ca merci :)

Bon voila la solution que j’ai trouvée:

<?php exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "."C:\\WINDOWS\\system32\\cmd.exe /K"."C:\\www\\php-5\\php.exe C:\\www\\monsite\\page_spc\\site\\presence_module.php" ); return; ?>

sa ouvre cmd.exe et envoi la commande de dans.

merci barbudor je test demain si le udp fonctionne mais en tout cas le programme php c’est bien lancer :slight_smile: