🛠 Envoyer des données capteur vers un serveur (uplink)
Objetivos
Equivalente LoRaWAN del « cliente HTTP GET »: enviar datos a un servidor. Construimos una trama binaria compacta (temperatura/presión de un BME280 en I²C), la enviamos en uplink confirmado y leemos RSSI/SNR — el equivalente radio de un código HTTP.
Material
- 1 Arduino MKR WAN 1300 (unión OTAA exitosa, ver tutorial anterior)
- 1 sensor BME280 en I²C (pines SDA/SCL, 3,3 V)
- Bibliotecas MKRWAN + Adafruit BME280
Código completo
#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 echoue : duty cycle ou pas de gateway");
}
delay(120000); // throttle firmware : 1 msg / 2 min max
}
Verificación esperada
El servidor (TTN) decodifica los 6 bytes (temperatura int16, presión uint32); la consola muestra RSSI/SNR después de cada ACK. Una trama cada 2 minutos como máximo.
Errores frecuentes
- Payload de texto demasiado verboso: la carga útil LoRaWAN es mínima, enviar bytes binarios.
- Envíos demasiado cercanos: el firmware impone 1 mensaje cada 2 minutos (regulación europea), no modificable.
- Olvidar el decodificador en el lado del servidor: los bytes sin procesar llegan sin esquema.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
emission-p2p.inoArduinoreception-p2p.inoArduinoreglage-sp.inoArduinometeo-lora.inoArduinotrame-crc.inoArduinorelais-radio.inoArduino