Bonjour, après de longue recherche, j'ai trouvé une librairie pour envoyer des messages UDP. J'en ai besoin pour envoyer l'état de l'arduino par message XAP sur le réseau.
Ca marche! mais pas longtemps... :-/
L'arduino envoi 13 messages puis silence complet. Après un reset il repart pour 13 messages. Si je diminue le message à envoyer j'arrive à envoyer 14 messages.
Je pense à un problème de mémoire qui se remplit mais je ne sais pas comment afficher la quantité de mémoire utilisée.
Je précise tout de même qu'il s'agit de mon premier projet donc c'est sans doute une broutille.
Voici le code:
#include <Ethernet.h>
#include <UdpString.h>
#include <WString.h>
/* UdpSendString.pde: Example how to send packets over UDP using the String library
* to check for received packets on Unix-ish setup, execute:
* sudo tcpdump -A -ien0 "udp port 8000"
* bjoern@cs.stanford.edu 12/30/2008 */
/* ETHERNET CONFIGURATION
* ARDUINO: set MAC, IP address of Ethernet shield, its gateway,
* and local port to listen on for incoming packets */
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //MAC address to use
byte ip[] = { 192, 168, 10, 177 }; // Arduino's IP address
byte gw[] = { 192, 168, 10, 139 }; // Gateway IP address
int localPort = 8888; //local port to listen on
/* TARGET: set this to IP/Port of computer that will receive
* UDP messages from Arduino */
byte targetIp[] = { 192, 168, 10, 78};
int targetPort = 3639;
/* Strings hold the packets we want to send */
String asciiString;
void setup() {
Ethernet.begin(mac,ip,gw);
UdpString.begin(localPort);
asciiString = "xap-hbeat\n{\nv=13\nhop=1\nuid=FF.3C05:00\nclass=xap-hbeat.alive\nsource=laser.arduino.first\ninterval=60\nport=32772\n}\n";
}
void loop() {
// send a normal, zero-terminated string.
UdpString.sendPacket(asciiString,targetIp,targetPort);
delay(3000);
}
Salut, content de trouver ici un membre de "toute la domotique".
Voici ou on peu télécharger la lib: http://bitbucket.org/bjoern/arduino_osc/src/14667490521f/libraries/
Hier soir j'ai testé avec la commande UdpRaw au lieu de Udp string en envoyant quelques bits au lieu d'une longue chaine et même au bout de 1000 envois ça ne bug pas. Le problème vient sans doute de la fonction UdpString. Je voudrais pourtant envoyer une chaine de caractère.
Le but étant de récupérer les messages d'état des entrées de l'arduino dans le hubXap qui redispatch aux différentes applications domotique. Je suis sur que le problème vient de l'arduino car après 1" envois, la led Tx ne clignote plus.
Je n'y suis pas loin, et je suis persuadé que ce code fini pourrait intéresser beaucoup de monde.
Pour l'instant je ne suis pas assez calé pour décortiquer la lib et trouver ce qui bouffe la mémoire.
Pour installer la lib, il faut simplement ajouter les fichiers nécessaires dans la lib ethernet officielle. (enfin, c'est ce que j'ai compris)
quel shield ethernet utilises-tu ?
un shield officiel (ou équivalent) qui gère en hardware le tcp/ip, ou un shield nécessitant une lib pour gérer le tcp/ip ?
je m'interesse depuis peu à XAP, mais surtout à xPL (j'ai trouvé davantage de ressources sur ce sujet). Les deux protocoles sont très proches.
Il me semble que Laser a fait quelque chose pour l'envoi d'un message XAP sur évênement (changement d'état d'une entrée).
Par contre, pour la réception et surtout le décodage d'un message XAP, il n'y a rien. Je pense qu'il faut utiliser la lib UDP et s'inspirer d'un exemple de décodage d'XML.
Pour le hubXAP/XPL, il n'en existe pas (encore?) sous la forme d'arduino. Mais je ne pense pas que ce soit nécessaire dans le cas d'un réseau XAP/XPL constitué uniquement d'arduino: le message étant envoyé sur une adresse broadcoast du routeur, celui-ci la renvoie à tous les arduino connectées. Le hub devient indispensable dès qu'il s'agit d'interconnecter différents dispositif hardware (arduino, RFXCom...) ou logiciels (module météo sur le net...) entre eux.
Il y a pas mal de personnes intéressées sur le forum "touteladomotique" (TouteLaDomotique.com : la maison connectée au meilleur prix) et qu'il y a moyen d'arriver à faire quelque chose de bien sur ce sujet.
Salut, un hub Xap n'est utile que si il y a plusieurs application sur la même machine. En fait il sert à partager le port 3639 UDP. Sans Hub un seul programme ouvrirait le port et dialoguerait. Les autres se mettraient en erreur.
Ca ne concerne donc pas l'arduino. Car nous avons un programme pour un port.
Concernant l'envoi et la réception des messages XAP j'ai réussi à faire pour l'instant 2 sketch séparés qui fonctionnent. J'en ai posté sur sur le forum de toute la domotique (lien posté par Gromain).
Je pense poster l'autre bientôt et surtout refaire des tests en regroupant les 2 dans un même sketch.
Gromain, je viens de lire ton idée de décodage XML, à mon avis ça peut être pas mal et surtout beaucoup plus propre que ce que j'ai fait pour mes tests actuels.
à mon avis, le code a peut-être plus sa place dans ce forum. La publication d'un code plus aboutit pourrait se faire également sur touteladomotique.
Je ne peux pas faire de test pour le moment, je n'ai pas de shield ethernet sous la main en ce moment et comme les beaux jours arrivent, on m'a un peu fixé d'autre priorité à la maison lol.
Je pourrais passer par la liaison série, mais je ne sais pas trop comment faire pour recevoir une commande d'un hub XAP par ce canal.