🛠 Se connecter au Wi-Fi et interroger une API HTTP

M5StickC Plus2 (M5Stack) — kit portable « stick » ESP32-PICO-V3-02 (SKU K016-P2) · intermediaire · Schéma : IMG-m5stack-stick-c-plus-2-intermediaire-3-m5stick-c2-wifi-http.svg — M5StickC Plus2 reliée par une onde Wi-Fi 2,4 GHz à un routeur puis à un serveur HTTP, l'écran affichant la température récupérée en JSON.

Objectifs

Connecter la M5StickC Plus2 à un réseau Wi-Fi 2,4 GHz (la puce ESP32-PICO-V3-02 n'accepte pas le 5 GHz ; l'antenne 3D de la v2 offre une meilleure portée que la v1) et interroger une API HTTP en GET avec la bibliothèque HTTPClient, puis afficher une valeur extraite du JSON.

Matériel

Code complet

// Wi-Fi 2.4 GHz + requête HTTP GET (reconnexion auto par minute)
#include <M5Unified.h>
#include <WiFi.h>
#include <HTTPClient.h>

const char* SSID = "VOTRE_WIFI_24GHZ";
const char* PASS = "motdepasse";
const char* URL  = "http://ip.jsontest.com/";   // renvoie {"ip": "..."}

void setup {
  auto cfg = M5.config;
  M5.begin(cfg);
  Serial.begin(115200);
  M5.Display.setRotation(1);
  M5.Display.setTextSize(1);
  M5.Display.setTextColor(TFT_WHITE, TFT_BLACK);
  M5.Display.printf("WiFi %s...\n", SSID);
  WiFi.mode(WIFI_STA);                  // station uniquement
  WiFi.begin(SSID, PASS);
  while (WiFi.waitForConnectResult != WL_CONNECTED) {
    M5.Display.println("échec, nouvelle tentative...");
    delay(3000);
  }
  M5.Display.printf("IP: %s\n", WiFi.localIP.toString.c_str);
}

void boucleHttp {
  HTTPClient http;
  http.begin(URL);
  int code = http.GET;
  M5.Display.setCursor(0, 40);
  if (code == HTTP_CODE_OK) {
    String corps = http.getString;
    int i = corps.indexOf("\"ip\": \"") + 7;   // extraction JSON maison
    String ip = (i > 6) ? corps.substring(i, corps.indexOf('"', i)) : "?";
    M5.Display.setTextColor(TFT_GREEN, TFT_BLACK);
    M5.Display.printf("IP publique: %s", ip.c_str);
    Serial.println(corps);
  } else {
    M5.Display.setTextColor(TFT_RED, TFT_BLACK);
    M5.Display.printf("HTTP erreur %d", code);
  }
  http.end;
}

void loop {
  M5.update;
  if (M5.BtnA.wasPressed) boucleHttp;   // A = relancer une requête
  if (WiFi.status != WL_CONNECTED) WiFi.reconnect;
  vTaskDelay(50 / portTICK_PERIOD_MS);
}

Vérification attendue

Après connexion, l'IP locale s'affiche ; appuyer sur A lance un GET et l'IP publique renvoyée par l'API s'affiche en vert. Le moniteur série montre le corps JSON brut.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels