🛠 ADC et bruit Wi-Fi : le moyennage qui sauve
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
- 1 carte ESP32-C3
- 1 source de tension stable (sortie diviseur ou référence) sur GPIO3 (ADC1_CH3)
- Accès Wi-Fi 2,4 GHz
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
- Câbler la mesure sur GPIO2 ou GPIO4 (ADC2) et accuser le bruit : avec le Wi-Fi actif, la lecture échoue d'abord pour cause de coexistence ADC2/Wi-Fi.
- Moyenner sans filtrer les outliers : un unique pic de radio peut fausser une petite moyenne ; préférer une médiane ou un filtre glissant.
- Oublier le premier échantillon après wake : toujours en jeter un ou deux avant la mesure utile.
- Attendre une stabilité 12 bits : la partie basse de l'ADC de l'ESP32-C3 est bruitée par nature, viser 9-10 bits exploitables et calibrer en tension réelle.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino