station meteo mkr1200

bonjour,
j’ai pris le modele de station meteo utiliser avec la
dans moniteur serie j’obtiens

#include <ArduinoLowPower.h>
#include <SigFox.h>
#include <Adafruit_HTU21DF.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <Adafruit_TSL2561_U.h>
#include "conversions.h"

// Set oneshot to false to trigger continuous mode when you finisched setting up the whole flow
int oneshot = true;

Adafruit_BMP280  bmp;
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_FLOAT, 12345);

#define STATUS_OK     0
#define STATUS_BMP_KO 1
#define STATUS_HTU_KO 2
#define STATUS_TSL_KO 4

/*
    ATTENTION - the structure we are going to send MUST
    be declared "packed" otherwise we'll get padding mismatch
    on the sent data - see http://www.catb.org/esr/structure-packing/#_structure_alignment_and_padding
    for more details
*/
typedef struct __attribute__ ((packed)) sigfox_message {
  uint8_t status;
  int16_t moduleTemperature;
  int16_t bmpTemperature;
  uint16_t bmpPressure;
  uint16_t htuHumidity;
  uint16_t tlsLight;
  uint8_t lastMessageStatus;
} SigfoxMessage;

// stub for message which will be sent
SigfoxMessage msg;

void setup() {

  if (oneshot == true) {
    // Wait for the serial
    Serial.begin(115200);
    while (!Serial) {}
  }

  if (!SigFox.begin()) {
    // Something is really wrong, try rebooting
    // Reboot is useful if we are powering the board using an unreliable power source
    // (eg. solar panels or other energy harvesting methods)
    reboot();
  }

  //Send module to standby until we need to send a message
  SigFox.end();

  if (oneshot == true) {
    // Enable debug prints and LED indication if we are testing
    SigFox.debug();
  }

  // Configure the sensors and populate the status field
  if (!bmp.begin()) {
    msg.status |= STATUS_BMP_KO;
  } else {
    Serial.println("BMP OK");
  }

  if (!htu.begin()) {
    msg.status |= STATUS_HTU_KO;
  } else {
    Serial.println("HTU OK");
  }

  if (!tsl.begin()) {
    msg.status |= STATUS_TSL_KO;
  } else {
    Serial.println("TLS OK");
    tsl.enableAutoRange(true);
    tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS);
  }
}

void loop() {
  // Every 15 minutes, read all the sensors and send them
  // Let's try to optimize the data format
  // Only use floats as intermediate representaion, don't send them directly

  sensors_event_t event;

  float pressure = bmp.readPressure();
  msg.bmpPressure = convertoFloatToUInt16(pressure, 200000);
  float temperature = bmp.readTemperature();
  msg.bmpTemperature = convertoFloatToInt16(temperature+5, 60, -60);

  tsl.getEvent(&event);
  if (event.light) {
    msg.tlsLight = convertoFloatToUInt16(event.light, 100000);
  }

  float humidity = htu.readHumidity();
  msg.htuHumidity = convertoFloatToUInt16(humidity, 110);

  // Start the module
  SigFox.begin();
  // Wait at least 30ms after first configuration (100ms before)
  delay(100);

  // We can only read the module temperature before SigFox.end()
  temperature = SigFox.internalTemperature();
  msg.moduleTemperature = convertoFloatToInt16(temperature+5, 60, -60);

  if (oneshot == true) {
    Serial.println("Pressure: " + String(pressure));
    Serial.println("External temperature: " + String(temperature));
    Serial.println("Internal temp: " + String(temperature));
    Serial.println("Light: " + String(event.light));
    Serial.println("Humidity: " + String(humidity));
  }

  // Clears all pending interrupts
  SigFox.status();
  delay(1);

  SigFox.beginPacket();
  SigFox.write((uint8_t*)&msg, 12);

  msg.lastMessageStatus = SigFox.endPacket();

  if (oneshot == true) {
    Serial.println("Status: " + String(msg.lastMessageStatus));
  }

  SigFox.end();

  if (oneshot == true) {
    // spin forever, so we can test that the backend is behaving correctly
    while (1) {}
  }

  //Sleep for 15 minutes
  LowPower.sleep(15 * 60 * 1000);
}

void reboot() {
  NVIC_SystemReset();
  while (1);
}

voila ce que ce code me sort sur le moniteur

HTU OK
TLS OK
Pressure: 0.00
External temperature: 17.00
Internal temp: 17.00
Light: 13.00
Humidity: 26.77
Status: 0

quand je les envois sur sigfox je les ai en bit 012212000000004c3e080000
je n’arrive pas a recupperer les vraie valeur
j’essaye ceci

Temperature::int:8 Internal_temp::int:8 Pressure::uint:16 Humidity::uint:16 light::uint:16

mais ca ne me sort pas les bonne valeur

pouvez vous m’aider merci

Bonsoir

quand je les envois sur sigfox je les ai en bit 012212000000004c3e080000

tu récupères en hexadécimal les données comme elles ont été déclarées dans la structure, c’est a dire :

 01      2212      0000     0000     4c3e    0800   00
 status  modtemp   bmpTemp  nmpPress htuHum  Light  lmStatus

mais le motif de décodage que tu définis dans la console Sigfgox, n’est pas cohérent avec la structure , avec ce motif Sigfox découpe les message comme cela :

01 22 1200 0000 004c (…et le reste est laissé de côté 3e080000)
Temp Inttemp Press Humi Light

Pour retrouver bien décodées les données il faut que le motif indiqué à Sigfox soit conforme à la structure envoyée sinon il ne peut ‘découper’ le message aux bons endroits

al1fch:
Bonsoir
tu récupères en hexadécima les données comme elles ont été déclarées dans la structure mais le motif de décodage que tu possèdes dans la console Sigfgox, n'est pas cohérent avec la structure, avec ce motif Sigfox découpe les message comme cela: 01 22 1200 0000 004c (.... et le reste est laissé de côté 3e080000) Temp Inttemp Press Humi Light Pour retrouver bien décodées les données il faut que le motif indiqué à Sigfox soit conforme à la structure envoyée sinon il ne peut 'découper' le message aux bons endroits

 01      2212      0000     0000     4c3e    0800   00

status  modtemp   bmpTemp  nmpPress htuHum  Light  lmStatus





ok merci 

donc je mets ceci dans sigfox 

Temperature :: int: 8 Internal_temp :: int: 8 Pressure :: uint: 16 Humidity :: uint: 16 light :: uint: 16 

mais ils me sort ceci comme donner 
Température: 1 
Internal_temp: 34 
Pression: 4608 
Humidité: 0 
lumière: 76

al1fch:
cela ne me semble pas correcte

voila comment est composée la structure envoyée , il faut indiquer à Sigfox de découper en suivant ce modèle !
structure.png

Autre piste :redefinir la structure selon tes besoins, c'est elle qui organise le message envoyé

structure.png

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.