
BermejaSat #8: Puesta a Punto de la Heltec V3.2 — Solución a Problemas de Puerto Serie, Librerías y Test de Hardware
Introducción
En el desarrollo de un proyecto aeroespacial como BermejaSat, es muy habitual alternar entre distintas plataformas hardware para validar sensores o probar subsistemas. La placa Heltec WiFi Kit 32 V3.2 / LoRa V3 es una opción fantástica para prototipar: integra pantalla OLED, conectividad LoRa/WiFi y gestión de energía en un formato compacto.
Sin embargo, trabajar con placas avanzadas basadas en el chip ESP32-S3 o con controladores puente serie puede presentar escollos iniciales: puertos COM que no aparecen, errores de driver en Windows o pantallas que no encienden.
En esta octava entrega del proyecto, creamos una guía completa de solución de problemas de puerto serie, instalación de librerías y test inicial de hardware pensada tanto para el equipo de desarrollo como para el alumnado.
🛠️ Paso 1: Solución a Problemas del Puerto Serie USB (Driver y Modo BOOT)
Uno de los bloqueos más comunes al conectar la placa al ordenador es que el IDE de Arduino no reconozca el puerto COM, o que Windows muestre el aviso amarillo:
Silicon Labs CP210x USB to UART Bridge (Error de controlador) o Dispositivo USB desconocido.
A. Instalación del Controlador CP210x
Muchas revisiones de placas de desarrollo utilizan el chip puente CP2102/CP2104 de Silicon Labs para convertir la señal USB a UART.
- Descarga el paquete oficial CP210x Universal Windows Driver desde la web de Silicon Labs.
- Descomprime el archivo
.zip. - Haz clic derecho sobre el archivo
silabser.infy selecciona Instalar. - Desconecta y vuelve a conectar la placa por USB.
B. Forzar el Modo Programación (Arranque en Frío por BOOT)
Si la placa se queda en un bucle de reinicios por un código anterior o el controlador USB nativo se cuelga, el ordenador perderá la comunicación. Para forzar al procesador a entrar en el cargador de arranque (Bootloader):
- Desconecta el cable USB-C de la placa.
- Mantén pulsado el botón
BOOT(oPRG) en la placa y no lo sueltes. - Con el botón
BOOTaún presionado, conecta el cable USB-C al ordenador. - Mantén el botón 2 segundos más y suéltalo.
- Abre el IDE de Arduino: el puerto COM reaparecerá limpio y listo para recibir programas.
💡 Consejo para el aula: Asegúrate de usar un cable USB-C que tenga líneas de datos (no cables universales de carga rápida, que solo llevan hilos de alimentación).
📚 Paso 2: Configuración de Arduino IDE y Librerías
Para programar la placa Heltec V3.2 y leer sensores I2C como el BME280/BMP280, necesitamos instalar los siguientes paquetes desde el Gestor de Librerías de Arduino IDE (Ctrl + Shift + I):
Adafruit GFX Library: Motor gráfico para pantallas de Adafruit.Adafruit SSD1306: Control de la pantalla OLED integrada ($128 \times 64$ píxeles).Adafruit BME280 Library(oAdafruit BMP280 Library): Librería oficial para lectura de presión, temperatura y humedad.
Parámetros de la Placa en Arduino IDE:
En el menú Herramientas:
- Placa:
Heltec WiFi LoRa 32(V3)oESP32S3 Dev Module - USB CDC On Boot:
Enabled(Muy importante para no perder la consola Serie USB) - Upload Mode:
UART0 / Hardware CDC
⚡ Paso 3: El Secreto del Pin Vext (GPIO 36)
Un detalle crucial en la arquitectura de las placas Heltec V3/V3.2 es el pin de control de alimentación Vext (GPIO 36).
Por diseño para ahorro de batería, la pantalla OLED y la salida de corriente para periféricos externos están apagadas por defecto. Para encender la pantalla y dar corriente al bus I2C del sensor, es obligatorio poner el pin GPIO 36 a nivel bajo (LOW) al iniciar el programa.
C++
pinMode(36, OUTPUT);
digitalWrite(36, LOW); // Enciende Vext (Pantalla OLED y sensores I2C)
delay(100);
💻 Paso 4: Código Completo “Test de Vida” (Heltec V3.2 + OLED + BME280)
Conecta los 4 cables del módulo BME280/BMP280 a la placa Heltec:
- VCC$\rightarrow$3.3V
- GND$\rightarrow$GND
- SDA$\rightarrow$GPIO 17
- SCL$\rightarrow$GPIO 18
Sube el siguiente sketch para verificar el funcionamiento conjunto:
C++
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_BME280.h> // Cambiar a <Adafruit_BMP280.h> si usas el modelo BMP
// --- PINES ESPECÍFICOS HELTEC V3.2 ---
#define VEXT_PIN 36 // Control de alimentación Vext
#define OLED_RST 21 // Pin de Reset de la pantalla
#define SDA_PIN 17 // Bus I2C Datos
#define SCL_PIN 18 // Bus I2C Reloj
Adafruit_SSD1306 display(128, 64, &Wire, OLED_RST);
Adafruit_BME280 bme; // Crear objeto para el sensor
bool sensorOk = false;
void setup() {
// Inicializar puerto serie USB a 115200 baudios
Serial.begin(115200);
// 1. ACTIVAR ALIMENTACIÓN VEXT (PANTALLA Y BUS I2C)
pinMode(VEXT_PIN, OUTPUT);
digitalWrite(VEXT_PIN, LOW);
delay(100);
// 2. INICIALIZAR BUS I2C
Wire.begin(SDA_PIN, SCL_PIN);
// 3. INICIALIZAR PANTALLA OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("[ERROR] No se pudo iniciar la pantalla OLED");
}
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1);
display.setCursor(10, 20);
display.println("HELTEC V3.2 OK");
display.setCursor(10, 35);
display.println("Buscando BME280...");
display.display();
// 4. INICIALIZAR SENSOR BAROMÉTRICO (Probar direcciones 0x76 y 0x77)
if (bme.begin(0x76, &Wire) || bme.begin(0x77, &Wire)) {
sensorOk = true;
Serial.println("[OK] Sensor BME280/BMP280 detectado correctamente.");
} else {
Serial.println("[ERROR] Sensor no encontrado. Revisa el conexionado.");
}
delay(1000);
}
void loop() {
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
display.println("BERMEJASAT - HELTEC V3");
display.drawLine(0, 10, 128, 10, SSD1306_WHITE);
if (sensorOk) {
float temp = bme.readTemperature();
float pres = bme.readPressure() / 100.0F; // Pa a hPa
float hum = bme.readHumidity(); // Solo para BME280
// Impresión por Monitor Serie (para depuración en PC)
Serial.print("Temp: "); Serial.print(temp, 1); Serial.print(" C | ");
Serial.print("Pres: "); Serial.print(pres, 1); Serial.print(" hPa | ");
Serial.print("Hum: "); Serial.print(hum, 1); Serial.println(" %");
// Impresión en Pantalla OLED
display.setCursor(0, 18);
display.print("Presion: ");
display.setTextSize(2);
display.print(pres, 1);
display.setTextSize(1);
display.println(" hPa");
display.setCursor(0, 42);
display.print("Temp: "); display.print(temp, 1); display.println(" C");
display.setCursor(0, 54);
display.print("Humedad: "); display.print(hum, 1); display.println(" %");
} else {
display.setCursor(0, 25);
display.println("SENSOR NO DETECTADO");
display.setCursor(0, 40);
display.println("Verifica pines 17/18");
}
display.display();
delay(1000);
}
Conclusión Pedagógica
Aprender a depurar los problemas de comunicaciones en la etapa inicial de un proyecto evita horas de frustración en el aula. Entender el papel de los controladores CP210x, dominar el encendido en modo BOOT y conocer las particularidades de hardware como el pin Vext capacita al alumnado para enfrentarse con autonomía a cualquier microcontrolador del mercado.
Etiqueta:Arduino IDE, BermejaSat, bme280, BMP280, cansat, CP210x, ESA, ESP32-S3, heltec v3, ies monterroso, montesteam, Puerto serie, Vext



