meteo.ino

M5Stack Core (ESP32) — famille Basic / Gray (K001 / K002) · Fichier : meteo.ino · Langage : Arduino · Usage : Afficher la météo réelle sur l'écran du boîtier

Le boîtier devient un objet connecté utile : température et humidité réelles d'open-meteo, sans clé API, rafraîchies toutes les 10 minutes. L'extraction substring évite une bibliothèque JSON pour deux champs.

Matériel requis

Un M5Stack Core Basic/Gray (ESP32 dans un boîtier avec écran TFT 320×240, 3 boutons A/B/C, haut-parleur, micro SD, batterie 110 mAh). Un accès Wi-Fi 2,4 GHz.

Branchement

Aucun câblage. Vérifiez la portée du module dans sa carcasse métallique si le signal est faible.

Fonctionnement

HTTPClient empile TLS sur la pile Wi-Fi ; le JSON est gruyéré par indexOf/substring — suffisant pour deux scalaires. Le code d'erreur HTTP déclenche un écran rouge explicite. Dans l'Arduino IDE (paquet esp32), carte « M5Stack-Core-ESP32 » ; installez la bibliothèque « M5Stack » (ou M5Unified) via le gestionnaire, puis Téléverser.

Pour aller plus loin

Ajoutez les prévisions du lendemain, ou un pictogramme dessiné selon weather_code (soleil, pluie, neige).

meteo.ino

// Meteo via open-meteo (API sans cle) -> ecran. 1 rafraichissement / 10 min.
#include <M5Stack.h>
#include <WiFi.h>
#include <HTTPClient.h>

const char *SSID = "votre-wifi";
const char *CLE = "votre-cle";
const char *URL =
  "https://api.open-meteo.com/v1/forecast?latitude=48.85&longitude=2.35"
  "&current=temperature_2m,relative_humidity_2m,weather_code";

void setup() {
  M5.begin();
  Serial.begin(115200);
  WiFi.begin(SSID, CLE);
  while (WiFi.status() != WL_CONNECTED) { delay(300); Serial.print("."); }
  Serial.println(WiFi.localIP());
}

void loop() {
  HTTPClient http;
  http.begin(URL);
  if (http.GET() == HTTP_CODE_OK) {
    String j = http.getString();
    // Extraction minimale sans bibliotheque JSON :
    float t = j.substring(j.indexOf(""temperature_2m":") + 17).toFloat();
    int h = j.substring(j.indexOf(""relative_humidity_2m":") + 24).toInt();
    M5.Lcd.fillScreen(TFT_BLACK);
    M5.Lcd.setTextSize(4);
    M5.Lcd.setCursor(10, 40);
    M5.Lcd.printf("%4.1f C", t);
    M5.Lcd.setTextSize(2);
    M5.Lcd.setCursor(10, 130);
    M5.Lcd.printf("Humidite %d %%   %lus", h, millis() / 1000);
  } else {
    M5.Lcd.fillScreen(TFT_RED);
    M5.Lcd.setTextColor(TFT_WHITE);
    M5.Lcd.drawString("HTTP erreur — reseau ?", 20, 110, 2);
  }
  http.end();
  delay(600000);   // 10 min : l'API tolere, l'ecran aussi
}

← Retour à la fiche