meteo-lora.ino
Station météo autonome complète : le BME280 branché sur I2C fournit température, humidité et pression, la MKR WAN 1300 les diffuse en LoRa toutes les dix minutes. La trame compacte T;H;P tient en 20 octets, idéale pour un récepteur unique multi-stations.
Matériel requis
Une Arduino MKR WAN 1300 (microcontrôleur SAMD21, modem LoRa Semtech SX1272 point à point, pas de pile LoRaWAN embarquée, antenne 868/915 MHz). MKR WAN 1300, capteur BME280 I2C (adresse 0x76), batterie LiPo pour l'autonomie, seconde carte LoRa réceptrice.
Câblage
BME280 VCC→3,3 V, GND→GND, SDA→pin SDA, SCL→pin SCL du connecteur I2C de la MKR WAN.
Fonctionnement
Le croquis vérifie la présence du BME280 au démarrage, lit les trois grandeurs, les formate en une ligne point-virgule, et publie sans ACK pour économiser l'airtime et la batterie.
Exécution
Installez Arduino SAMD Boards et la bibliothèque MKRWAN, sélectionnez la carte, téléversez. Il faut DEUX cartes LoRa (deux MKR WAN 1300, ou une 1300 et une 1310) pour voir les échanges ; réglez le même plan de fréquences dans le code.
Variantes
Ajoutez l'ID de station en tête de trame pour mutualiser un récepteur, ou passez en binaire (5 octets) pour diviser l'airtime par quatre.
meteo-lora.ino
// Station meteo LoRa P2P : BME280 (I2C) -> MKR WAN 1300 -> recepteur.
#include <MKRWAN.h>
#include <Adafruit_BME280.h>
LoRaModem modem;
Adafruit_BME280 bme;
unsigned long dernier = 0;
void setup() {
Serial.begin(115200);
if (!modem.begin(EU868)) while (true);
modem.setFrequency(868.5);
if (!bme.begin(0x76)) {
Serial.println(F("BME280 absent (0x76)"));
while (true);
}
}
void loop() {
if (millis() - dernier < 600000) return; // 10 min
dernier = millis();
float t = bme.readTemperature();
float h = bme.readHumidity();
float p = bme.readPressure() / 100.0;
// Trame compacte : T;H;P avec 1 decimale
String trame = String(t, 1) + ";" + String(h, 1) + ";" + String(p, 1);
modem.beginPacket();
modem.print(trame);
if (modem.endPacket(false) > 0)
Serial.println("publie : " + trame);
else
Serial.println(F("emission KO"));
}