El problema: dos microcontroladores casi gemelos, pero sin una base común

El XIAO ESP32 C3 y el XIAO ESP32 C6 tienen el mismo tamaño físico y el mismo pinout, pero capacidades muy distintas: el C3 es excelente para proyectos WiFi/Bluetooth clásicos, mientras que el C6 ya trae WiFi 6, Thread y Zigbee. La consecuencia práctica es que la mayoría de los makers terminan armando un protoboard distinto para cada uno, o peor, sueldan headers en una placa que no soporta cargas reales.

Este artículo te muestra cómo armar una placa base universal (un PCB diseñado en EasyEDA) que aloja indistintamente el C3 o el C6, con relés aislados ópticamente, salida regulada de 5 V/3 A, conectores serie listos para módulos GSM/GPS y un display OLED I2C para mostrar estado en tiempo real. Al final vas a tener una placa de desarrollo reusable para automatización, IoT y prototipos de campo, sin tener que soldar absolutamente nada cada vez que cambias de proyecto.

Arquitectura del diseño

La placa se organiza en cuatro bloques bien delimitados:

  1. Alimentación: regulador switching 5 V/3 A capaz de aguantar servos de torque alto, módulos celulares o LEDs de potencia. Entrada de 9 V a 25 V vía jack DC o terminal block (también admite panel solar).
  2. Salidas de relé: cuatro relés SPDT de 5 V controlados por transistores 2N2222 NPN, cada uno aislado del microcontrolador con un optoacoplador PC817.
  3. Periféricos digitales: pantalla OLED SSD1306 vía I2C, headers UART (3.3 V/GND/TX/RX), headers SPI/GPIO etiquetados.
  4. El zócalo XIAO: pads con el pinout exacto del XIAO, de modo que tanto el C3 como el C6 calzan sin modificación.

Placa de desarrollo XIAO ensamblada con sus bloques numerados: OLED, jack DC, entradas Vin y 5Vout, zócalo del XIAO y headers de expansión

Detalle: por qué los optoacopladores son innegociables

Cuando un relé conmuta una carga inductiva (un motor, una bomba, incluso una ampolleta antigua), la bobina genera transitorios de cientos de volts que pueden viajar de vuelta por la línea de control. El PC817 corta esa ruta eléctricamente: el LED interno excita un fototransistor, pero no hay conexión galvánica entre el lado microcontrolador y el lado relé. Sin esto, un solo evento de ruido puede freír el ESP32 sin que entiendas qué pasó. El componente cuesta menos de $500 CLP y te ahorra reemplazar la placa entera.

Detalle: el diodo flyback en paralelo a cada bobina

Cada relé lleva un diodo 1N4007 en antiparalelo con su bobina. Cuando cortas la corriente que pasa por una bobina, el campo magnético colapsa y genera una contratensión (la famosa Ley de Lenz). Sin el diodo, ese pico (que puede superar los 200 V de forma momentánea) destruye el transistor driver. Con el diodo, la energía se descarga de forma controlada por el camino de baja resistencia que ofrece el 1N4007 en directa.

Esquemático del driver de un relé: optoacoplador PC817, transistor 2N2222 y diodo flyback 1N4007 protegiendo la bobina

Diseño del PCB en EasyEDA

EasyEDA es gratuito y la curva de aprendizaje es mucho más baja que KiCad o Altium. Una vez que el esquemático está listo:

  1. Defines el contorno del PCB (yo lo hice intencionalmente generoso: hay espacio físico para enchufar módulos sin sentirte ahogado).
  2. Ruteas las pistas; las de potencia (5 V y GND del switching) las dejas más anchas (1.0 mm mínimo).
  3. Generas los archivos Gerber, BOM y Pick and Place.
  4. Encargas la fabricación a una casa como Seeed Studio o JLCPCB.

Esquemático del regulador switching 5V/3A basado en el chip MP1584, dibujado en EasyEDA

Una vez que llegan los PCB, viene el ensamblado SMD. Si nunca has soldado SMD, ten paciencia: una stencil + pasta + horno de reflow casero (o pistola de aire caliente) hacen el trabajo. Un microscopio digital ayuda muchísimo para alinear componentes pequeños.

Probando la placa con XIAO ESP32 C3 + OLED SSD1306

Una vez montada, lo primero es verificar la comunicación I2C con la pantalla OLED. Este sketch escribe "Mechatronic" en la pantalla:

C++
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  Serial.begin(115200);
  Wire.begin();  // SDA=D4, SCL=D5 en XIAO ESP32-C3

  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println("OLED no detectado");
    for(;;);
  }

  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.setCursor(0, 20);
  display.println("Mechatronic");
  display.display();
}

void loop() {}

Si la pantalla se queda en negro, lo primero que tienes que verificar es la dirección I2C (0x3C es la más común, pero algunos clones usan 0x3D) y que SDA/SCL estén realmente en D4/D5 del XIAO.

Probando los relés

Importante: NO uses el pin D9 para controlar relés en el ESP32 C3. D9 participa en el proceso de boot del chip; si tiene una carga conectada (como la base del transistor 2N2222), la placa puede no arrancar. Este sketch usa D0, D8 y D10:

C++
int relay1 = D0;
int relay2 = D8;
int relay4 = D10;

void setup() {
  Serial.begin(115200);
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay4, OUTPUT);
}

void loop() {
  digitalWrite(relay1, HIGH); Serial.println("Relay1 ON"); delay(1000);
  digitalWrite(relay2, HIGH); Serial.println("Relay2 ON"); delay(1000);
  digitalWrite(relay4, HIGH); Serial.println("Relay4 ON"); delay(1000);
  digitalWrite(relay1, LOW);  Serial.println("Relay1 OFF"); delay(1000);
  digitalWrite(relay2, LOW);  Serial.println("Relay2 OFF"); delay(1000);
  digitalWrite(relay4, LOW);  Serial.println("Relay4 OFF"); delay(1000);
}

El click metálico característico te confirma que está funcionando. Si quieres verificar visualmente, puedes conectar un LED + resistencia de 220 Ω entre el contacto normalmente abierto del relé y los 5 V de la placa.

Cambiar al XIAO ESP32 C6

Como el pinout es idéntico, el mismo código funciona sin modificar una sola línea. Lo único que cambia es la selección del board en el Arduino IDE: "XIAO_ESP32C6" en lugar de "XIAO_ESP32C3".

Menú de selección de placa en el Arduino IDE con XIAO_ESP32C6 marcado dentro del paquete esp32 de Espressif

Eso sí, necesitas la versión más reciente del board package de Espressif; las versiones anteriores a la 3.0 no incluyen el C6.

Variantes y mejoras

Esta placa base se presta a varias extensiones que el diseño original no contempla:

  • Modo MQTT con dashboard remoto: agrega una capa de software con la librería PubSubClient. Cada relé se mapea a un topic (casa/luces/sala), y un broker Mosquitto local o uno público como HiveMQ te permite controlar todo desde Home Assistant o desde una app móvil casera.
  • Lectura de corriente con sensor ACS712: si conectas un módulo ACS712 de 20 A en serie con la línea de carga de cada relé, puedes detectar si el equipo controlado realmente encendió o si hay un fusible quemado. Útil para automatización industrial.
  • Backup con supercapacitor: agregar un supercapacitor de 1 F en paralelo con la alimentación 5 V te da unos segundos de respaldo para guardar estado en flash (NVS de ESP32) ante una caída de luz, evitando que pierdas configuración.

Personalización para Chile

En MechatronicStore tienes todos los componentes core para armar esta placa con stock local:

  • Seeed Studio XIAO ESP32 C3 (SKU GS1-4): $8.830 CLP
  • Seeed Studio XIAO ESP32 C6 (SKU GS3-5): $10.190 CLP
  • Pantalla Oled 128x32 I2C 0.91" SSD1306 (SKU D-112): $3.990 CLP (equivalencia: el tutorial original usa un OLED 128x64; el de 128x32 cabe perfecto si reduces SCREEN_HEIGHT a 32 en el sketch).
  • Módulo Optoacoplador de Aislamiento 4 Canales PC817 (SKU GQ3-7): $3.990 CLP (equivalencia: trae los 4 PC817 ya soldados sobre placa, ahorra trabajo SMD si recién partes).
  • Transistor 2N2222 NPN (SKU GA4-6): $200 CLP (necesitas 4)
  • Diodo rectificador 1N4007 (SKU GF3-10): $200 CLP (necesitas 4)
  • Fuente De Poder Switching 5v 10A DC (SKU K-444): $10.900 CLP (equivalencia: el tutorial pide 5V/3A, esta de 10A te deja margen para crecer y cuesta lo mismo).
  • Módulo relé 5V de 1 canal (SKU D-205): $1.690 CLP cada uno (necesitas 4) (equivalencia: si prefieres no diseñar el PCB ni soldar SMD, puedes usar 4 módulos relé prefabricados y armar todo en protoboard).

Si ya armaste tu propio PCB y solo necesitas reponer componentes pasivos, los kits de transistores TO-92 (SKU C-513, $8.900 CLP) y diodos (SKU C-508, $2.890 CLP) son la opción más rentable.

Recursos

Versión chilena con componentes en stock local en MechatronicStore.