Probleme communication UDP arduino/serveur APACHE

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 :slight_smile:

Salut tout le monde :slight_smile:

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 :slight_smile: ça aurais été sur linux j'aurai fait du bash mais la sur windows je savais pas trop comment faire ca merci :slight_smile:

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:

Bon.. le problème c'est que je reçois toujours pas les message udp :s fread socket_recvfrom rien n'y fait.. le programme bloque et ne fini même pas.. :s je commence à me décourager si quelqu'un pouvait me faire par d'une technique qu'il à réussi à mettre en place?

<?php
if (!extension_loaded('sockets')) {
    die('The sockets extension is not loaded.');
}

$socket = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
socket_bind($socket, "0.0.0.0", 8888);

echo "Va'z'y, balance la sauce !" . PHP_EOL;
while(1)
{
  $ret = socket_recvfrom( $socket, $buffer, 30, 0, $from, $port );
  echo "Reçu \"$buffer\" de la part de $from:$port" . PHP_EOL;
}
?>
/* Copié et modifié de UDPSendReceive.pde

#include <SPI.h>         // needed for Arduino versions later than 0018
#include <Ethernet.h>
#include <EthernetUdp.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 };

IPAddress ServerIp(192, 168, 168, 1);
unsigned int ServerPort = 8888;      // local port to listen on

// buffers for receiving and sending data
char  ReplyBuffer[30];       // a string to send back

// An EthernetUDP instance to let us send and receive packets over UDP
EthernetUDP Udp;

void setup() {
  // start the Ethernet and UDP:
  Ethernet.begin(mac);
  Serial.print("Arduino IP: ");
  Serial.println(Ethernet.localIP());

  Udp.begin(ServerPort);

  Serial.begin(9600);
  while( !Serial );
}

int compteur = 0;

void loop() 
{
  // prepare packet
  sprintf( ReplyBuffer, "Hello %d", ++compteur );
  // send a UDP packet
  Serial.println( ReplyBuffer );
  Udp.beginPacket(ServerIp, ServerPort);
  Udp.write(ReplyBuffer);
  Udp.endPacket();

  delay(5000);
}

Je teste des que possible merci beaucoup :slight_smile: