1.3″ OLED Display (SH1106 I2C) & Arduino

Short guide for getting this 128×64 pixel display working with the standard Adafruit graphics test.

This guide is specific to the SH1106 I2C with 4 pins. This will not work for the 7-pin SH1106 SPI or the smaller 0.96″ SSD1306 displays.


Hardware

A picture paints a thousand words; so the photo to the right shows the connections required.

As this is an I2C device; the connections are as follows:

  • OLED VDD to 5V
  • OLED GND to GND
  • OLED SDA to A4
  • OLED SCL to A5

Software

Prep work

First things first: find the I2C address.

I get an address of 0x3C. If you get nothing then ensure the baud rate of the serial monitor is set to 115200. If you still have nothing then check your connections. If you’re still having issues then fit a pair of 10k pull up resistors to the SDA & SCL lines. If you’re still having problems then I feel bad for you, son.

Next things next: download the Adafruit SH110X and Adafruit GFX libraries. You can either do that from the links or via the Arduino IDE Library Manager, as below.

Code

The Adafruit graphics test example is available via the protracted route of:

File > Examples > Adafruit SH110x > OLED_QTPY_SH1106 > SH1106_128x64_i2c_QTPY

The below is a copy and paste of the code from the SH1106_128x64_i2c_QTPY example.

/*********************************************************************
  This is an example for our Monochrome OLEDs based on SH110X drivers

  This example is for a 128x64 size display using I2C to communicate
  3 pins are required to interface (2 I2C and one reset)

  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  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

  i2c SH1106 modified by Rupert Hirst  12/09/21
*********************************************************************/



#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>

/* Uncomment the initialize the I2C address , uncomment only one, If you get a totally blank screen try the other*/
#define i2c_Address 0x3c //initialize with the I2C addr 0x3C Typically eBay OLED's
//#define i2c_Address 0x3d //initialize with the I2C addr 0x3D Typically Adafruit OLED's

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1   //   QT-PY / XIAO
Adafruit_SH1106G display = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);


#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2


#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH  16
static const unsigned char PROGMEM logo16_glcd_bmp[] =
{ B00000000, B11000000,
  B00000001, B11000000,
  B00000001, B11000000,
  B00000011, B11100000,
  B11110011, B11100000,
  B11111110, B11111000,
  B01111110, B11111111,
  B00110011, B10011111,
  B00011111, B11111100,
  B00001101, B01110000,
  B00011011, B10100000,
  B00111111, B11100000,
  B00111111, B11110000,
  B01111100, B11110000,
  B01110000, B01110000,
  B00000000, B00110000
};


void setup()   {

  Serial.begin(9600);

  // Show image buffer on the display hardware.
  // Since the buffer is intialized with an Adafruit splashscreen
  // internally, this will display the splashscreen.

  display.begin(i2c_Address, true); // Address 0x3C default
  //display.setContrast (0); // dim display

  display.display();
  delay(2000);

  // Clear the buffer.
  display.clearDisplay();

  // draw a single pixel
  display.drawPixel(10, 10, SH110X_WHITE);
  // Show the display buffer on the hardware.
  // NOTE: You _must_ call display after making any drawing commands
  // to make them visible on the display hardware!
  display.display();
  delay(2000);
  display.clearDisplay();

  // draw many lines
  testdrawline();
  display.display();
  delay(2000);
  display.clearDisplay();

  // draw rectangles
  testdrawrect();
  display.display();
  delay(2000);
  display.clearDisplay();

  // draw multiple rectangles
  testfillrect();
  display.display();
  delay(2000);
  display.clearDisplay();

  // draw mulitple circles
  testdrawcircle();
  display.display();
  delay(2000);
  display.clearDisplay();

  // draw a SH110X_WHITE circle, 10 pixel radius
  display.fillCircle(display.width() / 2, display.height() / 2, 10, SH110X_WHITE);
  display.display();
  delay(2000);
  display.clearDisplay();

  testdrawroundrect();
  delay(2000);
  display.clearDisplay();

  testfillroundrect();
  delay(2000);
  display.clearDisplay();

  testdrawtriangle();
  delay(2000);
  display.clearDisplay();

  testfilltriangle();
  delay(2000);
  display.clearDisplay();

  // draw the first ~12 characters in the font
  testdrawchar();
  display.display();
  delay(2000);
  display.clearDisplay();



  // text display tests
  display.setTextSize(1);
  display.setTextColor(SH110X_WHITE);
  display.setCursor(0, 0);
  display.println("Failure is always an option");
  display.setTextColor(SH110X_BLACK, SH110X_WHITE); // 'inverted' text
  display.println(3.141592);
  display.setTextSize(2);
  display.setTextColor(SH110X_WHITE);
  display.print("0x"); display.println(0xDEADBEEF, HEX);
  display.display();
  delay(2000);
  display.clearDisplay();

  // miniature bitmap display
  display.drawBitmap(30, 16,  logo16_glcd_bmp, 16, 16, 1);
  display.display();
  delay(1);

  // invert the display
  display.invertDisplay(true);
  delay(1000);
  display.invertDisplay(false);
  delay(1000);
  display.clearDisplay();

  // draw a bitmap icon and 'animate' movement
  testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_HEIGHT, LOGO16_GLCD_WIDTH);
}


void loop() {

}


void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) {
  uint8_t icons[NUMFLAKES][3];

  // initialize
  for (uint8_t f = 0; f < NUMFLAKES; f++) {
    icons[f][XPOS] = random(display.width());
    icons[f][YPOS] = 0;
    icons[f][DELTAY] = random(5) + 1;

    Serial.print("x: ");
    Serial.print(icons[f][XPOS], DEC);
    Serial.print(" y: ");
    Serial.print(icons[f][YPOS], DEC);
    Serial.print(" dy: ");
    Serial.println(icons[f][DELTAY], DEC);
  }

  while (1) {
    // draw each icon
    for (uint8_t f = 0; f < NUMFLAKES; f++) {
      display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, SH110X_WHITE);
    }
    display.display();
    delay(200);

    // then erase it + move it
    for (uint8_t f = 0; f < NUMFLAKES; f++) {
      display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, SH110X_BLACK);
      // move it
      icons[f][YPOS] += icons[f][DELTAY];
      // if its gone, reinit
      if (icons[f][YPOS] > display.height()) {
        icons[f][XPOS] = random(display.width());
        icons[f][YPOS] = 0;
        icons[f][DELTAY] = random(5) + 1;
      }
    }
  }
}


void testdrawchar(void) {
  display.setTextSize(1);
  display.setTextColor(SH110X_WHITE);
  display.setCursor(0, 0);

  for (uint8_t i = 0; i < 168; i++) {
    if (i == '\n') continue;
    display.write(i);
    if ((i > 0) && (i % 21 == 0))
      display.println();
  }
  display.display();
  delay(1);
}

void testdrawcircle(void) {
  for (int16_t i = 0; i < display.height(); i += 2) {
    display.drawCircle(display.width() / 2, display.height() / 2, i, SH110X_WHITE);
    display.display();
    delay(1);
  }
}

void testfillrect(void) {
  uint8_t color = 1;
  for (int16_t i = 0; i < display.height() / 2; i += 3) {
    // alternate colors
    display.fillRect(i, i, display.width() - i * 2, display.height() - i * 2, color % 2);
    display.display();
    delay(1);
    color++;
  }
}

void testdrawtriangle(void) {
  for (int16_t i = 0; i < min(display.width(), display.height()) / 2; i += 5) {
    display.drawTriangle(display.width() / 2, display.height() / 2 - i,
                         display.width() / 2 - i, display.height() / 2 + i,
                         display.width() / 2 + i, display.height() / 2 + i, SH110X_WHITE);
    display.display();
    delay(1);
  }
}

void testfilltriangle(void) {
  uint8_t color = SH110X_WHITE;
  for (int16_t i = min(display.width(), display.height()) / 2; i > 0; i -= 5) {
    display.fillTriangle(display.width() / 2, display.height() / 2 - i,
                         display.width() / 2 - i, display.height() / 2 + i,
                         display.width() / 2 + i, display.height() / 2 + i, SH110X_WHITE);
    if (color == SH110X_WHITE) color = SH110X_BLACK;
    else color = SH110X_WHITE;
    display.display();
    delay(1);
  }
}

void testdrawroundrect(void) {
  for (int16_t i = 0; i < display.height() / 2 - 2; i += 2) {
    display.drawRoundRect(i, i, display.width() - 2 * i, display.height() - 2 * i, display.height() / 4, SH110X_WHITE);
    display.display();
    delay(1);
  }
}

