Skip to main content

Grove - OLED Display 0.96 inch

pir

Grove - OLED Display 0.96" es un módulo OLED monocromo de matriz de 128×64 puntos con interfaz I2C de 4 pines Grove. En comparación con las pantallas LCD, las OLED son más competitivas y ofrecen numerosas ventajas como alto brillo, autoemisión, alto contraste, perfil delgado, amplio ángulo de visión, amplio rango de temperatura y bajo consumo de energía. Tiene una pantalla más grande, por lo que puede mostrar más contenido que la OLED 96×96.

pir

Versión

Versión del productoCambiosFecha de lanzamiento
Grove - OLED Display 0.96 inch V1.1InicialOct 2015

Características

  • Interfaz compatible con Grove
  • Modo de comunicación: I2C
  • Bajo consumo de energía
  • Color de visualización: Blanco
  • Amplio rango de temperatura de funcionamiento: -20℃~70℃
  • Dirección I2C 0x3C
note

Si desea usar múltiples dispositivos I2C, consulte Software I2C.

warning

Atención: un impacto fuerte o estrés sobre la OLED puede provocar la rotura de la pantalla.

tip

Para más detalles sobre los módulos Grove, consulte Grove System

Especificaciones

ÍtemsMínTípicoMáxUnidad
Tensión de alimentación (VCC)3.35.05.5V
Controlador IC-SSD1308Z--
Color de visualización-Blanco--
Matriz de puntos-128×64--
Tamaño del panel-26.7(An)×19.26(Al)-mm
Área activa-21.74(An)×11.175 (Al)-mm
Paso de punto-0.17(An)×0.175 (Al)-mm
Tamaño de punto-0.15(An)×0.15 (Al)-mm
Rango de temperatura de funcionamiento--20~70-
tip

Para más detalles sobre los módulos Grove, consulte Grove System

Plataformas compatibles

ArduinoRaspberry Pi

pir

pir

caution

Las plataformas mencionadas arriba como compatibles indican la compatibilidad de software o teórica. En la mayoría de los casos, solo proporcionamos biblioteca de software o ejemplos de código para la plataforma Arduino. No es posible ofrecer bibliotecas/demos para todas las posibles MCU. Por lo tanto, los usuarios deben escribir su propia biblioteca de software.

Comenzando

note

Si es la primera vez que trabaja con Arduino, le recomendamos encarecidamente consultar Getting Started with Arduino antes de empezar.

Jugar con Arduino

Demostración

El OLED 128×64 utiliza todos los pines del chip SSD1308; el punto de origen por defecto está en la esquina superior izquierda. También puede cambiar el punto de origen ajustando el programa para mostrar los patrones deseados. Para más detalles, consulte SSD1308_1.0.pdf y LY190-128064.pdf.

Hardware

  • Paso 1. Prepare los siguientes elementos:
Seeeduino V4Base ShieldGrove - OLED Display 0.96inch

pir

pir

pir

Get ONE NowGet ONE NowGet ONE Now
  • Paso 2. Conecte Grove OLED Display 128×64 al puerto I2C del Grove Base Shield.
  • Paso 3. Inserte Grove - Base Shield en Seeeduino.
  • Paso 4. Conecte Seeeduino al PC mediante un cable USB.

pir

note

Si no dispone de Grove Base Shield, también puede conectar directamente Grove - OLED Display 0.96 inch a Seeeduino como se muestra a continuación.

SeeeduinoGrove - OLED Display 0.96 inch
5VRojo
GNDNegro
SDABlanco
SCLAmarillo

Software

#include <Arduino.h>
#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

U8G2_SSD1306_128X64_ALT0_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // SSD1306 and SSD1308Z are compatible

// U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); //Low spped I2C

void setup(void) {
u8g2.begin();
}

void loop(void) {
u8g2.clearBuffer(); // clear the internal memory
u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
u8g2.drawStr(0,10,"Hello World!"); // write something to the internal memory
u8g2.sendBuffer(); // transfer internal memory to the display
delay(1000);
}

  • Paso 3. Verá "Hello World!" en la pantalla.

Jugar con Raspberry Pi (con Grove Base Hat para Raspberry Pi)

Hardware

  • Paso 1. Elementos utilizados en este proyecto:
Raspberry piGrove Base Hat for RasPiGrove - OLED Display 0.96 inch

pir

pir

pir

Get ONE NowGet ONE NowGet ONE Now
  • Paso 2. Inserte Grove Base Hat en la Raspberry.
  • Paso 3. Conecte la pantalla OLED al puerto I^2^C del Base Hat.
  • Paso 4. Conecte la Raspberry Pi al PC mediante un cable USB.

pir

Software

note

Si está utilizando Raspberry Pi con Raspberrypi OS >= Bullseye, debe usar esta línea de comando solo con Python3.

  • Paso 1. Siga Setting Software para configurar el entorno de desarrollo.
  • Paso 2. Descargue el archivo fuente clonando la biblioteca grove.py.
cd ~
git clone https://github.com/Seeed-Studio/grove.py

  • Paso 3. Ejecute el siguiente comando para ejecutar el código.
cd grove.py/grove
python3 grove_oled_display_128x64.py

A continuación se muestra el código de grove_oled_display_128x64.py.


import time

from grove.i2c import Bus

_COMMAND_MODE = 0x80
_DATA_MODE = 0x40
_NORMAL_DISPLAY = 0xA6

_DISPLAY_OFF = 0xAE
_DISPLAY_ON = 0xAF
_INVERSE_DISPLAY = 0xA7
_SET_BRIGHTNESS = 0x81


BasicFont = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00],
[0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, 0x00],
[0x00, 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, 0x00],
[0x00, 0x23, 0x13, 0x08, 0x64, 0x62, 0x00, 0x00],
[0x00, 0x36, 0x49, 0x55, 0x22, 0x50, 0x00, 0x00],
[0x00, 0x00, 0x05, 0x03, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x08, 0x2A, 0x1C, 0x2A, 0x08, 0x00, 0x00],
[0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x00],
[0x00, 0xA0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00],
[0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x00],
[0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, 0x00],
[0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, 0x00],
[0x00, 0x62, 0x51, 0x49, 0x49, 0x46, 0x00, 0x00],
[0x00, 0x22, 0x41, 0x49, 0x49, 0x36, 0x00, 0x00],
[0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, 0x00],
[0x00, 0x27, 0x45, 0x45, 0x45, 0x39, 0x00, 0x00],
[0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30, 0x00, 0x00],
[0x00, 0x01, 0x71, 0x09, 0x05, 0x03, 0x00, 0x00],
[0x00, 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, 0x00],
[0x00, 0x06, 0x49, 0x49, 0x29, 0x1E, 0x00, 0x00],
[0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0xAC, 0x6C, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x00, 0x00],
[0x00, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x00],
[0x00, 0x41, 0x22, 0x14, 0x08, 0x00, 0x00, 0x00],
[0x00, 0x02, 0x01, 0x51, 0x09, 0x06, 0x00, 0x00],
[0x00, 0x32, 0x49, 0x79, 0x41, 0x3E, 0x00, 0x00],
[0x00, 0x7E, 0x09, 0x09, 0x09, 0x7E, 0x00, 0x00],
[0x00, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, 0x00],
[0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C, 0x00, 0x00],
[0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, 0x00],
[0x00, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x41, 0x51, 0x72, 0x00, 0x00],
[0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x00],
[0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, 0x00],
[0x00, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, 0x00],
[0x00, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00],
[0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F, 0x00, 0x00],
[0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x00],
[0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, 0x00],
[0x00, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, 0x00],
[0x00, 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, 0x00],
[0x00, 0x01, 0x01, 0x7F, 0x01, 0x01, 0x00, 0x00],
[0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, 0x00],
[0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, 0x00],
[0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, 0x00],
[0x00, 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, 0x00],
[0x00, 0x03, 0x04, 0x78, 0x04, 0x03, 0x00, 0x00],
[0x00, 0x61, 0x51, 0x49, 0x45, 0x43, 0x00, 0x00],
[0x00, 0x7F, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00],
[0x00, 0x41, 0x41, 0x7F, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, 0x00],
[0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00],
[0x00, 0x01, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x20, 0x54, 0x54, 0x54, 0x78, 0x00, 0x00],
[0x00, 0x7F, 0x48, 0x44, 0x44, 0x38, 0x00, 0x00],
[0x00, 0x38, 0x44, 0x44, 0x28, 0x00, 0x00, 0x00],
[0x00, 0x38, 0x44, 0x44, 0x48, 0x7F, 0x00, 0x00],
[0x00, 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, 0x00],
[0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, 0x00, 0x00],
[0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C, 0x00, 0x00],
[0x00, 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x00],
[0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x80, 0x84, 0x7D, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00],
[0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x7C, 0x04, 0x18, 0x04, 0x78, 0x00, 0x00],
[0x00, 0x7C, 0x08, 0x04, 0x7C, 0x00, 0x00, 0x00],
[0x00, 0x38, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00],
[0x00, 0xFC, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00],
[0x00, 0x18, 0x24, 0x24, 0xFC, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x7C, 0x08, 0x04, 0x00, 0x00, 0x00],
[0x00, 0x48, 0x54, 0x54, 0x24, 0x00, 0x00, 0x00],
[0x00, 0x04, 0x7F, 0x44, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x3C, 0x40, 0x40, 0x7C, 0x00, 0x00, 0x00],
[0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, 0x00],
[0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, 0x00],
[0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, 0x00],
[0x00, 0x1C, 0xA0, 0xA0, 0x7C, 0x00, 0x00, 0x00],
[0x00, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, 0x00],
[0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x41, 0x36, 0x08, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x00, 0x00],
[0x00, 0x02, 0x05, 0x05, 0x02, 0x00, 0x00, 0x00]]


class GroveOledDisplay128x64(object):
HORIZONTAL = 0x00
VERTICAL = 0x01
PAGE = 0x02

def __init__(self, bus=None, address=0x3C):
self.bus = Bus(bus)
self.address = address

self.off()
self.inverse = False
self.mode = self.HORIZONTAL

self.clear()
self.on()

def on(self):
self.send_command(_DISPLAY_ON)

def off(self):
self.send_command(_DISPLAY_OFF)

def send_command(self, command):
self.bus.write_byte_data(self.address, _COMMAND_MODE, command)

def send_data(self, data):
self.bus.write_byte_data(self.address, _DATA_MODE, data)

def send_commands(self, commands):
for c in commands:
self.send_command(c)

def clear(self):
self.off()
for i in range(8):
self.set_cursor(i, 0)
self.puts(' ' * 16)

self.on()
self.set_cursor(0, 0)

@property
def inverse(self):
return self._inverse

@inverse.setter
def inverse(self, enable):
self.send_command(_INVERSE_DISPLAY if enable else _NORMAL_DISPLAY)
self._inverse = enable

@property
def mode(self):
return self._mode

@mode.setter
def mode(self, mode):
self.send_command(0x20)
self.send_command(mode)
self._mode = mode

def set_cursor(self, row, column):
self.send_command(0xB0 + row)
self.send_command(0x00 + (8*column & 0x0F))
self.send_command(0x10 + ((8*column>>4)&0x0F))

def putc(self, c):
C_add = ord(c)
if C_add < 32 or C_add > 127: # Ignore non-printable ASCII characters
c = ' '
C_add = ord(c)

for i in range(0, 8):
self.send_data(BasicFont[C_add-32][i])

def puts(self, text):
for c in text:
self.putc(c)

def show_image(self, image):
from PIL import Image
import numpy as np

im = Image.open(image)

bw = im.convert('1')
pixels = np.array(bw.getdata())
page_size = 128 * 8

self.set_cursor(0, 0)
for page in range(8):
start = page_size * page
end = start + page_size

for i in range(start, start + 128):
data = np.packbits(pixels[i:end:128][::-1])[0]
self.send_data(data)


def main():
display = GroveOledDisplay128x64()

display.set_cursor(0, 0)
display.puts('hello')
display.set_cursor(1, 4)
display.puts('world')

if __name__ == "__main__":
main()

Parece que no ocurre nada en la terminal; sin embargo, si observa su OLED, encontrará la frase más famosa del mundo cibernético. 😄

note

Si usa la herramienta I2C para escanear la dirección I2C del módulo Grove, puede encontrar dos o más direcciones. 0x04 es la dirección del Grove Base Hat para Raspberry Pi.

Jugar con Raspberry Pi (con GrovePi_Plus)

El script de Python para BeagleBone Green a continuación también funciona para Raspberry Pi, pero el bus I2C es diferente. En Raspberry Pi 2/3, el bus I2C es el 1. El script funcionará en Pi cambiando bus=2 por bus=1.

Hardware

  • Paso 1. Prepare los siguientes elementos:
Raspberry piGrovePi_PlusGrove - OLED Display 0.96 inch

pir

pir

pir

Get One NowGet One NowGet One Now
  • Paso 2. Inserte GrovePi_Plus en la Raspberry.
  • Paso 3. Conecte Grove - OLED Display 0.96 inch al puerto I2C-2 de GrovePi_Plus.
  • Paso 4. Conecte la Raspberry al PC mediante un cable USB.

pir

Software

  • Paso 1. Siga Setting Software para configurar el entorno de desarrollo.

  • Paso 2. Vaya al directorio de demostraciones:

cd yourpath/GrovePi/Software/Python/
  • Paso 3. Ver el código
nano Grove-OLED_Display_0.96inch.py   # "Ctrl+x" para salir #
import time
import smbus2 as smbus

_COMMAND_MODE = 0x80
_DATA_MODE = 0x40
_NORMAL_DISPLAY = 0xA6

_DISPLAY_OFF = 0xAE
_DISPLAY_ON = 0xAF
_INVERSE_DISPLAY = 0xA7
_SET_BRIGHTNESS = 0x81


BasicFont = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00],
[0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, 0x00],
[0x00, 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, 0x00],
[0x00, 0x23, 0x13, 0x08, 0x64, 0x62, 0x00, 0x00],
[0x00, 0x36, 0x49, 0x55, 0x22, 0x50, 0x00, 0x00],
[0x00, 0x00, 0x05, 0x03, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x08, 0x2A, 0x1C, 0x2A, 0x08, 0x00, 0x00],
[0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x00],
[0x00, 0xA0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00],
[0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x00],
[0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, 0x00],
[0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, 0x00],
[0x00, 0x62, 0x51, 0x49, 0x49, 0x46, 0x00, 0x00],
[0x00, 0x22, 0x41, 0x49, 0x49, 0x36, 0x00, 0x00],
[0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, 0x00],
[0x00, 0x27, 0x45, 0x45, 0x45, 0x39, 0x00, 0x00],
[0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30, 0x00, 0x00],
[0x00, 0x01, 0x71, 0x09, 0x05, 0x03, 0x00, 0x00],
[0x00, 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, 0x00],
[0x00, 0x06, 0x49, 0x49, 0x29, 0x1E, 0x00, 0x00],
[0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0xAC, 0x6C, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x00, 0x00],
[0x00, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x00],
[0x00, 0x41, 0x22, 0x14, 0x08, 0x00, 0x00, 0x00],
[0x00, 0x02, 0x01, 0x51, 0x09, 0x06, 0x00, 0x00],
[0x00, 0x32, 0x49, 0x79, 0x41, 0x3E, 0x00, 0x00],
[0x00, 0x7E, 0x09, 0x09, 0x09, 0x7E, 0x00, 0x00],
[0x00, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, 0x00],
[0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C, 0x00, 0x00],
[0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, 0x00],
[0x00, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x41, 0x51, 0x72, 0x00, 0x00],
[0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x00],
[0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, 0x00],
[0x00, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, 0x00],
[0x00, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00],
[0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F, 0x00, 0x00],
[0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x00],
[0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, 0x00],
[0x00, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, 0x00],
[0x00, 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, 0x00],
[0x00, 0x01, 0x01, 0x7F, 0x01, 0x01, 0x00, 0x00],
[0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, 0x00],
[0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, 0x00],
[0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, 0x00],
[0x00, 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, 0x00],
[0x00, 0x03, 0x04, 0x78, 0x04, 0x03, 0x00, 0x00],
[0x00, 0x61, 0x51, 0x49, 0x45, 0x43, 0x00, 0x00],
[0x00, 0x7F, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00],
[0x00, 0x41, 0x41, 0x7F, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, 0x00],
[0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00],
[0x00, 0x01, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x20, 0x54, 0x54, 0x54, 0x78, 0x00, 0x00],
[0x00, 0x7F, 0x48, 0x44, 0x44, 0x38, 0x00, 0x00],
[0x00, 0x38, 0x44, 0x44, 0x28, 0x00, 0x00, 0x00],
[0x00, 0x38, 0x44, 0x44, 0x48, 0x7F, 0x00, 0x00],
[0x00, 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, 0x00],
[0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, 0x00, 0x00],
[0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C, 0x00, 0x00],
[0x00, 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x00],
[0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x80, 0x84, 0x7D, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00],
[0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x7C, 0x04, 0x18, 0x04, 0x78, 0x00, 0x00],
[0x00, 0x7C, 0x08, 0x04, 0x7C, 0x00, 0x00, 0x00],
[0x00, 0x38, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00],
[0x00, 0xFC, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00],
[0x00, 0x18, 0x24, 0x24, 0xFC, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x7C, 0x08, 0x04, 0x00, 0x00, 0x00],
[0x00, 0x48, 0x54, 0x54, 0x24, 0x00, 0x00, 0x00],
[0x00, 0x04, 0x7F, 0x44, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x3C, 0x40, 0x40, 0x7C, 0x00, 0x00, 0x00],
[0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, 0x00],
[0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, 0x00],
[0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, 0x00],
[0x00, 0x1C, 0xA0, 0xA0, 0x7C, 0x00, 0x00, 0x00],
[0x00, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, 0x00],
[0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x41, 0x36, 0x08, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x00, 0x00],
[0x00, 0x02, 0x05, 0x05, 0x02, 0x00, 0x00, 0x00]]


