Por: Julio Cesar Sandria Reynoso
Instituto de Robótica de Xalapa
11 de noviembre de 2026
Las pantallas OLED gráficas de 2.42 pulgadas basadas en el controlador SSD1309 (resolución de 128×64 píxeles) ofrecen un excelente contraste y ángulo de visión para proyectos de electrónica embebida. Sin embargo, las versiones de 7 pines suelen generar confusión al utilizarse bajo el protocolo I2C (IIC), ya que conservan la nomenclatura del bus SPI en su serigrafía.
Esta guía detalla el diagrama de conexión exacto para Arduino UNO y proporciona el código base utilizando la librería U8g2.


1. Especificaciones del Módulo
- Controlador: SSD1309
- Resolución: 128 × 64 píxeles (monocromática)
- Tamaño diagonal: 2.42 pulgadas
- Interfaz: I2C (configuración mediante resistencias puente R9, R10, R11 y R12)
- Dirección I2C:
0x3C(con pin DC a GND) o0x3D(con pin DC a VCC) - Voltaje de operación: 3.3V a 5V (verificar presencia de regulador LDO en la placa)
2. Requisito de Hardware (Configuración I2C)
Para que el módulo opere en modo I2C, la placa debe contar con las siguientes modificaciones físicas en la parte posterior del PCB (generalmente ya realizadas en las versiones marcadas como IIC):
- R8: Debe estar abierta (sin resistencia).
- R9, R10, R11 y R12: Deben estar puenteadas (con resistencias de 0 Ω o punto de soldadura).
3. Diagrama de Conexión (Pinout)
En el modo I2C, los pines de control tradicionales de SPI (DC y CS) cumplen funciones de direccionamiento y habilitación, por lo que no deben dejarse desconectados.
| Pin en Pantalla OLED | Pin en Arduino UNO | Descripción Técnica |
|---|---|---|
| VSS | GND | Tierra común del circuito (0V). |
| VDD | 3.3V (o 5V) | Alimentación positiva. Se recomienda 3.3V si no se confirma regulador integrado. |
| SCLK | A5 (o pin SCL) | Señal de reloj serial (Clock) del bus I2C. |
| SDA | A4 (o pin SDA) | Línea de datos bidireccional (Data) del bus I2C. |
| RES | Pin Digital 4 | Reinicio por hardware (Reset). Indispensable para inicializar el controlador SSD1309. |
| DC | GND | Selección de dirección esclavo I2C. Conectado a GND fija la dirección 0x3C. |
| CS | GND | Selección de chip (Chip Select). Debe mantenerse en nivel bajo (GND) para habilitar el bus. |
Nota sobre Arduino UNO: Los pines analógicos A4 y A5 están conectados eléctricamente a los pines dedicados SDA y SCL situados junto al pin
AREF. Puedes utilizar cualquiera de ambos pares indistintamente.
4. Instalación de Librerías
Para gestionar el controlador SSD1309 de forma estable, utilizaremos la librería U8g2 de Oliver Kraus:
- Abre el IDE de Arduino.
- Dirígete a Programa > Incluir Librería > Administrar Bibliotecas… (o presiona
Ctrl + Shift + I). - En el buscador, escribe
U8g2. - Localiza la librería «U8g2 by oliver» y haz clic en Instalar.
5. Código de Ejemplo en Arduino
El siguiente código inicializa la pantalla utilizando I2C por hardware y renderiza un mensaje de prueba en pantalla, similar al de la imagen de portada de este artículo.
/*
Instituto de Robótica de Xalapa - 11-noviembre-2026
Programa: OLED-2.42-I2C-Hola_iRoX.ino (C++)
Autor: Julio César Sandria Reynoso
Colaborador: Google Gemini
Hardware:
+ Pantalla OLED 2.42" Ver. 4.2 IIC controlador SSD1309
+ Arduino UNO
*/
#include <U8g2lib.h>
// Constructor para SSD1309 128x64 por I2C por hardware.
// El último parámetro (4) es el pin de RESET.
// Si conectaste RES a 3.3V, cámbialo a U8X8_PIN_NONE.
U8G2_SSD1309_128X64_NONAME0_F_HW_I2C oled(U8G2_R0, /* reset=*/ 4);
void setup(void) {
oled.begin();
}
void loop(void) {
oled.clearBuffer(); // Limpia la memoria interna
oled.setFont(u8g2_font_ncenB10_tr); // Selecciona una fuente legible
oled.drawStr(10, 15, "Hola iRoX!"); // Escribe texto en (X, Y)
// Cambia a una fuente secundaria más pequeña
oled.setFont(u8g2_font_6x10_tr);
oled.drawStr(10, 35, "OLED 2.42\" I2C");
oled.drawStr(10, 55, "SSD1309 Listo!");
oled.sendBuffer(); // Envía el contenido a la pantalla
delay(1000);
}
El siguiente código inicializa la pantalla utilizando I2C por hardware y renderiza un mensaje de prueba en pantalla con un marco alrededor.
/*
Instituto de Robótica de Xalapa - 11-noviembre-2026
Programa: OLED-2.42-I2C-Graphic.ino (C++)
Autor: Julio César Sandria Reynoso
Colaboradores: Google Gemini
Hardware:
+ Pantalla OLED 2.42" Ver. 4.2 IIC controlador SSD1309
+ Arduino UNO
*/
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
// Constructor para pantalla OLED 2.42" SSD1309 (128x64) por I2C Hardware
// Pin de Reset conectado al Pin Digital 4
U8G2_SSD1309_128X64_NONAME0_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ 4);
void setup(void) {
u8g2.begin();
}
void loop(void) {
u8g2.clearBuffer(); // Limpia la memoria antes de dibujar
// 1. Dibuja el doble marco exterior con esquinas
// ligeramente redondeadas (128x64 px)
u8g2.drawRFrame(0, 0, 128, 64, 2);
u8g2.drawRFrame(2, 2, 124, 60, 2);
// 2. Selecciona una fuente de estilo técnico/monoespaciado
// similar a los LCD gráficos
u8g2.setFont(u8g2_font_6x12_tr);
// 3. Dibuja tres líneas de texto centradas horizontalmente
// Nota: Cada carácter en la fuente 6x12 mide 6 píxeles de ancho.
// Cálculo de centrado: (128 - (cantidad_letras * 6)) / 2
// Línea 1: 17 caracteres -> (128 - 17 * 6) / 2 = 13
u8g2.drawStr(13, 21, "OLED 2.42 SSD1309");
// Línea 2: 17 caracteres -> (128 - 17 * 6) / 2 = 13
u8g2.drawStr(13, 38, "128X64 MONOCHROME");
// Línea 3: 11 caracteres -> (128 - 11 * 6) / 2 = 31
u8g2.drawStr(31, 54, "GRAPHIC LCD");
// 4. Envía el gráfico completo a la pantalla OLED
u8g2.sendBuffer();
delay(1000);
}
6. Resolución de Problemas Frecuentes
- La pantalla permanece completamente negra:
Verifica que el pin RES esté conectado al pin digital definido en el código (Pin 4) y que CS y DC estén firmemente conectados a GND. Si el problema persiste, ejecuta un I2C Scanner para confirmar que el microcontrolador detecta el dispositivo en la dirección0x3C. - Los píxeles se muestran desplazados o cortados en los bordes:
Existen dos variantes de mapeo de memoria en los paneles SSD1309 genéricos. Si la imagen aparece recorrida horizontalmente, sustituyeNONAME0porNONAME2en la declaración del constructor:U8G2_SSD1309_128X64_NONAME2_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ 4); - Inestabilidad o parpadeo al alimentar a 5V:
Aunque muchos módulos incluyen un regulador de voltaje de 3.3V en la cara posterior (identificable como un componente SMD de 3 pines marcado como662K), si tu módulo carece de él, aliméntalo estrictamente desde el pin 3.3V del Arduino UNO para evitar daños en el controlador.