Práctica 2: XIAO ESP32C3 Sensores

En esta práctica, usamos una tarjeta XIAO ESP32C3 de Seeed Studio para leer un par de sensores, un Potenciómetro que es un sensor analógico y un DHT11, que es un sensor digital.

Materiales:

Paso 1: Preparar el entorno de desarrollo

Seleccionar la XIAO ESP32 C3 de la lista de tarjetas disponibles en el IDE de Arduino. (Debe haberse instalado en el IDE previamente)

Configuración IDE
Ventana del IDE con la placa XIAO ESP32C3 seleccionada.
Paso 2: Conocer el pinout de la XIAO ESP32C3

Consultamos el diagrama oficial de pines e identificamos los GPIO de salida que queremos utilizar.

Diagrama de pinout
Diagrama de pines de la ESP32 DevKitC.
Paso 3: Montaje del Potenciómetro

Conectamos el Potenciómetro, el cual cuenta con tres terminales: Lado 1, Wiper y Lado 2. El Wiper, la pata del centro siempre va hacia el microcontrolador, mientras que las otras dos van conectadas a 3.3V o a Tierra de forma indistinta, el orden de conexión sólo cambiará la dirección de giro hacia la cual el valor del Potenciómetro aumentará.

Al ser un elemento analógico, debemos leerlo desde un pin del microcontrolador con acceso al ADC interno. Dichos pines en el caso de la XIAO ESP32C3 están marcados por una bandera rosa numerados del A0 al A3.

Conectamos el Potenciómetro en orden 3.3V - GPIO2 - GND.

Conexión Potenciometro
Potenciómetro conectado al pin GPIO2.
Paso 4: Conexión del Sensor DHTxx

Los sensores de la familia DHTxx son sensores digitales de temperatura y humedad ambiental. La diferencia entre el DHT11 y el DHT22 es simplemente la precisión de la medición que realizan, siendo el DHT22 el más preciso.

Para conectarlo, simplemente hay que proveer de 3.3V, un GPIO de lectura digital y conexión a Tierra.

Conexion DHTxx
Circuito completo ensamblado en una protoboard.
Paso 5: Programación del Sistema

Queremos leer tanto el Potenciómetro como el Sensor DHTxx, por lo que aplicamos el siguiente código que toma dichos valores y los muestra en el puerto serie:


#include 
#include             // Librería para el sensor DHT

// ===== Configuración de pines =====
const int potPin  = A0;     // Pin analógico donde va el potenciómetro
const int DHTPIN  = 6;      // Pin digital donde va el sensor DHT11

// ===== Tipo de sensor DHT =====
#define DHTTYPE DHT11      // Modelo de DHT: DHT11 - Cambiar si se desea usar el DHT22
DHT dht(DHTPIN, DHTTYPE);   // Objeto DHT

// ===== Variables de almacenamiento =====
float temperatura = 0.0;    // Grados Celsius leídos del DHT11
float humedad      = 0.0;    // Porcentaje de humedad leído del DHT11
int   valorPot     = 0;      // Valor crudo (0–4095) del potenciómetro
float voltPot      = 0.0;    // Voltaje calculado (0–3.3 V) del potenciómetro

void setup() {
  // Inicia la comunicación serie a 115200 baudios
  Serial.begin(115200);
  while(!Serial) { /* Espera a que se abra el puerto serie */ }

  // Inicializa el sensor DHT
  dht.begin();

  // Configura modos de pin
  pinMode(potPin, INPUT);     // Potenciómetro como entrada analógica
  pinMode(DHTPIN, INPUT);     // DHT11 usa su propia resistencia pull-up
}

void loop() {
  // --- Lectura del potenciómetro ---
  valorPot = analogRead(potPin);
  // Con ESP32, analogRead devuelve 0–4095 en rango 0–3.3 V
  voltPot = (valorPot / 4095.0) * 3.3;

  // --- Lectura del sensor DHT11 ---
  humedad     = dht.readHumidity();          // Humedad en %
  temperatura = dht.readTemperature();       // Temperatura en °C

  // Comprueba si hubo error en la lectura
  if (isnan(humedad) || isnan(temperatura)) {
    Serial.println("Error: No se pudo leer el DHT11");
  } else {
    // Envía los datos por Serial en formato legible
    Serial.print("Potenciómetro: ");
    Serial.print(valorPot);
    Serial.print("  |  ");
    Serial.print("Voltaje: ");
    Serial.print(voltPot, 2);   // 2 decimales
    Serial.print(" V");

    Serial.print("  ||  ");
    Serial.print("Humedad: ");
    Serial.print(humedad, 1);   // 1 decimal
    Serial.print(" %  |  ");
    Serial.print("Temp: ");
    Serial.print(temperatura, 1); // 1 decimal
    Serial.println(" °C");
  }

  delay(1000);  // Espera 2 segundos antes de la siguiente lectura
}

  
Paso 6: Sistema en funcionamiento!

Al abrir el puerto serial desde el Arduino IDE, podemos ver los valores solicitados.

Demostración del sistema funcionando.