class GroveOledDisplay128x64(object):
HORIZONTAL = 0x00
VERTICAL = 0x01
PAGE = 0x02

def __init__(self, bus=2, address=0x3C):
self.bus = smbus.SMBus(bus)
self.address = address

self.off()
self.inverse = False
self.mode = self.HORIZONTAL

self.clear()
self.on()

def on(self):
self.send_command(_DISPLAY_ON)

def off(self):
self.send_command(_DISPLAY_OFF)

def send_command(self, command):
self.bus.write_byte_data(self.address, _COMMAND_MODE, command)

def send_data(self, data):
self.bus.write_byte_data(self.address, _DATA_MODE, data)

def send_commands(self, commands):
for c in commands:
self.send_command(c)

def clear(self):
self.off()
for i in range(8):
self.set_cursor(i, 0)
self.puts(' ' * 16)

self.on()
self.set_cursor(0, 0)

@property
def inverse(self):
return self._inverse

@inverse.setter
def inverse(self, enable):
self.send_command(_INVERSE_DISPLAY if enable else _NORMAL_DISPLAY)
self._inverse = enable

@property
def mode(self):
return self._mode

@mode.setter
def mode(self, mode):
self.send_command(0x20)
self.send_command(mode)
self._mode = mode

def set_cursor(self, row, column):
self.send_command(0xB0 + row)
self.send_command(0x00 + (8*column & 0x0F))
self.send_command(0x10 + ((8*column>>4)&0x0F))

def putc(self, c):
C_add = ord(c)
if C_add < 32 or C_add > 127: # Ignore non-printable ASCII characters
c = ' '
C_add = ord(c)

for i in range(0, 8):
self.send_data(BasicFont[C_add-32][i])

def puts(self, text):
for c in text:
self.putc(c)

def show_image(self, image):
from PIL import Image
import numpy as np

im = Image.open(image)

bw = im.convert('1')
pixels = np.array(bw.getdata())
page_size = 128 * 8

self.set_cursor(0, 0)
for page in range(8):
start = page_size * page
end = start + page_size

for i in range(start, start + 128):
data = np.packbits(pixels[i:end:128][::-1])[0]
self.send_data(data)


if __name__ == "__main__":
display = GroveOledDisplay128x64(bus=1)

display.set_cursor(0, 0)
display.puts('hello')
display.set_cursor(1, 4)
display.puts('world')
  • Paso 4: Instale la biblioteca smbus2 sudo pip install smbus2

  • Paso 5: Ejecute el código. Veremos que el Grove - OLED muestra "Hello World".

sudo python Grove-OLED_Display_0.96inch.py

