🛠 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

Objetivos

En el ESP32-C3, el ADC1 ocupa los GPIO0-4 y el ADC2 los GPIO2-6 — con la misma regla que en el ESP32: el ADC2 no está disponible cuando el Wi-Fi está funcionando. Incluso en el ADC1, las ráfagas de la radio inyectan ruido en las mediciones (picos de corriente de emisión). Usted evidenciará este ruido y lo neutralizará mediante un promedio en ventana.

Material

Código completo

#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" : "echec");
}

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);
}

Verificación esperada

Sin Wi-Fi, la lectura bruta ya es estable. Una vez conectado (y más durante una transferencia), el valor bruto comienza a fluctuar decenas de puntos al ritmo de las ráfagas, mientras que el promedio de 64 muestras permanece casi fijo: la relación señal/ruido mejora en un factor de raíz de N, es decir, aproximadamente 8 en este caso.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales