🛠 Capteur I²C sur port Eslov et journalisation flash
Objectifs
Exploiter les deux atouts qui différencient la 1310 de la 1300 : le port Eslov (connecteur 5 broches SDA, SCL, GND, +5 V et broche alarme pour modules I²C auto-identifiables) et la flash SPI embarquée de 2 Mo pour journaliser des relevés entre deux uplinks. On lit un capteur I²C, on met en tampon, puis on envoie par LoRaWAN.
Matériel
- 1 carte MKR WAN 1310 + antenne
- 1 module capteur I²C (ex. BME680 sur connecteur Eslov, connecteur d'accouplement SHR-05V-S-B, pas de 1,0 mm)
- Alimentation stable ; la broche alarme du port Eslov prévient le SAMD21 quand le module a des données
Code complet
// 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 embarquée permet de stocker
// des milliers de releves quand le réseau est indisponible.
// >
// (vérifier la reference à jour avant d'écrire dedans).
}
Vérification attendue
Le moniteur affiche un envoi toutes les ~2 min ; le payload « S:xxxx » apparaît sur TTN. En débranchant l'antenne, les échecs d'envoi sont visibles et le tampon continue d'accumuler les relevés.
Erreurs fréquentes
- Forcer le connecteur Eslov dans l'autre sens : pas de 1,0 mm, l'alarme et l'alimentation sont broche-dépendantes ; vérifier la fiche du connecteur SHR-05V-S-B.
- Oublier
Wire.beginou leendTransmission(false)(STOP manquant) : lecture 0xFF garantie. - Adressage I²C : scanner d'abord (sketch I2Cscanner) — 0x76/0x77 selon le capteur.
- Croire la flash de 2 Mo utilisable comme une carte SD : c'est une flash SPI brute, l'API exacte n'est pas confirmée dans nos sources — >
- Gaspiller le duty cycle avec des releves envoyées une par une : agréger (trame binaire compacte) puisque la fenêtre est d'un paquet par 2 minutes.
- Les 7 mA max par broche : alimenter le capteur par 3,3 V/5 V, jamais par une broche digitale.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
join-otaa.inoArduinouplink-confirme.inoArduinodownlink.inoArduinoactivation-abp.inoArduinosuivi-adr.inoArduinoclasse-c.inoArduino