Merci pour vos réponses!
Je poste demain soir mon code, car je suis en déplacement et je n'est pas pris mon code avec moi.
bricoleau:
Salut camarade
Je pense qu'on est en train de faire un peu la même chose, chacun de son côté.
Qu'est-ce qui te fait dire que la trame n'est pas reçue ?
Ce serait possible de voir ton code ?
Pour moi la trame n'ai pas reçu car la led bleu ne clignote pas et je ne reçois pas ma commande dans le debug de l'ide.
Ton projet est a quel statut? Si le mien te plait je suis pret a bossé a deux sans problème et de se repartir les taches.
Demain je t’envoie un lien de la partie web.
B@tto:
Salut,
logiquement, tant que tu ne vide pas le buffer il n'y a pas de raison qu'il se vide tout seul ...
L'erreur vient à mon avis tout simplement de l'UDP : la base de l'UDP c'est justement de
n'implémenter aucun contrôle. J'envois et je ne sais pas si c'est arrivé ou pas.
Contrairement au TCP qui lui établi un vrai protocole de dialogue : établissement d'une connexion envoi de donnée,
accusé de réception, si pas d'accusé je renvois ... C'est bien pour ça que mis à part des
applications bien précises (jeu en ligne notamment) c'est le TCP qui prévaut.
C'est bien ce qu'il me semblait.
TribesTom:
Salut,
Tu pourrais mettre ton code et un détail tu la trame udp reçue ?
Ça pourrais aider.
Voila le principe de fonctionnement de mon code:
- J'instancie
- dans le setup
- je connecte la carte wifi au reseau local
- je stop la connexion udp Udp.stop();
- j'initialise Udp.begin(localPort);
- dans le loop
- je controle si il y a des paquets reçu (si ma trame a une correspondance => action)
- [...Ici des mesures de sondes a intervalle regulier...]
- connexion client pour envois de données dans une bd MYSQL (traitement via php) et stop de la connexion client.
- // Fin du loop
Il y a peut être besoin d'un flush pour l'udp a un endroit ou un autre?
Pour ce qui ai de la trame voila ce que j'utilise comme code: (un bout de code qui traine dans le pc)
// read packet
int packetSize = Udp.parsePacket();
if(packetSize)
{
// subtract the 8 byte header
packetSize = packetSize - 8;
memset(packetBuffer, 0, UDP_TX_PACKET_MAX_SIZE);
// read packet into packetBufffer and get senders IP addr and port
Udp.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE);
//parse packetBuffer
char *record = packetBuffer;
char *l, *i, *v, *f, *ss, *mm, *hh, *w, *d, *m, *y;
// First strtok iteration find function to switch
l = strtok_r(record,",",&i);
to = atoi(l);
// strtok iteration 2
v = strtok_r(NULL,",",&i);
val = atoi(v);
// strtok iteration 3
f = strtok_r(NULL,",",&i);
func = atoi(f);
ss = strtok_r(NULL,",",&i);
sec = atoi(ss);
mm = strtok_r(NULL,",",&i);
min = atoi(mm);
hh = strtok_r(NULL,",",&i);
hour = atoi(hh);
w = strtok_r(NULL,",",&i);
date = atoi(w);
m = strtok_r(NULL,",",&i);
month = atoi(m);
d = strtok_r(NULL,",",&i);
day = atoi(d);
Serial.print("function:");
Serial.println(func);
Serial.print("to:");
Serial.println(to);
Serial.print("Value:");
Serial.println(val);
//Switch function
switch (func) {
//LED CHANNEL VALUES
case 1:
if ( to == 1 )
{
EEPROM.write(eled1,val);
c1 = val;
}
else if ( to == 2 )
{
EEPROM.write(eled2,val);
c2 = val;
}
else if ( to == 3 )
{
EEPROM.write(eled3,val);
c3 = val;
}
restoreLed();
break;
Sinon juste pour info:
- carte wifi a jour.
- carte arduino mis a jour il y a 1 an environ.
- ide 1.0.5
D'ailleurs j'ai testé la version de l'ide 1.0.6 et l'udp ne fonctionnait plus du tout, meme en utilisant l'une de mes premiere source qui fonctionnait tres bien sous ide 1.0.5
J'ai pourtant basculé tout mes Serial.println(""); par Serial.println(F(""));
D'ailleurs je comprend pas que dans les librairies "Serial.println(F(""));" ne soit pas utilisé d'office pour libéré la flash.