🛠 Tableau de bord MQTT temps réel sur l'écran

M5Stack Core (ESP32) — familia Basic / Gray (K001 / K002) · avance · Schéma : IMG-m5stack-core-esp32-avance-3-m5stack-core-esp32-mqtt-dashboard.svg — M5Stack Core affichant un tableau de bord (température, batterie, statut) connecté par Wi-Fi à un courtier MQTT, autres capteurs publiant vers le même courtier

Objetivos

Material

Código completo

#include <M5Unified.h>
#include <WiFi.h>
#include <PubSubClient.h>

const char* SSID = "VOTRE_WIFI";
const char* PASS = "VOTRE_MDP";
const char* BROKER = "192.168.1.50";   // Mosquitto sur le reseau
WiFiClient esp;
PubSubClient mqtt(esp);
float temperature = 0; float humidite = 0;
bool connecte = false;

void callback(char* topic, byte* payload, unsigned int n) {
  char buf[64]; unsigned int l = (n < 63) ? n : 63;
  memcpy(buf, payload, l); buf[l] = 0;
  if (!strcmp(topic, "salon/temperature")) temperature = atof(buf);
  if (!strcmp(topic, "salon/humidite"))    humidite = atof(buf);
}

void setup {
  Serial.begin(115200);
  auto cfg = M5.config;
  M5.begin(cfg);
  WiFi.begin(SSID, PASS);
  while (WiFi.status != WL_CONNECTED) { delay(300); Serial.print("."); }
  mqtt.setServer(BROKER, 1883);
  mqtt.setCallback(callback);
  M5.Display.setTextSize(2);
}

void publierEtat {
  char b[16];
  snprintf(b, sizeof(b), "%d", M5.Power.getBatteryLevel);
  mqtt.publish("m5core/batterie", (const uint8_t*)b, strlen(b));
}

void dessiner {
  M5.Display.fillScreen(TFT_BLACK);
  M5.Display.fillCircle(305, 15, 8, connecte ? TFT_GREEN : TFT_RED);
  M5.Display.setTextColor(TFT_CYAN);
  M5.Display.setCursor(10, 10);  M5.Display.printf("T : %5.1f C", temperature);
  M5.Display.setCursor(10, 45);  M5.Display.printf("H : %5.1f %%", humidite);
  M5.Display.setTextColor(TFT_WHITE);
  M5.Display.setCursor(10, 80);  M5.Display.printf("Bat : %d %%", M5.Power.getBatteryLevel);
  M5.Display.drawRect(10, 110, 300, 22, TFT_WHITE);
  M5.Display.fillRect(12, 112, 296 * constrain(temperature, 0, 40) / 40, 18, TFT_ORANGE);
}

uint32_t tPrec = 0;
void loop {
  if (!mqtt.connected) {
    connecte = mqtt.connect("m5core-dashboard");
    if (connecte) mqtt.subscribe("salon/#");
  }
  mqtt.loop;
  if (millis - tPrec > 2000) { tPrec = millis; publierEtat; dessiner; }
  vTaskDelay(10 / portTICK_PERIOD_MS);
}

Verificación esperada

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales