Pantalla OLED 0.96″ I2C/SPI
OLED (Organic light emitting diode) son las siglas que denominan el tipo de led del que están compuestas este tipo de pantallas. Incorpora el controlador SDD1306 que nos permite una conexión I2C o SPI fácil de usar. Es una pantalla monocroma y tiene una resolución de 128 x 64 pixels.
El tipo de interface se distingue, generalmente, por el número de pines. Las que incluyen interface I2C tienen 4 pines, otras con 7 pines implementan tanto SPI como I2C. La comunicación SPI es más rápida que la I2C, por tanto debemos dar preferencia a este tipo de conexión si necesitamos gráficos en movimiento, por ejemplo.
El consumo es extremadamente bajo comparado con otro tipo de pantallas, entorno a los 20mA. Éste dependerá del número de leds que necesitemos encender en un momento dado. Ésto las hacen muy interesantes para proyectos alimentados por baterías.
Algunas pantallas, aun siendo monocromas, presentan dos zonas en distintos colores, las 16 primeras filas de leds son amarillas y las siguientes son azules. Esto permite diferencias claramente una zona de títulos o indicadores y otra de presentación de datos.
Son pantallas de tamaño muy reducido, el módulo completo mide unos 25 x 26 mm y tienen una excelente luminosidad, incluso en ambientes soleados.
Características generales
- Alimentación: 3,3 – 5V
- Consumo: sobre los 20mA
- Resolución: 128 x 64 pixels
- Color: monocromo
- Tamaño del módulo: 25 x 26 mm (0,96″ de pantalla)
Más información en el datasheet.
Vemos que aceptan niveles lógicos tanto de 3,3V como de 5V por tanto no tendremos problemas de adaptación de niveles en las distintas placas de Arduino.
Conexión I2C
La conexión I2C es la más sencilla, ya que sólo necesita dos cables para funcionar. Se trata de una conexión típica I2C.
Arduino | OLED I2C |
5V | VCC |
GND | GND |
A4 | SDA |
A5 | SCL |
Además de los pines de alimentación VCC y GND, conectaremos el pin A4 de Arduino al SDA del sensor y el pin A5 de Arduino al SCL del sensor.
Conexión SPI
Si nuestra pantalla es un modelo con conexión SPI, las conexiones son las siguientes:
Arduino | OLED SPI |
5V | VCC |
GND | GND |
D12 | CS |
D11 | DC |
D13 | RES |
D9 | D1 |
D10 | D0 |
Código Arduino I2C
Podemos controlar la pantalla desde nuestro código con la librería Adafruit_SSD1306 desarrollada por Adafruit. Además, si queremos mostrar gráficos podemos usar la librería Adafruit GFX.
El siguiente ejemplo inicializa la pantalla en la dirección I2C 0x3C y muestra «Hola mundo.» en el display:
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // Anchura de la pantalla en pixels
#define SCREEN_HEIGHT 64 // Altura de la pantalla en piexels
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // 0x3C es la dirección I2C
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 10);
display.println("Hola mundo.");
display.display();
}
void loop() {
}
Hay muchos dispositivos que se conectan a través del bus I2C. En ocasiones no sabemos la dirección I2C que tiene asignada el dispositivo. El siguiente código arduino escanea las posibles direcciones y muestra en...
Código Arduino SPI
Para el modelo de conexión SPI, el código es un poco distinto. Además, debemos asegurarnos de que en la librería Adafruit_SSD1306.h
, descomentamos la instrucción #define SSD1306_128_64
para especificar correctamente el tamaño de nuestra pantalla.
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SH1106.h!");
#endif
void setup()
{
display.begin(SSD1306_SWITCHCAPVCC);
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,10);
display.println("Hola mundo.");
display.display();
}
void loop() {
}
Comentarios recientes