Código de Arduino y vídeo para pantalla OLED SSD1306 128 x 32 con I2C
En este tutorial exploraremos cómo usar la pantalla OLED SSD1306 128 x 32 con comunicación I2C en un Arduino. El objetivo es mostrar varios elementos como texto, rectángulos y valores dinámicos como voltaje y temperatura en la pantalla. Esta configuración es ideal para proyectos que requieren una solución de visualización compacta y eficiente.

Repasaremos los componentes de hardware necesarios, las instrucciones de cableado y el código de Arduino para poner todo en marcha. Para una guía visual, asegúrate de consultar el video que acompaña este tutorial (en el video a 00:00).
Hardware explicado
Los componentes clave para este proyecto incluyen la pantalla OLED SSD1306, que es una pantalla de bajo consumo que utiliza comunicación I2C para una conexión sencilla. La pantalla presenta una resolución de 128 x 32 píxeles, lo que la hace adecuada para mostrar texto y gráficos simples.
Para controlar la pantalla, utilizaremos la placa Arduino, que enviará comandos y datos a través de I2C. El Arduino se encarga de la lógica para mostrar la información mediante bibliotecas comoAdafruit_GFXyAdafruit_SSD1306Estas bibliotecas simplifican el proceso de comunicación y permiten dibujar fácilmente formas y texto.
Detalles de la ficha técnica
| Fabricante | Adafruit |
|---|---|
| Número de pieza | SSD1306 |
| Tensión lógica/E/S | 3.3 - 5 V |
| Tensión de alimentación | 3.3 - 5 V |
| Consumo actual | ~20 mA (típ.) |
| Resolución de pantalla | 128 x 32 píxeles |
| Interfaz | I2C |
| Dimensiones | 128 x 32 mm |
| Notas / variantes | Disponible en varios tamaños y interfaces |
- Comprueba la dirección I2C; normalmente 0x3C para pantallas OLED.
- Asegúrese de que la fuente de alimentación sea adecuada para evitar daños.
- Utilice resistencias pull-up para las líneas SDA y SCL si es necesario.
- Mantenga el cableado corto para reducir el ruido en la señal I2C.
- Considere la disipación de calor si alimenta varios módulos.
Instrucciones de cableado

Para cablear la pantalla OLED SSD1306, primero conecte el pin VCC de la pantalla a la salida de 5V del Arduino. A continuación, conecte el pin GND a uno de los pines de tierra del Arduino. Para la comunicación I2C, conecte el pin SDA de la pantalla al pin SDA del Arduino, que es A4 en el UNO. Luego, conecte el pin SCL de la pantalla al pin SCL del Arduino, que es A5 en el UNO. Si está usando un modelo de Arduino diferente, consulte el mapeo de pines específico para SDA y SCL.
Para componentes adicionales, si tienes un LED que quieres controlar, conéctalo al pin 9 a través de una resistencia de 330 ohmios. Asegúrate de conectar el otro extremo de la resistencia al ánodo del LED, mientras que el cátodo debe ir a masa. Esta configuración permitirá que el LED se encienda cuando el pin 9 esté activado.
Ejemplos de código y guía paso a paso
En el código de Arduino, comenzamos incluyendo las bibliotecas necesarias para la pantalla OLED. Un identificador clave esdisplay, que es una instancia de laAdafruit_SSD1306clase. La pantalla se inicializa en elsetup()función, donde además limpiamos la pantalla para prepararla para el dibujo.

void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display();
delay(2000);
display.clearDisplay();
}En elloop()función, definimos una variable de cadenavStringpara almacenar el valor del voltaje, que se actualiza dinámicamente. ElrobojaxText()La función se utiliza para mostrar texto en la pantalla en las coordenadas especificadas.
void loop() {
String vString = String(count, 3);
display.clearDisplay();
robojaxText("Voltage: ", 4, 3, 1, false);
robojaxText(vString, 72, 3, 1, false);
display.display();
count += 0.173;
delay(2000);
}ElrobojaxText()La función es crucial para posicionar y mostrar texto. Toma parámetros para la cadena de texto, las coordenadas x e y, el tamaño del texto y un booleano que determina si la pantalla debe actualizarse inmediatamente.
void robojaxText(String text, int x, int y, int size, boolean d) {
display.setTextSize(size);
display.setTextColor(WHITE);
display.setCursor(x, y);
display.println(text);
if(d) {
display.display();
}
}Esta función establece el tamaño del texto, el color y la posición del cursor antes de imprimir el texto. Recuerda ver el video para un recorrido completo del código (en el video a las 10:00).
Demostración / Qué esperar
Cuando el código se cargue en el Arduino, la pantalla OLED debería mostrar los valores de voltaje, temperatura y capacidad, actualizándose dinámicamente cada dos segundos. También deberías ver un rectángulo dibujado alrededor de los elementos de texto. Si la pantalla no muestra nada, asegúrate de que las conexiones sean correctas y de que la dirección I2C coincida con la especificada en el código.
Marcas de tiempo del vídeo
- 00:00- Introducción al proyecto
- 02:00- Instrucciones de cableado
- 05:00- Recorrido por el código
- 10:00- Demostración del resultado
/*********************************************************************
This is an example for our monochrome OLEDs based on SSD1306 drivers.
This example is for a 128x32 size display using I2C.
If you get the error: Adafruit_GFX.h not found, download the Adafruit-GFX Library
https://github.com/adafruit/Adafruit-GFX-Library
Purchase this OLED module from Amazon: https://amzn.to/36zFvTb
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, check license.txt for more information.
All text above, and the splash screen must be included in any redistribution.
* Watch the video for this code to learn it fully.
* Watch the video here: https://youtu.be/RjyulqVsz2o
* This code is offered "as is" without any warranty.
* Updated by Ahmad Shamshiri for Robojax.com video tutorial
* on March 18, 2018 at 10:21 in Ajax, Ontario, Canada.
* Please view other Robojax codes and videos at http://robojax.com/learn/arduino
* If you are sharing this code, you must keep this copyright note.
*
*********************************************************************/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
double count=0;
/*
* PIN connection:
* Pin connection see: https://www.arduino.cc/en/Reference/Wire
* for UNO: SDA to A4, SCL to A5
* for Mega2560: SDA to 20, SCL to 21
* for Leonardo: SDA to 2, SCL to 3
* for Due: SDA to 20, SCL to 21
* VCC to 5V
* GND to GND :-)
*/
// this is the Width and Height of Display which is 128 x 32
#define LOGO16_GLCD_HEIGHT 32
#define LOGO16_GLCD_WIDTH 128
#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
void setup() {
Serial.begin(9600);
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32)
display.display();
delay(2000);
// Clear the buffer.
display.clearDisplay();
}
void loop() {
String vString = String(count, 3);// using a float and the
display.clearDisplay();
robojaxText("Voltage: ", 4, 3, 1, false);
robojaxText(vString, 72, 3, 1, false);
robojaxText("V", 110, 3, 1, false);
robojaxText("Temperature: 32C", 4, 11, 1, false);
robojaxText("Capacity: 92.86L", 4, 21, 1, false);
//display.drawLine(1, 37, 100, 37, WHITE);
display.drawRect(1, 1, 126,31, WHITE);
//display.drawCircle(63,31, 31, WHITE);
//display.startscrollright(0x00, 0x0F);
display.display();
count +=0.173;
delay(2000);
}
/*
* robojaxText(String text, int x, int y,int size, boolean d)
* text is the text string to be printed
* x is the integer x position of text
* y is the integer y position of text
* size is the text size, 1, 2, 3 etc
* d is either true or false. If true, the display is updated.
*/
void robojaxText(String text, int x, int y,int size, boolean d) {
display.setTextSize(size);
display.setTextColor(WHITE);
display.setCursor(x,y);
display.println(text);
if(d){
display.display();
}
//delay(100);
}
Cosas que podrías necesitar
-
AmazonasCompra OLED 128x32 en Amazonamzn.to
-
AliExpressCompra SSD1306 OLED 128x32 en AliExpresss.click.aliexpress.com
Recursos y referencias
-
ExternoBiblioteca Adafruit-GFX (desde GitHub)github.com
-
ExternoBiblioteca SSD1306 (de GitHub)github.com
Archivos📁
No hay archivos disponibles.