🛠 Envoyer des données capteur vers un serveur (uplink)

Arduino MKR WAN 1300 · intermediaire · Schéma : IMG-mkr-wan-1300-intermediaire-2-mkrwan-uplink-lorawan.svg — capteur BME280 en I2C et uplink binaire vers le serveur réseau

Objectifs

Équivalent LoRaWAN du « client HTTP GET » : envoyer des données vers un serveur. On construit une trame binaire compacte (température/pression d'un BME280 en I²C), on l'envoie en uplink confirmé, et on lit RSSI/SNR — l'équivalent radio d'un code HTTP.

Matériel

Code complet

#include <MKRWAN.h>
#include <Wire.h>
#include <Adafruit_BME280.h>

LoRaModem modem;
Adafruit_BME280 bme;

void setup {
  Serial.begin(115200);
  if (!bme.begin(0x76)) { Serial.println("BME280 absent"); while (1) {} }
  if (!modem.begin(EU868)) while (1) {}
  if (!modem.joinOTAA("0080000000000001",
                      "00112233445566778899AABBCCDDEEFF")) while (1) {}
  modem.minPollInterval(60);
}

void loop {
  modem.beginPacket;
  int16_t t = (int16_t)(bme.readTemperature * 100);  // 0,01 degC
  uint32_t p = (uint32_t)bme.readPressure;           // Pa
  modem.write((uint8_t *)&t, 2);
  modem.write((uint8_t *)&p, 4);
  if (modem.endPacket(true) > 0) {                     // confirme : attend ACK
    Serial.print("OK rssi="); Serial.print(modem.readRSSI);
    Serial.print(" snr="); Serial.println(modem.readSNR);
  } else {
    Serial.println("Envoi échoue : duty cycle ou pas de gateway");
  }
  delay(120000);   // throttle firmware : 1 msg / 2 min max
}

Vérification attendue

Le serveur (TTN) décode les 6 octets (température int16, pression uint32) ; la console affiche RSSI/SNR après chaque ACK. Une trame toutes les 2 minutes maximum.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels