Bonjour J-M-L,
(Je répond à votre dernier message avant même d'avoir étudier les dernieres propositions. Je fais ca de suite après)
Selon la documentation de The Thing Network, les données doivent être envoyées en bytes
To send data back and forth over The Things Network you’ll need to use bytes.
Du côté serveeur, les données envoyées sont visible depuis la console. Mais c'est inlisible:
62613A342E33312C74653A323035382C70723A2D31323830312C616C3A34323430302C68753A333430302C6C753A20373836
Pour rendre ceci lisible, et surtout pour pouvoir m'assurer que les données sont corectement envoyé, dans la console, on peut ajouter du cote qui va traiter les données reçues. J'ai donc ajouté ce code qui ca me permettre d'avoir (et de voir) des noms de variables et des valeurs.
function Decoder(bytes, port) {
// if (port === 1) decoded.led = bytes[0];
var str=String.fromCharCode.apply(null,bytes);
var a = JSON.parse(str);
var name;
var value;
for (var attribute in a)
{
name = attribute;
value = a[attribute];
}
return{
sensor:name,
val:value
};
//var val1=(bytes[0] << 8) | bytes[1];
//var val2=(bytes[2] << 8) | bytes[3];
//return{
// val1:val1 / 100,
// val2:val2 / 100
//}
}
Le truc, c'est que j'envoie mes données sous le format json, qui en soit n'est pas une bonne idée, car les { et les " prennent de bits. Vu qu'il faut que le paquet à envoyer, je vais envoyer mes données sous ce format
ba:4.30,te:2075,pr:-12958,al:42400,hu:3380,lu:1009
Je modifierai mon code, dans la console, plus tard, pour qu'il traite les donnée reçues. Mais pour le moment, ceci n'est pas un souci....
Le challenge, ce que je souhaiterais faire comme il le faut, et surtout comprendre, c'est d'empiler les valeurs de mes capteurs, comme indiqué plus haut, dans la variable
uint8_t mydata[64];
C'est le contenu de cette variable qui va être envoyé, si je suis mon exemple
LMIC_setTxData2
Dans l'exemple, lui il se content juste d'envoyer Hello Word:
//Serial.print("ready to send: ");
strcpy((char *) mydata,"{\"Hello\":\"World\"}");
LMIC_setTxData2(1, mydata, strlen((char *)mydata), 0);
Moi je dois envoyer des valeurs....
Alors pour cela, j'ai cette boucle (et merci J-M-L) qui vient de l'exercice sur des structures
Je peux très très bien afficher (Serial.println) les résultat sous cette forme
ba:4.30,te:2075,pr:-12958,al:42400,hu:3380,lu:1009
Je modifie
Mon challenge, et mes lacunes me font défaut, je dois empiler des char dans 'mydata' et tout doit être des bytes.
J'ai fait ceci, mais je vais modifier ceci en fonction de votre dernières proposition. J'attaque ca maintenant...
sprintln(F("\nValeurs des capteurs actifs"),2);
sprintln(F("---------------------------------------"),2);
sprint(F("Nombre de capteurs: "),2);
sprintln(nbMaxCapteurs,2);
sprint(F("Nombre de capteurs actifs: "),2);
sprintln(nbCapteurActif,2);
sprint(F("Valeurs:\t"),2);
//Serial.print(F("{"));
// EMPILE LES VALEURS MESUREES DE MES CAPTEURS DANS mydata
for (byte i = 0; i < nbMaxCapteurs; i++) {
if (mesCapteur[i].actif) { // si le capteur n'est pas actif on n'imprime pas
if(i==0)
{
strcpy((char *) mydata,mesCapteur[i].nomDuCapteur);
strcat((char *) mydata,":");
strcat((char *) mydata,mesMesures[i][mesCapteur[i].idDuCapteur].valeur);
}
else
{
strcat((char *) mydata,mesCapteur[i].nomDuCapteur);
strcat((char *) mydata,":");
strcat((char *) mydata,mesMesures[i][mesCapteur[i].idDuCapteur].valeur);
}
if (i < nbCapteurActif)
{
strcat((char *) mydata,",");
}
Serial.print(F("Taille de mydata: ")); Serial.println(sizeof(mydata));
// AFFICHE ICI LES VALEURS DES CAPTEURS SEPARE PAR DES VIRGULES SAUF POUR LE DERNIER
sprint(mesCapteur[i].nomDuCapteur,2);
sprint(F(":"),2);
sprint(mesMesures[i][mesCapteur[i].idDuCapteur].valeur,2);
if (i < nbCapteurActif) sprint(F(","),2);
}
}
sprintln(F("\n"),2);
Voilà, j'espère avoir bien répondu à la question 