Cómo configurar el OLED de 0.42″ en la ESP32-C3 (solución al problema de pantalla cortada)
En este post, vamos a configurar la placa de desarrollo ESP32-C3 Gold que incluye una pantalla OLED de 0.42 pulgadas. El mayor problema de esta placa es que, al ser una resolución poco común (72×40), el texto suele aparecer desplazado o fuera de los límites. Aquí tienes la solución definitiva utilizando la librería U8g2.
1. Requisitos y Hardware
- Placa: ESP32-C3 Dev Module (diseño FN4/FH4 con antena cerámica).
- Pantalla integrada: OLED 0.42″ (Controlador SSD1306).
- Entorno: Arduino IDE.
2. Configuración del Arduino IDE
Antes de cargar el código, asegúrate de tener instalado el soporte para ESP32:
- Ve a Archivo > Preferencias.
- En «Gestor de URLs Adicionales de Tarjetas» pega:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json - Ve a Herramientas > Placa > Gestor de Tarjetas, busca «ESP32» e instala la versión de Espressif Systems.
- Instala la librería U8g2 desde el Gestor de Librerías (
Sketch > Incluir Librería > Gestionar Librerías).
3. Configuración de la Placa en el Menú Herramientas
Selecciona estos parámetros para evitar errores de conexión:
- Placa: «ESP32C3 Dev Module»
- USB CDC On Boot: «Enabled» (Crucial para ver el Monitor Serie).
- Flash Mode: «DIO»
- Puerto: El correspondiente a tu placa.
4. El Código de la Solución
El «secreto» para que la pantalla no se vea mal es usar el constructor específico U8G2_SSD1306_72X40_ER, que corrige el desplazamiento de píxeles (offset) interno del chip.
C++
/*
* ESP32-C3 OLED 0.42" Test Code
* Resolución: 72x40 | Pines I2C: SDA=5, SCL=6
* Librería: U8g2 by oliver
*/
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
// Constructor específico para corregir el desalineado en pantallas de 0.42"
// U8G2_SSD1306_72X40_ER_F_HW_I2C(rotacion, reset, clock, data)
U8G2_SSD1306_72X40_ER_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ 6, /* data=*/ 5);
void setup() {
// Inicialización de la pantalla
u8g2.begin();
}
void loop() {
u8g2.clearBuffer(); // Limpia la memoria interna
// Configuración de fuente y texto
u8g2.setFont(u8g2_font_ncenB08_tr); // Fuente nítida y pequeña
u8g2.drawStr(0, 15, "ESP32-C3"); // X=0, Y=15
u8g2.drawStr(0, 32, "GOLD OK!"); // X=0, Y=32
u8g2.sendBuffer(); // Envía los datos a la pantalla
delay(2000);
}
5. Notas Importantes
- Pines I2C: Esta placa utiliza el Pin 5 (SDA) y el Pin 6 (SCL). Si tu versión fuera distinta, prueba con los pines 8 y 9.
- ¿Por qué U8g2? A diferencia de la librería de Adafruit, U8g2 permite gestionar el offset de memoria del controlador SSD1306, evitando que el contenido se salga de los bordes físicos de la pantalla de 0.42″.