Grove - OLED Display 0.96 inch

Introduction

Grove - OLED Display 0.96” module is an OLED monochrome 128×64dot matrix display module with Grove 4pin I2C Interface.Comparing to LCD, OLED screens are way more competitive, which has a number of advantages such as high brightness, self-emission, high contrast ratio, slim / thin outline, wide viewing angle, wide temperature range, and low power consumption. It has bigger screen so that it can display more contents than the OLED 96×96.

Features

  • Grove compatible interface
  • Communicate Mode:I2C
  • Low power consumption
  • Display Color: White
  • Wide range of operating temperature:-20℃~70℃

Warning

Please notice: heavy impact or stress on the OLED will cause the breakdown of screen.

Specifications

Items Min Norm Max Unit
Power Voltage (VCC) 3.3 5.0 5.5 V
Driver IC - SSD1308Z - -
Display Color - White - -
Dot Matrix - 128×64 - -
Panel Size - 26.7(W)×19.26(H) - mm
Active Area - 21.74(W)×11.175 (H) - mm
Dot Pitch - 0.17(W)×0.175 (H) - mm
Dot Size - 0.15(W)×0.15 (H) - mm
Wide range of operating temperature - -20~70 -

Getting Started

With Arduino

The OLED128*64 uses all the pins of SSD1308 chip, the default original point is on the top left corner. You can also change the original point by adjusting the program and in order to display your desired patterns. For more details, please consult SSD1308_1.0.pdf and LY190-128064.pdf.

Here we demonstrate how to display “Hello World” on the screen.

  • Plug the Grove OLED Display 128*64 onto the I2C port on Grove Base Shield, and then plug the Base Shield onto Arduino or Seeeduino;

  • Download the library code from GitHub;

  • Download and upload the code. If you do not know how to upload an Arduino sketch, please visit https://www.arduino.cc/en/Guide/Windows for Windows user or https://www.arduino.cc/en/Guide/MacOSX for Mac user. You can see the result as below.

Tips: if you use Seeeduino, please also select Boards under Tools as you upload sketches.

With Beaglebone Green

To begin editing programs that live on BBG, you can use the Cloud9 IDE. As a simple exercise to become familiar with Cloud9 IDE, creating a simple application to blink one of the 4 user programmable LEDs on the BeagleBone is a good start. If this is your first time to use Cloud9 IDE, please follow this link.

Step1: Click the “+” in the top-right to create a new file.

Step2:Copy and paste the following code into the new tab

from Adafruit_I2C import Adafruit_I2C
import time
import math


Oled = Adafruit_I2C(0x3c)
Command_Mode=0x80
Data_mode=0x40

grayH= 0xF0
grayL= 0x0F
Normal_Display_Cmd=0xA4

BasicFont = [[0 for x in xrange(8)] for x in xrange(10)]
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]]

def oled_init():
    sendCommand(0xFD) # Unlock OLED driver IC MCU interface from entering command. i.e: Accept commands
    sendCommand(0x12)
    sendCommand(0xAE) # Set display off
    sendCommand(0xA8) # set multiplex ratio
    sendCommand(0x5F) # 96
    sendCommand(0xA1) # set display start line
    sendCommand(0x00)
    sendCommand(0xA2) # set display offset
    sendCommand(0x60)
    sendCommand(0xA0) # set remap
    sendCommand(0x46)
    sendCommand(0xAB) # set vdd internal
    sendCommand(0x01) 
    sendCommand(0x81) # set contrasr
    sendCommand(0x53) # 100 nit
    sendCommand(0xB1) # Set Phase Length
    sendCommand(0X51) 
    sendCommand(0xB3) # Set Display Clock Divide Ratio/Oscillator Frequency
    sendCommand(0x01)
    sendCommand(0xB9)
    sendCommand(0xBC) # set pre_charge voltage/VCOMH
    sendCommand(0x08) # (0x08);
    sendCommand(0xBE) # set VCOMH
    sendCommand(0X07) # (0x07);
    sendCommand(0xB6) # Set second pre-charge period
    sendCommand(0x01) 
    sendCommand(0xD5) # enable second precharge and enternal vsl
    sendCommand(0X62) # (0x62);
    sendCommand(0xA4) # Set Normal Display Mode
    sendCommand(0x2E) # Deactivate Scroll
    sendCommand(0xAF) # Switch on display
    time.sleep(0.1)
    # delay(100);

    # Row Address
    sendCommand(0x75)    # Set Row Address 
    sendCommand(0x00)    # Start 0
    sendCommand(0x5f)    # End 95 


    # Column Address
    sendCommand(0x15)    # Set Column Address 
    sendCommand(0x08)    # Start from 8th Column of driver IC. This is 0th Column for OLED 
    sendCommand(0x37)    # End at  (8 + 47)th column. Each Column has 2 pixels(segments)

    # Init gray level for text. Default:Brightest White
    grayH= 0xF0
    grayL= 0x0F

def sendCommand(byte):
    Oled.write8(Command_Mode,byte)

def sendData(byte):
    Oled.write8(Data_mode,byte)

def multi_comm(commands):
    for c in commands:
        sendCommand(c)

def oled_clearDisplay():
    for j in range (0,48):
        for i in range (0,96):
            sendData(0x00)

def oled_setNormalDisplay():
    sendCommand(Normal_Display_Cmd)

def oled_setVerticalMode():
    sendCommand(0xA0)    # remap to
    sendCommand(0x46)    # Vertical mode

def oled_setTextXY(Row,Column):
    sendCommand(0x15)             # Set Column Address
    sendCommand(0x08+(Column*4))  # Start Column: Start from 8
    sendCommand(0x37)             # End Column
    # Row Address
    sendCommand(0x75)             # Set Row Address
    sendCommand(0x00+(Row*8))     # Start Row
    sendCommand(0x07+(Row*8))     # End Row

def oled_putChar(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,2):
        for j in range(0,8):
            c=0x00
            bit1=((BasicFont[C_add-32][i])>>j)&0x01
            bit2=((BasicFont[C_add-32][i+1])>>j)&0x01
            if bit1:
                c=c|grayH
            else:
                c=c|0x00
            if bit2:
                c=c|grayL
            else:
                c=c|0x00
            sendData(c)

def oled_putString(String):
    for i in range(len(String)):
        oled_putChar(String[i])   


if __name__=="__main__":
    oled_init()
    oled_setNormalDisplay()
    oled_setTextXY(0,0)
    oled_putString("Hello")
    time.sleep(10)
    #Oled.write8(Command_Mode,0xFD)
    #sendCommand(0xFD)
    print 'hello world'

Step3: Save the file by clicking the disk icon with with the .py extension.

Step4: Connect Grove - OLED to Grove I2C socket on BBG.

Step5: Run the code. You’ll find that the Grove - OLED outputs “Hello World”.

Resources

Help us make it better

Thank you for choosing Seeed. As one of the World's leading Open Hardware suppliers, Seeedstudio has been continuously creating good quality and diversified modules for our customers, makers and developers. As a young company, it is inevitable that few things were not handled adequately, for example, our document system. It is a little shame however true that we have been continuously receiving complaints about how hard it is to use our document system —— ugly interface, confusing content, and the URL that can never be opened etc. Here, we sincerely apologize for all the inconvenience you’ve experienced during using the old system.

It is time to say good bye to the user-unfriendly old document system now. In order to bring better experience to our users, we have launched a project to optimize the document system from the middle of 2016. The work includes:

  • Replace the old WiKi system with a new one that was developed from Mkdocs, a more widely used and cooler project documentation tool.
  • Review and rewrite documents for hundreds of products to make them more understandable.
  • Inspect and repair all the URLs to make sure it can be linked to the right page.

Although we have tried our level best to optimize, it is still possible that few issues exist. If you find anything that needs to be corrected, You are most welcome to submit the amended version as our contributor or give us suggestions in the survey below. Do not forget to leave your email address so that we can reply.

By the way, we will feel very happy and encouraged if we receive 5 stars from you. With the help and encouragement from you, we believe that we can make this document better and better!