Display Oled SPI Intro - pensactius/Tutoriales GitHub Wiki
TODO: Añadir cómo instalar librería u8g2
(La siguiente información está extraído de https://www.luisllamas.es/conectar-arduino-a-una-pantalla-oled-de-0-96/)
Un OLED (Organic light-emitting diode) es un tipo de LED en el que la capa emisiva es está formada por un compuesto orgánico que emite luz en respuesta a la electricidad.
Al igual que el resto de tipos de pantallas, las OLED necesitan un controlador específico que convierta los datos recibidos en las señales electrónicas para controlar la pantalla.
Las pantallas OLED tienen la ventaja de tener un consumo muy bajo, en torno a 20mA, dado que solo se enciende el pixel necesario y no requieren de backlight. Esto es especialmente interesante en aplicaciones que funcionan con baterías.
Además, tienen una mejor visibilidad en ambientes luminosos, como bajo el sol. Aunque el pequeño tamaño de estas pantallas OLED de 0.96" pueden ser un problema para su correcta visualización.
La comunicación puede realizarse, según modelos, por bus SPI o por bus I2C por lo que es sencillo obtener los datos medidos. La tensión de alimentación admite voltajes de 3.3V y 5V.
En el campo de la electrónica casera, se comercializan unas pequeñas pantallas OLED de diferentes tamaños -los más habituales de 0.96" o 1.3"- listas para conectar a Arduino. Estas pantallas incorporan el controlador SDD1306 o SH1106 y tienen un tamaño muy reducido (de 25mm x 14mm la de 0.96" y 29mm x 15mm las de 1.3"). Son monocromas y tienen una resolución de 128x64 pixels
Si buscamos estas pantallas en Aliexpress o similares nos encontraremos que es muy confuso saber qué modelo estás comprando. Es importante fijarse qué protocolo usan (I2C vs SPI) y el controlador (SSD1306 vs SH1106). No hay que asumir que por tener controlador SSD1306 será I2C o viceversa, ya que puede haber SSD1306 I2C y SPI y lo mismo para el SH1106.
Respecto al protocolo, podemos guiarnos por el número de pines, en general las que usan SPI tendrán 7pines y las que usan I2C 4 pines. Debajo dejo una muestra de una pantalla I2C y otra SPI:
#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>
// Descomentar la línea correspondiente al modelo de pantalla a usar
// En PensActius, el modelo de 1.3 pulgadas es el modelo SH1106,
// y la de 0.96 pulgadas es el modelo SSD1306.
U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=ss*/ 10, /* dc=*/ 9, /* reset=*/ 8);
//U8G2_SH1106_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
void setup() {
u8g2.begin();
}
void loop() {
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_ncenB10_tr);
u8g2.drawStr(0,24,"Hello World!");
} while ( u8g2.nextPage() );
}
- Modifica el programa anterior para mostrar un texto lo suficientemente largo para necesitar dos líneas. Por ejemplo, muestra el mensaje "Esto es una prueba de texto largo". Si intentas escribir este texto directamente verás que queda "cortado" por la derecha. Deberás escribir dos sentencias
drawStr()
, con su correspondientes coordenadas. Sabiendo que la fuente u8g2_font_ncenB10_tr tiene una altura de 15 pixels, deberás calcular qué coordenada y usar para que aparezca una línea debajo de la otra.