void testfillroundrect(void) {
  uint8_t color = SH110X_WHITE;
  for (int16_t i = 0; i < display.height() / 2 - 2; i += 2) {
    display.fillRoundRect(i, i, display.width() - 2 * i, display.height() - 2 * i, display.height() / 4, color);
    if (color == SH110X_WHITE) color = SH110X_BLACK;
    else color = SH110X_WHITE;
    display.display();
    delay(1);
  }
}

void testdrawrect(void) {
  for (int16_t i = 0; i < display.height() / 2; i += 2) {
    display.drawRect(i, i, display.width() - 2 * i, display.height() - 2 * i, SH110X_WHITE);
    display.display();
    delay(1);
  }
}

void testdrawline() {
  for (int16_t i = 0; i < display.width(); i += 4) {
    display.drawLine(0, 0, i, display.height() - 1, SH110X_WHITE);
    display.display();
    delay(1);
  }
  for (int16_t i = 0; i < display.height(); i += 4) {
    display.drawLine(0, 0, display.width() - 1, i, SH110X_WHITE);
    display.display();
    delay(1);
  }
  delay(250);

  display.clearDisplay();
  for (int16_t i = 0; i < display.width(); i += 4) {
    display.drawLine(0, display.height() - 1, i, 0, SH110X_WHITE);
    display.display();
    delay(1);
  }
  for (int16_t i = display.height() - 1; i >= 0; i -= 4) {
    display.drawLine(0, display.height() - 1, display.width() - 1, i, SH110X_WHITE);
    display.display();
    delay(1);
  }
  delay(250);

  display.clearDisplay();
  for (int16_t i = display.width() - 1; i >= 0; i -= 4) {
    display.drawLine(display.width() - 1, display.height() - 1, i, 0, SH110X_WHITE);
    display.display();
    delay(1);
  }
  for (int16_t i = display.height() - 1; i >= 0; i -= 4) {
    display.drawLine(display.width() - 1, display.height() - 1, 0, i, SH110X_WHITE);
    display.display();
    delay(1);
  }
  delay(250);

  display.clearDisplay();
  for (int16_t i = 0; i < display.height(); i += 4) {
    display.drawLine(display.width() - 1, 0, 0, i, SH110X_WHITE);
    display.display();
    delay(1);
  }
  for (int16_t i = 0; i < display.width(); i += 4) {
    display.drawLine(display.width() - 1, 0, i, display.height() - 1, SH110X_WHITE);
    display.display();
    delay(1);
  }
  delay(250);
}

If you succeed, you should get the following:


Displaying Images From BMP Files

Prep your image on your preferred software. The final file must be a .BMP bitmap file, and must have the same number of pixels as the display. So, in this instance, the display is 128×64 pixels, therefore the .bmp file is also 128×64 pixels

Prep your image on your preferred software. The final file must be a .BMP bitmap file, and must have the same number of pixels as the display. So, in this instance, the display is 128×64 pixels, therefore the .bmp file is also 128×64 pixels

In order to achieve the above, you need to convert the image to a hex file. This online converter produces great results. You can also download an offline converter from here.

Once you have the exported .h or .c file, open it in notepad and replace the byte array in the sample code below with your byte array.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>

#define i2c_Address 0x3c
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1   //   QT-PY / XIAO

Adafruit_SH1106G display = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

