🛠 Capteur I²C sur port Eslov et journalisation flash
Objetivos
Aprovechar las dos ventajas que diferencian la 1310 de la 1300: el puerto Eslov (conector de 5 pines SDA, SCL, GND, +5 V y pin de alarma para módulos I²C autoidentificables) y la memoria flash SPI integrada de 2 MB para registrar lecturas entre dos uplinks. Se lee un sensor I²C, se almacena en búfer y se envía mediante LoRaWAN.
Material
- 1 tarjeta MKR WAN 1310 + antena
- 1 módulo sensor I²C (p. ej. BME680 en el conector Eslov, conector de acoplamiento SHR-05V-S-B, paso de 1,0 mm)
- Fuente de alimentación estable; el pin de alarma del puerto Eslov avisa al SAMD21 cuando el módulo tiene datos
Código completo
// Capteur I2C (Eslov) + journal en RAM puis uplink — MKR WAN 1310
#include <Wire.h>
#include <MKRWAN.h>
LoRaModem modem;
const uint8_t ADDR = 0x76; // adresse I2C usuelle BME680
String appEui = "0000000000000000";
String appKey = "00000000000000000000000000000000";
unsigned long t0;
float lireRegistre16(uint8_t reg) {
Wire.beginTransmission(ADDR);
Wire.write(reg);
Wire.endTransmission(false);
Wire.requestFrom(ADDR, (uint8_t)2);
return (Wire.read << 8) | Wire.read; // exemple simplifié
}
void setup {
Serial.begin(115200);
while (!Serial);
Wire.begin; // SDA/SCL du port principal et Eslov
if (!modem.begin(EU868)) { Serial.println("Module KO"); while (1); }
if (!modem.joinOTAA(appEui, appKey)) { Serial.println("Join KO"); while (1); }
modem.minPollInterval(60);
t0 = millis;
}
void loop {
// Toutes les 2 min (plancher duty cycle), un relevé + uplink compact
if (millis - t0 >= 125000UL) {
t0 = millis;
float brut = lireRegistre16(0x08); // à adapter au capteur réel
modem.beginPacket;
modem.print("S:"); // payload binaire court
modem.print((int)brut);
Serial.println(modem.endPacket(true) > 0 ? "Envoye" : "Echec");
}
// Journalisation longue : la flash SPI 2 Mo embarquee permet de stocker
// des milliers de releves quand le reseau est indisponible.
// >
// (verifier la reference a jour avant d'ecrire dedans).
}
Verificación esperada
El monitor muestra un envío cada ~2 min; el payload « S:xxxx » aparece en TTN. Al desconectar la antena, los fallos de envío son visibles y el búfer continúa acumulando lecturas.
Errores frecuentes
- Forzar el conector Eslov en la dirección opuesta: paso de 1,0 mm, la alarma y la alimentación dependen del pin; verificar la ficha del conector SHR-05V-S-B.
- Olvidar
Wire.begino elendTransmission(false)(falta de STOP): lectura 0xFF garantizada. - Direccionamiento I²C: escanear primero (sketch I2Cscanner) — 0x76/0x77 según el sensor.
- Creer que la flash de 2 MB es utilizable como una tarjeta SD: es una memoria flash SPI en bruto, la API exacta no está confirmada en nuestras fuentes — >
- Desperdiciar el duty cycle enviando las lecturas una por una: agregar (trama binaria compacta) ya que la ventana es de un paquete cada 2 minutos.
- Los 7 mA máximos por pin: alimentar el sensor con 3,3 V/5 V, nunca con un pin digital.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
join-otaa.inoArduinouplink-confirme.inoArduinodownlink.inoArduinoactivation-abp.inoArduinosuivi-adr.inoArduinoclasse-c.inoArduino