🛠 ADC et bruit Wi-Fi : le moyennage qui sauve

ESP32-C3 · avance · Schéma : IMG-esp32-c3-avance-3-adc-bruit-wifi-moyennage.svg — Lecture ADC sur ESP32-C3 avec et sans trafic Wi-Fi, bruit atténué par une moyenne sur 64 échantillons

Objectifs

Sur le ESP32-C3, l'ADC1 occupe GPIO0-4 et l'ADC2 GPIO2-6 — avec la même règle que l'ESP32 : l'ADC2 est indisponible quand le Wi-Fi tourne. Même sur ADC1, les rafales du radio injectent du bruit dans les mesures (pics de courant d'émission). Vous mettrez en évidence ce bruit et le neutraliserez par un moyennage sur fenêtre.

Matériel

Code complet

#include <WiFi.h>

const uint8_t CAPTEUR = 3;   // GPIO3 = ADC1_CH3 (ADC1 sur C3)
const uint8_t N = 64;

uint32_t moyenneFenetre {
  uint64_t somme = 0;
  for (uint8_t i = 0; i < N; i++) somme += analogRead(CAPTEUR);
  return (uint32_t)(somme / N);
}

void setup {
  Serial.begin(115200);
  analogSetPinAttenuation(CAPTEUR, ADC_11db);
  Serial.printf("1 echantillon : %u | moyenne %u : %u\n",
                analogRead(CAPTEUR), N, moyenneFenetre);

  WiFi.mode(WIFI_STA);
  WiFi.begin("MON_SSID", "MA_CLE");
  uint32_t t0 = millis;
  while (WiFi.status != WL_CONNECTED && millis - t0 < 10000) delay(200);
  Serial.printf("Wi-Fi : %s\n",
                WiFi.status == WL_CONNECTED ? "connecte" : "échec");
}

void loop {
  uint32_t brut = analogRead(CAPTEUR);
  uint32_t lisse = moyenneFenetre;
  Serial.printf("brut %u | moyenne %u echantillons %u\n", brut, N, lisse);
  delay(500);
}

Vérification attendue

Sans Wi-Fi, la lecture brute est déjà stable. Une fois connecté (et davantage pendant un transfert), la valeur brute se met à danser de plusieurs dizaines de points au rythme des rafales, tandis que la moyenne sur 64 échantillons reste quasi fixe : le rapport signal/bruit est amélioré d'un facteur racine de N, soit environ 8 ici.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels