← Le Vaisseau
Chapitre 5 / 9

Domotique ESP32

Meshtastic LoRa — communication résiliente sans internet ni GSM

Meshtastic LoRa · 2–5 km sans internet Dôme voisin Dôme voisin ESP32 + sondes
Réseau mesh LoRa entre dômes — Ambassades Web3 reliées sans infrastructure

Algorithme de régulation unique (ESP32)

Un seul programme Arduino C++ gère la ventilation, la protection de la batterie et la télémétrie LoRa.

#include <DHT.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// Configuration des broches
#define DHTPIN 4
#define DHTTYPE DHT22
#define ONE_WIRE_BUS 5
#define FAN_PIN 12
#define HEATING_PAD_PIN 13
#define BATTERY_VOLTAGE_PIN 34

// Seuils de régulation
const float HUMIDITY_THRESHOLD = 65.0;          // Seuil d'activation ventilateur (%)
const float BATTERY_HEATING_LIMIT = 15.0;       // Température de survie batterie (°C)
const float BATTERY_VOLTAGE_MIN_HEATING = 13.4; // Tension d'autorisation chauffage (V)

DHT dht(DHTPIN, DHTTYPE);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void sendMeshtastic(String text) {
  Serial.println("LoRa Send: " + text);
}

float readBatteryVoltage() {
  int raw = analogRead(BATTERY_VOLTAGE_PIN);
  return (raw * 3.3 / 4095.0) * 5.0; // À étalonner selon votre pont diviseur
}

void setup() {
  Serial.begin(115200);
  dht.begin();
  sensors.begin();
  pinMode(FAN_PIN, OUTPUT);
  pinMode(HEATING_PAD_PIN, OUTPUT);
  digitalWrite(FAN_PIN, LOW);
  digitalWrite(HEATING_PAD_PIN, LOW);
}

void loop() {
  float h = dht.readHumidity();
  float t_air = dht.readTemperature();
  sensors.requestTemperatures();
  float t_pierres = sensors.getTempCByIndex(0); // masse thermique sol
  float t_bat = sensors.getTempCByIndex(1);     // caisson batterie
  float v_bat = readBatteryVoltage();

  // 1. Régulation de la ventilation forcée
  digitalWrite(FAN_PIN, h > HUMIDITY_THRESHOLD ? HIGH : LOW);

  // 2. Chauffage de la batterie sur surplus solaire (dumping)
  bool chauffe = (t_bat < BATTERY_HEATING_LIMIT) && (v_bat > BATTERY_VOLTAGE_MIN_HEATING);
  digitalWrite(HEATING_PAD_PIN, chauffe ? HIGH : LOW);

  // 3. Alerte de sécurité critique
  if (t_bat < 5.0) {
    sendMeshtastic("ALERTE : Batterie froide (" + String(t_bat) + "C). Charge suspendue !");
  }

  // 4. Télémétrie périodique (toutes les 10 minutes)
  String msg = "Air:" + String(t_air) + "C|Stones:" + String(t_pierres) +
               "C|Bat:" + String(t_bat) + "C|Hum:" + String(h) + "%|Vbat:" + String(v_bat) + "V";
  sendMeshtastic(msg);
  delay(600000);
}

⚡ Extension — réseau mesh

Le cœur thermique du dôme est traité dans un chapitre dédié — voir Le Poêle Dragon.

Topologie réseau d'un village de dômes

Avec le protocole B.A.T.M.A.N., il n'y a pas de routeur « maître » : chaque dôme qui rejoint le village renforce la portée et la résilience du WiFi mesh local. Le LoRa Meshtastic prend le relais longue portée si le backbone internet (fibre/4G) est coupé.

Backbone Internet (optionnel) WiFi Mesh B.A.T.M.A.N. LoRa Meshtastic
Topologie réseau d'un village de dômes — mesh WiFi courte portée + LoRa longue portée, résilient sans routeur maître