Jugar con Beaglebone Green

Para comenzar a editar programas que residen en BBG, puede usar el Cloud9 IDE y consultar el Beaglebone Green Wiki.

Aquí están los pasos para mostrar "Hello World" en la OLED.

Hardware

  • Paso 1. Conecte Grove - OLED al conector Grove I2C en BBG.
  • Paso 2. Conecte Seeeduino al PC mediante un cable USB.

Software

  • Paso 1: Haga clic en "+" en la esquina superior derecha para crear un archivo nuevo.

pir

pir

  • Paso 2: Copie y pegue el siguiente código en la nueva pestaña
import time
import smbus2 as smbus

_COMMAND_MODE = 0x80
_DATA_MODE = 0x40
_NORMAL_DISPLAY = 0xA6

_DISPLAY_OFF = 0xAE
_DISPLAY_ON = 0xAF
_INVERSE_DISPLAY = 0xA7
_SET_BRIGHTNESS = 0x81


BasicFont = [[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00],
[0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, 0x00],
[0x00, 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, 0x00],
[0x00, 0x23, 0x13, 0x08, 0x64, 0x62, 0x00, 0x00],
[0x00, 0x36, 0x49, 0x55, 0x22, 0x50, 0x00, 0x00],
[0x00, 0x00, 0x05, 0x03, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x08, 0x2A, 0x1C, 0x2A, 0x08, 0x00, 0x00],
[0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x00],
[0x00, 0xA0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00],
[0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x00],
[0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, 0x00],
[0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, 0x00],
[0x00, 0x62, 0x51, 0x49, 0x49, 0x46, 0x00, 0x00],
[0x00, 0x22, 0x41, 0x49, 0x49, 0x36, 0x00, 0x00],
[0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, 0x00],
[0x00, 0x27, 0x45, 0x45, 0x45, 0x39, 0x00, 0x00],
[0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30, 0x00, 0x00],
[0x00, 0x01, 0x71, 0x09, 0x05, 0x03, 0x00, 0x00],
[0x00, 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, 0x00],
[0x00, 0x06, 0x49, 0x49, 0x29, 0x1E, 0x00, 0x00],
[0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0xAC, 0x6C, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x00, 0x00],
[0x00, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x00],
[0x00, 0x41, 0x22, 0x14, 0x08, 0x00, 0x00, 0x00],
[0x00, 0x02, 0x01, 0x51, 0x09, 0x06, 0x00, 0x00],
[0x00, 0x32, 0x49, 0x79, 0x41, 0x3E, 0x00, 0x00],
[0x00, 0x7E, 0x09, 0x09, 0x09, 0x7E, 0x00, 0x00],
[0x00, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, 0x00],
[0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C, 0x00, 0x00],
[0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, 0x00],
[0x00, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x41, 0x51, 0x72, 0x00, 0x00],
[0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x00],
[0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, 0x00],
[0x00, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, 0x00],
[0x00, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00],
[0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F, 0x00, 0x00],
[0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x00],
[0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, 0x00],
[0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, 0x00],
[0x00, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, 0x00],
[0x00, 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, 0x00],
[0x00, 0x01, 0x01, 0x7F, 0x01, 0x01, 0x00, 0x00],
[0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, 0x00],
[0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, 0x00],
[0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, 0x00],
[0x00, 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, 0x00],
[0x00, 0x03, 0x04, 0x78, 0x04, 0x03, 0x00, 0x00],
[0x00, 0x61, 0x51, 0x49, 0x45, 0x43, 0x00, 0x00],
[0x00, 0x7F, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00],
[0x00, 0x41, 0x41, 0x7F, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, 0x00],
[0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00],
[0x00, 0x01, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x20, 0x54, 0x54, 0x54, 0x78, 0x00, 0x00],
[0x00, 0x7F, 0x48, 0x44, 0x44, 0x38, 0x00, 0x00],
[0x00, 0x38, 0x44, 0x44, 0x28, 0x00, 0x00, 0x00],
[0x00, 0x38, 0x44, 0x44, 0x48, 0x7F, 0x00, 0x00],
[0x00, 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, 0x00],
[0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, 0x00, 0x00],
[0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C, 0x00, 0x00],
[0x00, 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x00],
[0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x80, 0x84, 0x7D, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00],
[0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x7C, 0x04, 0x18, 0x04, 0x78, 0x00, 0x00],
[0x00, 0x7C, 0x08, 0x04, 0x7C, 0x00, 0x00, 0x00],
[0x00, 0x38, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00],
[0x00, 0xFC, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00],
[0x00, 0x18, 0x24, 0x24, 0xFC, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x7C, 0x08, 0x04, 0x00, 0x00, 0x00],
[0x00, 0x48, 0x54, 0x54, 0x24, 0x00, 0x00, 0x00],
[0x00, 0x04, 0x7F, 0x44, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x3C, 0x40, 0x40, 0x7C, 0x00, 0x00, 0x00],
[0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, 0x00],
[0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, 0x00],
[0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, 0x00],
[0x00, 0x1C, 0xA0, 0xA0, 0x7C, 0x00, 0x00, 0x00],
[0x00, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, 0x00],
[0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x41, 0x36, 0x08, 0x00, 0x00, 0x00, 0x00],
[0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x00, 0x00],
[0x00, 0x02, 0x05, 0x05, 0x02, 0x00, 0x00, 0x00]]


