Tener el voltaje correcto para cualquier proyecto es de suma importancia y poder controlarlo se vuelve necesario en algunos proyectos.
En este tutorial realizaremos el control de una fuente de voltaje desde una interfaz web, para esto usaremos la Pulsar C6 y el módulo HUSB238; implementaremos una interfaz web capaz de controlar dinámicamente perfiles USB-PD como 5V, 9V, 12V y 15V directamente desde un navegador sin necesidad de aplicaciones externas ni conexión a internet.
Introducción
¿Qué son los perfiles USB-PD?
USB Power Delivery (USB-PD) es una tecnología de carga versátil diseñada para alimentar una amplia gama de dispositivos USB. Normalmente, cada dispositivo con carga USB tendría su propio adaptador, pero eso ya no es así.
Un único cargador PD universal puede alimentar una amplia gama de dispositivos. La última generación de USB-PD ofrece la máxima potencia de salida, pero solo cuando se combina con la tecnología de puerto USB-C PD más reciente. Este estándar permite que los cables y conectores USB Tipo-C entreguen hasta 240 W de potencia, lo que proporciona una carga más rápida y eficiente en comparación con las tecnologías anteriores, la carga PD admite varios niveles de voltaje.
Material
- UNIT Pulsar ESP32-C6
- Módulo USB-C PD HUSB238 Fuente Variable 5V, 9V, 12V, 15V, 18V y 20V – UNIT DevLab
- Cable Qwiic
- HT-PD27W-US Eliminador 27W USB Tipo C PD para Raspberry Pi 5
- Ventilador 4010 12V
Diagrama de Conexión
Para alimentar nuestra HUSB238 se puede usar un cargador que máximo de 20V y 5A, y que sea compatible con PD para el cambio de voltaje en esta ocasión usamos una fuente para Raspberry tipo C que es igual de efectiva, la conectaremos a la HUSB238 por medio del puerto USB C.
Para conectar a nuestra pulsar C6 utilizaremos los pines D4 y D5 , estos conectaran a SDA y SCL respectivamente, y conectaremos el GND con GND.

Requerimientos Previos
Instalación de librerías
Para poder hacer que nuestra pulsar C6 pueda desplegar nuestra interfaz web necesitamos las siguientes librerías.
- Para instalarla:
- Ve a Programa > Incluir librería > Gestionar bibliotecas…
- En el buscador escribe: WebSocketsServer
- Instala la librería WebSockets (normalmente aparece como “WebSockets by Markus Sattler”).

Realizamos el mismo procedimiento para la librería Adafruit_HUSB238.h
- Ve a Programa > Incluir librería > Gestionar bibliotecas…
- En el buscador escribe: Adafruit_HUSB238
- Instala la librería Adafruit_HUSB238 (normalmente aparece como “Adafruit_HUSB238 Library by Adafruit”).

Código
El siguiente código nos dará la dirección IP que deberemos colocar en el buscador para entrar a la interfaz web, por lo que será necesario verla desde el monitor serial del IDE de Arduino.
En caso de que nuestra Pulsar C6 no detecte a la HUSB238, se mostrará un mensaje de error ‘HUSB238 ERROR’ y el código se detendrá. En ese caso, habrá que revisar la conexión física.
// ============================
// LIBRERÍAS NECESARIAS
// ============================
// Librería para funciones WiFi del ESP32
#include <WiFi.h>;
// Librería para crear el servidor web
#include <WebServer.h>;
// Librería para comunicación I2C
#include <Wire.h>;
// Librería del controlador USB PD HUSB238
#include "Adafruit_HUSB238.h";
// ============================
// CONFIGURACIÓN DE PINES I2C
// ============================
#define SDA_PIN 15// D4
#define SCL_PIN 19// D5
// ==============================
// CONFIGURACIÓN DEL ACCESS POINT
// ==============================
// Nombre de la red WiFi que creará el ESP32
const char* ssid = "Control_Voltage";
// Contraseña de la red WiFi
const char* password = "12345678";
// Se crea el servidor web en el puerto 80
WebServer server(80);
// Objeto del controlador HUSB238
Adafruit_HUSB238 husb238;
// Variable donde se guarda el voltaje actual
// Se mostrará en la página web
String currentVoltage = "5V";
// ============================
// FUNCIÓN PARA CAMBIAR VOLTAJE
// ============================
// Esta función selecciona el voltaje USB PD y actualiza la variable mostrada en la web
void setVoltage(HUSB238_PDSelection pd, String txt)
{
// Mensaje por monitor serial
Serial.println("Solicitando " + txt);
// Selecciona el perfil de voltaje PD
husb238.selectPD(pd);
// Espera para el cambio de voltaje
delay(200);
// Envía la solicitud al cargador USB PD
husb238.requestPD();
// Espera para aplicar el cambio
delay(500);
// Guarda el voltaje actual
currentVoltage = txt;
// Mensaje de confirmación
Serial.println("Voltaje cambiado");
}
// ============================
// INTERFAZ WEB
// ============================
// Función principal que genera la página web
void handleRoot()
{
// Se inicia el contenido HTML
String html = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
/* Estilo general de la página */
body{
font-family: Arial;
text-align:center;
background:#111;
color:white;
}
/* Margen del título */
h1{
margin-top:30px;
}
/* Diseño de botones */
button{
width:120px;
height:70px;
font-size:24px;
margin:10px;
border:none;
border-radius:15px;
cursor:pointer;
}
</style>
</head>
<body>
<h1>Control de Voltaje</h1>
<h2>Voltaje actual:
)rawliteral";
// Inserta el voltaje actual en la web
html += currentVoltage;
// Continúa el HTML
html += R"rawliteral(
</h2>
<!-- Botones para seleccionar voltaje -->
<a href="/5"><button>5V</button></a>
<a href="/9"><button>9V</button></a>
<a href="/12"><button>12V</button></a>
<a href="/15"><button>15V</button></a>
</body>
</html>
)rawliteral";
// Envía la página al navegador
server.send(200, "text/html", html);
}
// ============================
// CONFIGURACIÓN INICIAL
// ============================
void setup()
{
// Inicia monitor serial
Serial.begin(115200);
// Inicia comunicación I2C
Wire.begin(SDA_PIN, SCL_PIN);
// Espera de inicio
delay(1000);
// Inicializa el HUSB238
if (!husb238.begin(HUSB238_I2CADDR_DEFAULT, &Wire))
{
// Error si no detecta el módulo
Serial.println("HUSB238 ERROR");
// Detiene el programa
while (1);
}
// Confirmación de funcionamiento
Serial.println("HUSB238 OK");
// Solicita negociación USB PD inicial
husb238.requestPD();
// Crea el Access Point WiFi
WiFi.softAP(ssid, password);
// Obtiene la IP del ESP32
IPAddress IP = WiFi.softAPIP();
// Muestra IP en monitor serial
Serial.print("AP IP address: ");
Serial.println(IP);
// ============================
// RUTAS DEL SERVIDOR WEB
// ============================
// Página principal
server.on("/", handleRoot);
// Ruta para seleccionar 5V
server.on("/5", []()
{
setVoltage(PD_SRC_5V, "5V");
handleRoot();
});
// Ruta para seleccionar 9V
server.on("/9", []()
{
setVoltage(PD_SRC_9V, "9V");
handleRoot();
});
// Ruta para seleccionar 12V
server.on("/12", []()
{
setVoltage(PD_SRC_12V, "12V");
handleRoot();
});
// Ruta para seleccionar 15V
server.on("/15", []()
{
setVoltage(PD_SRC_15V, "15V");
handleRoot();
});
// Inicia el servidor web
server.begin();
// Mensaje de confirmación
Serial.println("WEB SERVER STARTED");
}
void loop()
{
// Atiende clientes conectados al servidor web
server.handleClient();
}
Conexion con navegador
Prmero debemos conectarnos, para esto buscamnos la señal wifi, en este caso ”Control_Voltage”, y colocaremos la contraseña: “12345678”, y nos conectamos, esto puede hacerse desde una computadora o un celular.

Ya conectados podemos ir al navegador y colocar la direccion IP que nosa da en nuetro monitor serial de nuestro arduino IDE, esta direccion siempre sera la misma, entramos al navegador colocando la direccion IP en la barrra superior del buscador.


Al ingresar nos muestra la interfaz para poder cambiar los voltajes.

Demostración
Se puede observar en el multímetro el cambio de voltaje; asimismo, el ventilador realiza variaciones de velocidad debido a dichas modificaciones. El cambio se puede ver en el monitor serial como confirmación, asimismo en la interfaz web nos muestra el voltaje en el que estamos.
Conclusiones
Este proyecto demuestra cómo la Pulsar C6, puede utilizarse para controlar de forma inalámbrica un módulo HUSB238 mediante una interfaz web local. Gracias a la conectividad WiFi integrada es posible seleccionar distintos niveles de voltaje compatibles con USB-PD desde cualquier dispositivo conectado a la red creada por el microcontrolador.

