meteo.ino
La carcasa se vuelve un objeto conectado útil: temperatura y humedad reales de open-meteo, sin clave API, refrescadas cada 10 minutos. La extracción substring evita una librería JSON para dos campos.
Hardware necesario
Un M5Stack Core Basic/Gray (ESP32 en carcasa con TFT de 320×240, botones A/B/C, altavoz, ranura microSD, batería de 110 mAh). Un acceso Wi-Fi 2,4 GHz.
Cableado
Sin cableado. Verifique el alcance del módulo dentro de su carcasa metálica si la señal es débil.
Funcionamiento
HTTPClient apila TLS sobre la pila Wi-Fi; el JSON se saca con indexOf/substring, suficiente para dos escalares. El código de error HTTP dispara una pantalla roja explícita. En el Arduino IDE (paquete esp32), placa « M5Stack-Core-ESP32 »; instale la biblioteca « M5Stack » (o M5Unified) desde el gestor y suba.
Para ir más lejos
Añada las previsiones del día siguiente, o un pictograma dibujado según weather_code (sol, lluvia, nieve).
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"
"¤t=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
}