Go Down

Topic: Station météo et communication avec Xbee. (Read 421 times) previous topic - next topic

Zgybze

Jun 01, 2016, 12:05 pm Last Edit: Jun 08, 2016, 09:57 am by Zgybze
Bonjour à tous

Je suis nouveau dans la communauté Arduino et novice en informatique (surtout en code  :) ) et j'aurai besoin de votre aide...

Le projet :
Je vous explique le projet pour commencer. Je voudrais créer une station météo avec deux Arduinos : le premier récupèrera les données des capteurs et les enverra au second qui les stockera sur carte SD (avec horodatage). En soit, assez simple...

Le matériel  :
- 2 Arduino Uno
- 2 shields Xbee
- 2 Xbee
- 1 Sparkfun Weather Shield
- 1 Sparkfun Weather meters
- 1 Adafruit data logging shield
La liste n'est pas exaustive mais le principale y est !

Logiciels :
- PC sous windows XP Pro SP3
- IDE 1.6.1

Ce que j'arrive à faire :
J'arrive à écrire sur la carte SD, le problème n'est pas là.
J'ai aussi réussi à faire communiquer les deux Arduino sur un programme très simple, enfin non deux du coup.

Arduino emetteur
Code: [Select]
byte var1 ;
unsigned int var2, var3;

void setup() {
  Serial.begin(9600);
  
  var1, var2, var3 = 0;
  
}

void loop() {
  var1 += 1;
  var2 += 10;
  var3 += 100;
  Serial.print(var1);
  Serial.print(',');
  Serial.print(var2);
  Serial.print(',');
  Serial.print(var3);
  Serial.print("\n");
  delay(1000);
}


Arduino récepteur :
Code: [Select]
void setup() {
  Serial.begin(9600);
  Serial.flush();
}

void loop() {
  int varr1 = 0, varr2 = 0, varr3 = 0;
  while (Serial.available() > 0) {
    int varr1 = Serial.parseInt();
    int varr2 = Serial.parseInt();
    int varr3 = Serial.parseInt();
    if (Serial.read() == '\n') {
      Serial.print("Varr1 =");
      Serial.println(varr1);
      Serial.print("Varr2 =");
      Serial.println(varr2);
      Serial.print("Varr3 =");
      Serial.println(varr3);
    }
  }
}

Jusque là, tout va bien :
- les deux shield Xbee avec la config des jumpers en mode "Comm"
- ASSOC clignotte sur les deux
- RSSI est alumé sur les deux
- L'arduino récepteur reçoit les nombres et les envoie par sérial (je les vois avec le moniteur série).

Le problème :
Après tout ca vous devez vous demander où est mon problème... Désolé si j'en ai mis trop mais je voulais être sur d'être bien compris :)
Lorsque j'essaie d'établir une communication qui est plus adaptée avec mon usage, ca ne fonctionne plus... et je ne comprends pas du tout d'où ca peut venir.

Arduino emetteur : le code est fourni par Sparkfun, je l'ai à peine modifié (juste mis en commentaire le niveau de batterie vu que pour l'instant j'en ai pas !).
Arduino récepteur :
Code: [Select]
void setup() {
  Serial.begin(9600);
  Serial.flush();
}

void loop() {
  while (Serial.available() > 0) {
    int winddir = Serial.parseInt();
    int windspeedmph = Serial.parseInt();
    int windgustmph = Serial.parseInt();
    int windgustdir = Serial.parseInt();
    int windspdmph_avg2m = Serial.parseInt();
    int winddir_avg2m = Serial.parseInt();
    int windgustmph_10m = Serial.parseInt();
    int windgustdir_10m = Serial.parseInt();
    int humidity = Serial.parseInt();
    int tempf = Serial.parseInt();
    int rainin = Serial.parseInt();
    int dailyrainin = Serial.parseInt();
    int pressure = Serial.parseInt();
    int light_lvl = Serial.parseInt();
    if (Serial.read() == '\n') {
      Serial.print("winddir =");
      Serial.println(winddir);
      Serial.print("windspeedmph =");
      Serial.println(windspeedmph);
      Serial.print("windgustmph =");
      Serial.println(windgustmph);
      Serial.print("windgustdir =");
      Serial.println(windgustdir);
      Serial.print("windspdmph_avg2m =");
      Serial.println(windspdmph_avg2m, 1);
      Serial.print("winddir_avg2m =");
      Serial.println(winddir_avg2m);
      Serial.print("windgustmph_10m =");
      Serial.println(windgustmph_10m, 1);
      Serial.print("windgustdir_10m =");
      Serial.println(windgustdir_10m);
      Serial.print("humidity =");
      Serial.println(humidity);
      Serial.print("tempf =");
      Serial.println(tempf);
      Serial.print("rainin =");
      Serial.println(rainin);
      Serial.print("dailyrainin =");
      Serial.println(dailyrainin);
      Serial.print("pressure =");
      Serial.println(pressure);
      Serial.print("light_lvl =");
      Serial.println(light_lvl);
    }
  }
}

Et là plus rien ne vas  >:(
Lorsque les jumpers sotn en mode "Comm" :
- ASSOC clignotte des deux côtés
- RSSI n'est alumé que sur le récepteur (branché au PC)
- Je n'ai aucune information affichée sur le moniteur sérial du récepteur.

Et si je mets le récepteur en mode "programmation" avec les jumpers les 2 RSSI s'alument, mais je n'ai toujours aucune donnée vu que le récepteur est pas en radio !

Si quelqu'un a une idée du problème je suis preneur  :smiley-confuse: Et même si quelqu'un qui a le matériel (pas forcément le weather shield, au pire les données valent rien dire !) pouvait essayer sur le sien, histoire de voir si c'est un bug...

Merci d'avance pour votre précieuse aide !

Zgybze

Bonjour à tous

J'ai continué les expérimentations et j'ai du nouveau... mais ca ne m'aide pas du tout.

Je suis parti des programmes qui fonctionnent très bien (ceux qui sont décrits plus haut). J'ai ajouté morceaux par morceaux le code émetteur de ma station météo dans le petit programme émetteur en vérifiant à chaque fois si le RSSI des deux Xbee Shield restent allumés et je suis arrivé au bout sans problème. J'en déduis donc que le problème vient du code du récepteur...

J'ai essayé de faire la même chose avec le code du récepteur mais j'ai pas pu aller bien loin, très rapidement les divers programmes du ... programme (hum il doit y avoir un autre terme pour l'un des deux, parce que là ca fait Inception ^^) élaboré par Sparkfun font appels les uns aux autres et c'est impossible de les séparer. Donc j'ai rapidement dû faire un copié / collé du reste et là miracle, je vois les deux RSSI allumés et des infos qui remontent sur mon moniteur série du récepteur ! Sauf que mon bonheur a été de courte durée car les valeurs ne correspondent à rien (la direction du vent devrait aller de 0 à 360° alors que la valeur devait varier de 0 à 3400 ou un truc du genre...) et, au lieu d'avoir une remontée toutes les secondes j'en ai une toutes les 7 ou 8 secondes, avec le RSSI de l'émetteur qui clignote avec la même fréquence...

Là j'en arrive au moment où je me dis que c'est un bug lors de la compilation ou un truc du genre... parce que mon erreur je la vois pas  :smiley-confuse:

Zgybze

Edit du premier post : je m'étais trompé de lien pour le programme de SparkFun.

Go Up