🛠 Envoyer des données capteur vers un serveur (uplink)
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
- 1 Arduino MKR WAN 1300 (jointe OTAA réussie, voir tuto précédent)
- 1 capteur BME280 en I²C (broches SDA/SCL, 3,3 V)
- Bibliothèques MKRWAN + Adafruit BME280
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
- Payload texte trop verbeux : la charge utile LoRaWAN est minuscule, envoyer des octets binaires.
- Envois trop rapprochés : le firmware impose 1 message toutes les 2 minutes (règlementation européenne), non modifiable.
- Oublier le décodeur côté serveur : les octets bruts arrivent sans schéma.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
emission-p2p.inoArduinoreception-p2p.inoArduinoreglage-sp.inoArduinometeo-lora.inoArduinotrame-crc.inoArduinorelais-radio.inoArduino