class GroveOledDisplay128x64(object):
HORIZONTAL = 0x00
VERTICAL = 0x01
PAGE = 0x02

def __init__(self, bus=2, address=0x3C):
self.bus = smbus.SMBus(bus)
self.address = address

self.off()
self.inverse = False
self.mode = self.HORIZONTAL

self.clear()
self.on()

def on(self):
self.send_command(_DISPLAY_ON)

def off(self):
self.send_command(_DISPLAY_OFF)

def send_command(self, command):
self.bus.write_byte_data(self.address, _COMMAND_MODE, command)

def send_data(self, data):
self.bus.write_byte_data(self.address, _DATA_MODE, data)

def send_commands(self, commands):
for c in commands:
self.send_command(c)

def clear(self):
self.off()
for i in range(8):
self.set_cursor(i, 0)
self.puts(' ' * 16)

self.on()
self.set_cursor(0, 0)

@property
def inverse(self):
return self._inverse

@inverse.setter
def inverse(self, enable):
self.send_command(_INVERSE_DISPLAY if enable else _NORMAL_DISPLAY)
self._inverse = enable

@property
def mode(self):
return self._mode

@mode.setter
def mode(self, mode):
self.send_command(0x20)
self.send_command(mode)
self._mode = mode

def set_cursor(self, row, column):
self.send_command(0xB0 + row)
self.send_command(0x00 + (8*column & 0x0F))
self.send_command(0x10 + ((8*column>>4)&0x0F))

def putc(self, c):
C_add = ord(c)
if C_add < 32 or C_add > 127: # Ignore non-printable ASCII characters
c = ' '
C_add = ord(c)

for i in range(0, 8):
self.send_data(BasicFont[C_add-32][i])

def puts(self, text):
for c in text:
self.putc(c)

def show_image(self, image):
from PIL import Image
import numpy as np

im = Image.open(image)

bw = im.convert('1')
pixels = np.array(bw.getdata())
page_size = 128 * 8

self.set_cursor(0, 0)
for page in range(8):
start = page_size * page
end = start + page_size

for i in range(start, start + 128):
data = np.packbits(pixels[i:end:128][::-1])[0]
self.send_data(data)


if __name__ == "__main__":
display = GroveOledDisplay128x64(bus=2)

display.set_cursor(0, 0)
display.puts('hello')
display.set_cursor(1, 4)
display.puts('world')
  • Paso 3: Guarde el archivo haciendo clic en el icono del disco con la extensión .py.

  • Paso 4: Instale la biblioteca smbus2 sudo pip3 install smbus2

  • Paso 5: Ejecute el código. Veremos que el Grove - OLED muestra "Hello World".

sudo python3 Grove-OLED_Display_0.96inch.py

Visor de esquemáticos en línea

Recursos

Soporte técnico y debate sobre el producto

¡Gracias por elegir nuestros productos! Ofrecemos distintos canales de soporte para garantizar que su experiencia sea lo más fluida posible. Disponemos de varios canales de comunicación para atender diferentes preferencias y necesidades.

Loading Comments...