Código de búsqueda

Código de Arduino y vídeo para pantalla OLED SSD1306 128 x 32 con I2C

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.

SSD1306 OLED 128x32

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

FabricanteAdafruit
Número de piezaSSD1306
Tensión lógica/E/S3.3 - 5 V
Tensión de alimentación3.3 - 5 V
Consumo actual~20 mA (típ.)
Resolución de pantalla128 x 32 píxeles
InterfazI2C
Dimensiones128 x 32 mm
Notas / variantesDisponible 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

Arduino wiring for SSD1306 OLED 128x32
Arduino wiring for SSD1306 OLED 128x32

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.

SSD1306 OLED 128x32
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

Imágenes

SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
Arduino wiring for SSD1306 OLED 128x32
Arduino wiring for SSD1306 OLED 128x32
83-Arduino code and video for SSD1306 OLED 128 x 32 display with I2C
Idioma: C++
/*********************************************************************
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

Recursos y referencias

Archivos📁

No hay archivos disponibles.