static const unsigned char PROGMEM image_data_array[1024] = {
  0x55, 0x54, 0x92, 0xaa, 0xaa, 0x49, 0x2a, 0xa5, 0x5f, 0xff, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff,
  0x55, 0xb4, 0x49, 0x6d, 0xa9, 0x24, 0xa4, 0x12, 0xbe, 0xaa, 0xbf, 0x5f, 0xff, 0xfb, 0xb6, 0xab,
  0x55, 0x55, 0x25, 0x55, 0x55, 0x55, 0x11, 0x48, 0xab, 0xff, 0xd5, 0xf7, 0xdb, 0x7f, 0xfd, 0xfd,
  0x55, 0x54, 0x95, 0x6a, 0xa4, 0x88, 0x44, 0xa6, 0xbf, 0xaa, 0xf6, 0x9a, 0xbf, 0xfd, 0xb7, 0xaf,
  0x55, 0x5a, 0x45, 0x5b, 0x55, 0x22, 0x22, 0x29, 0x4e, 0xdd, 0x2a, 0xd5, 0xed, 0xbf, 0xfd, 0xf5,
  0x55, 0x6b, 0x12, 0xd5, 0x54, 0x90, 0x89, 0x44, 0xb7, 0x66, 0xd5, 0x2b, 0xf7, 0xfd, 0xdf, 0x5f,
  0x55, 0x54, 0xaa, 0xad, 0x56, 0x44, 0x22, 0x2a, 0xaa, 0xaa, 0xaa, 0xaf, 0xfd, 0xf7, 0xf5, 0xf7,
  0x4a, 0xaa, 0x05, 0x55, 0x55, 0x12, 0x89, 0x45, 0x55, 0x54, 0xa9, 0x57, 0xf7, 0xfe, 0xdf, 0x5d,
  0x55, 0x56, 0xa9, 0x76, 0xaa, 0xa4, 0x52, 0xaa, 0xda, 0x92, 0x4a, 0x4e, 0xfd, 0xfb, 0xf5, 0xff,
  0x55, 0x55, 0x15, 0x55, 0x49, 0x49, 0x04, 0xb5, 0xaa, 0x29, 0x55, 0x5f, 0xfe, 0xff, 0xde, 0xaf,
  0x4a, 0xaa, 0x42, 0xaa, 0xa5, 0x10, 0x52, 0x55, 0x51, 0x05, 0x49, 0x57, 0xfd, 0xdd, 0xf5, 0xdf,
  0x2a, 0xaa, 0x29, 0x5a, 0x92, 0x45, 0x04, 0x2b, 0x84, 0xaa, 0xaa, 0xaf, 0xff, 0xff, 0x6a, 0xb7,
  0x55, 0x55, 0x05, 0x6a, 0x8c, 0x90, 0x52, 0x95, 0x28, 0x49, 0x2a, 0xbf, 0xfd, 0xf7, 0xbd, 0xad,
  0x49, 0x54, 0xa9, 0x55, 0x51, 0x25, 0x04, 0x56, 0x45, 0x24, 0xa5, 0x55, 0xff, 0xbf, 0xf6, 0xdb,
  0x55, 0x29, 0x04, 0xaa, 0x2a, 0x48, 0xa8, 0x94, 0x10, 0x92, 0xaa, 0x9f, 0xfd, 0xdb, 0x75, 0x6f,
  0x24, 0xa4, 0x52, 0xad, 0x48, 0x92, 0x12, 0x55, 0x4a, 0x49, 0x55, 0x5f, 0xef, 0xef, 0xbf, 0xbf,
  0x92, 0xa4, 0x09, 0x54, 0x94, 0x09, 0x48, 0xaa, 0x21, 0x12, 0xa9, 0x55, 0xff, 0xbe, 0xf7, 0xff,
  0x4a, 0x92, 0xa4, 0xaa, 0x48, 0x92, 0x24, 0x57, 0x94, 0x49, 0x25, 0x53, 0x55, 0xd7, 0xfa, 0xef,
  0x29, 0x40, 0x12, 0x55, 0x22, 0x04, 0x91, 0x5a, 0xeb, 0x52, 0xb6, 0xad, 0xab, 0x6d, 0x75, 0x10,
  0x94, 0x15, 0x49, 0x28, 0x94, 0x20, 0x48, 0xaa, 0xbd, 0xad, 0xff, 0x96, 0xd5, 0xb5, 0x57, 0xff,
  0x23, 0x42, 0x12, 0x95, 0x20, 0x8a, 0x10, 0x54, 0xd5, 0x6b, 0xff, 0x6d, 0xab, 0x6f, 0xba, 0xd5,
  0x48, 0x11, 0x44, 0x54, 0x94, 0x01, 0x45, 0x11, 0x2a, 0xad, 0xff, 0x5b, 0x55, 0x5a, 0xef, 0x7f,
  0x25, 0x44, 0x29, 0x4a, 0x40, 0x14, 0x20, 0xa0, 0xad, 0x55, 0xff, 0x6e, 0xab, 0x6f, 0x5a, 0xaa,
  0x92, 0x12, 0x85, 0x28, 0x08, 0x01, 0x14, 0x92, 0x55, 0xab, 0x7f, 0x5e, 0xa5, 0x59, 0xeb, 0xdb,
  0x09, 0x46, 0x28, 0x95, 0x01, 0x14, 0x82, 0xa8, 0xaa, 0xb5, 0xfb, 0x6b, 0x55, 0x66, 0x34, 0x55,
  0x54, 0x12, 0x45, 0x50, 0x40, 0x40, 0x54, 0x40, 0xaa, 0x9b, 0xfe, 0xb5, 0x55, 0xba, 0xd7, 0x55,
  0x02, 0x85, 0x10, 0x29, 0x08, 0x01, 0x01, 0x28, 0xaa, 0xd6, 0xff, 0x5b, 0xaa, 0xad, 0xaa, 0xfb,
  0x29, 0x26, 0x4a, 0xa8, 0x00, 0x00, 0x14, 0x82, 0xaa, 0x57, 0xfe, 0xad, 0xd7, 0x6b, 0x7b, 0x4d,
  0x12, 0x12, 0x04, 0x92, 0x42, 0x04, 0x80, 0x50, 0x55, 0xad, 0x7e, 0xd5, 0x6a, 0xaa, 0x95, 0x6a,
  0xa4, 0x86, 0x52, 0x50, 0x08, 0x40, 0x05, 0x05, 0x0a, 0xb7, 0xdb, 0x6f, 0xdb, 0x76, 0xed, 0xaa,
  0x11, 0x24, 0x01, 0x29, 0x20, 0x08, 0x24, 0x60, 0x52, 0xad, 0x76, 0xb5, 0x6d, 0x5f, 0xb7, 0x7f,
  0x44, 0x42, 0x94, 0x90, 0x00, 0x01, 0x09, 0x21, 0x25, 0x57, 0xad, 0x5b, 0xab, 0xfe, 0xff, 0xed,
  0x22, 0x94, 0x02, 0x52, 0x04, 0x84, 0x24, 0x48, 0x2a, 0xae, 0xaa, 0xae, 0xdf, 0x7f, 0xfb, 0xff,
  0x14, 0x02, 0xa9, 0x20, 0x90, 0x10, 0x11, 0x11, 0x15, 0x5b, 0x75, 0x5b, 0x6b, 0x7f, 0xff, 0xff,
  0x41, 0x54, 0x04, 0xa4, 0x00, 0x01, 0x44, 0x04, 0x45, 0x5e, 0xdd, 0x5e, 0xb7, 0x7f, 0xff, 0xff,
  0x28, 0x82, 0x51, 0x20, 0x44, 0x84, 0x28, 0x90, 0x20, 0x2d, 0x55, 0x57, 0x5b, 0xfb, 0xfb, 0xdf,
  0x04, 0x54, 0x04, 0x81, 0x00, 0x11, 0x05, 0x45, 0x49, 0x5f, 0x55, 0x5d, 0xaf, 0x7f, 0xef, 0xff,
  0x52, 0xa2, 0xaa, 0x44, 0x08, 0x00, 0x50, 0x28, 0x80, 0x35, 0xed, 0x75, 0x77, 0x7f, 0xff, 0xff,
  0x00, 0x29, 0x05, 0x00, 0x00, 0x94, 0x02, 0x85, 0x2a, 0xbe, 0xb6, 0xad, 0x57, 0xff, 0xff, 0xff,
  0x2a, 0x94, 0xa9, 0x48, 0x20, 0x02, 0x80, 0x28, 0x42, 0x5b, 0xda, 0xbd, 0x55, 0x7f, 0x7b, 0xfb,
  0x00, 0x4a, 0xaa, 0x41, 0x02, 0x14, 0x48, 0x81, 0x10, 0xbd, 0x6e, 0xea, 0xaf, 0xfb, 0xff, 0xdf,
  0x55, 0x04, 0xa5, 0x54, 0x08, 0x52, 0x85, 0x04, 0x0a, 0xfa, 0xaa, 0xbd, 0xb3, 0x5f, 0xf7, 0xff,
  0x02, 0x52, 0x12, 0xab, 0x60, 0x8a, 0x52, 0x50, 0x80, 0xad, 0x55, 0xd6, 0xdd, 0x41, 0x5f, 0xff,
  0x50, 0x01, 0x48, 0xaa, 0x95, 0x35, 0x29, 0x4a, 0x29, 0x7d, 0x56, 0xea, 0xaa, 0xac, 0xa9, 0x5f,
  0x0a, 0xa8, 0x02, 0x29, 0x6a, 0xaa, 0xad, 0x55, 0x44, 0xed, 0x55, 0xb5, 0xb5, 0xa2, 0x95, 0x21,
  0x20, 0x05, 0x20, 0x0a, 0x95, 0x5b, 0x55, 0x54, 0xab, 0x7d, 0xab, 0xda, 0xd6, 0xaa, 0x5a, 0xac,
  0x8a, 0xa0, 0x00, 0x00, 0x55, 0x6d, 0xbb, 0xb6, 0xaa, 0xf7, 0x7f, 0x6d, 0x6a, 0x95, 0x49, 0x22,
  0x20, 0x09, 0x48, 0x82, 0x02, 0xa5, 0x6d, 0x5a, 0xdb, 0xfd, 0xa5, 0xb7, 0x5a, 0xa4, 0xaa, 0x9a,
  0x8a, 0xa0, 0x00, 0x00, 0x00, 0x2a, 0xab, 0xed, 0x6f, 0xf7, 0x55, 0xd5, 0xaa, 0xaa, 0x54, 0x45,
  0x20, 0x0a, 0x40, 0x08, 0x40, 0x02, 0xad, 0x37, 0xb5, 0xff, 0xb5, 0x5a, 0xf5, 0x51, 0x29, 0x54,
  0x0a, 0x80, 0x82, 0x01, 0x04, 0x00, 0x25, 0x5a, 0xdf, 0xea, 0xfe, 0xd7, 0x5a, 0xad, 0x55, 0x2a,
  0xa0, 0x28, 0x08, 0x00, 0x00, 0x48, 0x01, 0x55, 0x77, 0xed, 0xdb, 0xaa, 0xed, 0x52, 0xb2, 0xa2,
  0x0a, 0x82, 0x20, 0x00, 0x80, 0x02, 0x88, 0x0a, 0xab, 0xe5, 0x7f, 0xd5, 0xb5, 0x54, 0xa8, 0x95,
  0x20, 0x10, 0x80, 0x11, 0x00, 0x0a, 0xa0, 0x20, 0xad, 0x75, 0x15, 0xae, 0xd5, 0x65, 0x65, 0x48,
  0x89, 0x00, 0x2d, 0x00, 0x08, 0x25, 0x52, 0x82, 0x02, 0xea, 0xd5, 0x52, 0xba, 0xaa, 0xb2, 0x25,
  0x00, 0x4a, 0x92, 0x41, 0x00, 0x80, 0xa0, 0x10, 0x00, 0x15, 0x55, 0x6b, 0xea, 0xa4, 0xe9, 0x52,
  0x55, 0x00, 0x2d, 0x00, 0x00, 0x0a, 0x02, 0x80, 0xaa, 0x02, 0xaa, 0xb5, 0x55, 0x55, 0x44, 0x89,
  0x00, 0x40, 0x86, 0x80, 0x10, 0x40, 0xa8, 0x24, 0x00, 0x42, 0x2a, 0xaa, 0xaa, 0xb5, 0xea, 0x54,
  0x24, 0x12, 0x29, 0x44, 0x02, 0x12, 0x12, 0x80, 0x01, 0x09, 0x44, 0x95, 0x2a, 0xaa, 0x91, 0x22,
  0x81, 0x40, 0x05, 0x00, 0x40, 0x00, 0xa1, 0x21, 0x10, 0x01, 0x12, 0x42, 0x45, 0x57, 0xc4, 0x89,
  0x14, 0x01, 0x51, 0x40, 0x00, 0x92, 0x0b, 0xd4, 0x00, 0x02, 0x49, 0x29, 0x11, 0x6a, 0x2a, 0x54,
  0x40, 0x88, 0x09, 0x00, 0x08, 0x00, 0x23, 0x88, 0x00, 0x89, 0x24, 0x88, 0xaa, 0x2a, 0x81, 0x02,
  0x12, 0x20, 0xa4, 0x84, 0x82, 0x48, 0x88, 0x21, 0x22, 0x02, 0x92, 0x25, 0x01, 0x14, 0x54, 0x54,
  0x80, 0x80, 0x15, 0x00, 0x08, 0x00, 0x20, 0x94, 0x00, 0x08, 0x48, 0x90, 0xaa, 0x42, 0x82, 0x88
};

void setup() {
  display.begin(i2c_Address, true);

  // Clear the buffer.
  display.clearDisplay();

  // Draw bitmap on the screen
  display.drawBitmap(0, 0, image_data_array, 128, 64, 1);
  display.display();
}

void loop() {
  //do nothing
}

Page created: 10/01/2024
Page last edited: 16/01/2024