Voici le code que tu peux utiliser.
Avec ça, je pourrai te connecter facilement à notre backend.
// pour transmettre 2 périodes / message :
// message de 8 bytes
typedef struct __attribute__ ((packed)) sigfox_wind_message {
int8_t speedMin[2];
int8_t speedAvg[2];
int8_t speedMax[2];
int8_t directionAvg[2];
} SigfoxWindMessage;
// /!\ avec ce format, il faut transmettre
// impérativement deux périodes de 5 minutes
// xxx[0] -> de T-10 à T-5 minutes
// xxx[1] -> de T-5 minutes à T
// T étant l'heure de transmission
// alternativement, pour transmettre 1 période / message :
// à la fréquence que vous voulez
// (maximum toute les 10 minutes)
// message de 4 bytes
typedef struct __attribute__ ((packed)) sigfox_wind_message {
int8_t speedMin;
int8_t speedAvg;
int8_t speedMax;
int8_t directionAvg;
} SigfoxWindMessage;
// pour l'encodage du vent sur 1 byte
// (code original du Pioupiou)
uint8_t encodeWindSpeed (float speedKmh) {
uint8_t encodedSpeed;
if (speedKmh < 10.) {
// 0 to 9.75 kmh : 0.25 km/h resolution
encodedSpeed = (uint8_t)(float)(speedKmh * 4. + 0.5);
} else if (speedKmh < 80.) {
// 10 to 79.5 kmh : 0.5 km/h resolution
encodedSpeed = (uint8_t)(float)(speedKmh * 2. + 0.5) + 20;
} else if (speedKmh < 120.) {
// 80 to 119 kmh : 1 km/h resolution
encodedSpeed = (uint8_t)(float)(speedKmh + 0.5) + 100;
} else if (speedKmh < 190.) {
// 120 to 188 kmh : 2 km/h resolution
encodedSpeed = (uint8_t)(float)(speedKmh / 2. + 0.5) + 160;
} else {
// 190 or + : out of range
encodedSpeed = 0xFF;
}
return encodedSpeed;
}
// pour l'encodage de la direction sur 1 byte
uint8_t encodeWindDirection (float direction) { // radians
direction = direction / M_PI * 180.; // radians to degrees
if (direction < 0.) direction += 360.; // -180-180 to 0-360+
// encode with 2° precision
// add 0.5 for rounding when converting from (float) to (int)
return (uint8_t)(float)(direction / 2. + 0.5);
}