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 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℃
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
-
℃
Platforms Supported
Getting Started
With Arduino
Connection
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 refer SSD1308_1.0.pdf and LY190-128064.pdf.
Here we demonstrate how to display "Hello World" on the screen.
First of all, We need to prepare the below stuffs:
Open the code directly by the path: File -> Example ->OLED_Display_128X64-master->OLED_Hello_World.
#include <Wire.h>
#include <SeeedOLED.h>
void setup()
{
Wire.begin();
SeeedOled.init(); //initialze SEEED OLED display
SeeedOled.clearDisplay(); //clear the screen and set start position to top left corner
SeeedOled.setNormalDisplay(); //Set display to normal mode (i.e non-inverse mode)
SeeedOled.setPageMode(); //Set addressing mode to Page Mode
SeeedOled.setTextXY(0,0); //Set the cursor to Xth Page, Yth Column
SeeedOled.putString("Hello World!"); //Print the String
}
void loop()
{
}
Here are the steps how to display "Hello World" on OLED.
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_I2Cimport timeimport mathOled =Adafruit_I2C(0x3c)Command_Mode=0x80Data_mode=0x40grayH=0xF0grayL=0x0FNormal_Display_Cmd=0xA4BasicFont = [[0for x inxrange(8)] for x inxrange(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]]defoled_init():sendCommand(0xFD)# Unlock OLED driver IC MCU interface from entering command. i.e: Accept commandssendCommand(0x12)sendCommand(0xAE)# Set display offsendCommand(0xA8)# set multiplex ratiosendCommand(0x5F)# 96sendCommand(0xA1)# set display start linesendCommand(0x00)sendCommand(0xA2)# set display offsetsendCommand(0x60)sendCommand(0xA0)# set remapsendCommand(0x46)sendCommand(0xAB)# set vdd internalsendCommand(0x01)sendCommand(0x81)# set contrasrsendCommand(0x53)# 100 nitsendCommand(0xB1)# Set Phase LengthsendCommand(0X51)sendCommand(0xB3)# Set Display Clock Divide Ratio/Oscillator FrequencysendCommand(0x01)sendCommand(0xB9)sendCommand(0xBC)# set pre_charge voltage/VCOMHsendCommand(0x08)# (0x08);sendCommand(0xBE)# set VCOMHsendCommand(0X07)# (0x07);sendCommand(0xB6)# Set second pre-charge periodsendCommand(0x01)sendCommand(0xD5)# enable second precharge and enternal vslsendCommand(0X62)# (0x62);sendCommand(0xA4)# Set Normal Display ModesendCommand(0x2E)# Deactivate ScrollsendCommand(0xAF)# Switch on display time.sleep(0.1)# delay(100);# Row AddresssendCommand(0x75)# Set Row AddresssendCommand(0x00)# Start 0sendCommand(0x5f)# End 95# Column AddresssendCommand(0x15)# Set Column AddresssendCommand(0x08)# Start from 8th Column of driver IC. This is 0th Column for OLEDsendCommand(0x37)# End at (8 + 47)th column. Each Column has 2 pixels(segments)# Init gray level for text. Default:Brightest White grayH=0xF0 grayL=0x0FdefsendCommand(byte): Oled.write8(Command_Mode,byte)defsendData(byte): Oled.write8(Data_mode,byte)defmulti_comm(commands):for c in commands:sendCommand(c)defoled_clearDisplay():for j inrange (0,48):for i inrange (0,96):sendData(0x00)defoled_setNormalDisplay():sendCommand(Normal_Display_Cmd)defoled_setVerticalMode():sendCommand(0xA0)# remap tosendCommand(0x46)# Vertical modedefoled_setTextXY(Row,Column):sendCommand(0x15)# Set Column AddresssendCommand(0x08+(Column*4))# Start Column: Start from 8sendCommand(0x37)# End Column# Row AddresssendCommand(0x75)# Set Row AddresssendCommand(0x00+(Row*8))# Start RowsendCommand(0x07+(Row*8))# End Rowdefoled_putChar(C): C_add=ord(C)if C_add<32or C_add>127:# Ignore non-printable ASCII characters C=' ' C_add=ord(C)for i inrange(0,8,2):for j inrange(0,8): c=0x00 bit1=((BasicFont[C_add-32][i])>>j)&0x01 bit2=((BasicFont[C_add-32][i+1])>>j)&0x01if bit1: c=c|grayHelse: c=c|0x00if bit2: c=c|grayLelse: c=c|0x00sendData(c)defoled_putString(String):for i inrange(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. We'll find that the Grove - OLED outputs "Hello World".