Difference between revisions of "U8g2 for Seeeduino boards"

From
Jump to: navigation, search
(Code 1)
(Code 1)
 
(36 intermediate revisions by 4 users not shown)
Line 2: Line 2:
  
 
== U8g2 for Seeeduino boards ==
 
== U8g2 for Seeeduino boards ==
 +
 +
=== Setup ===
 +
 +
Pour installer la Bibliothèque<br>
 +
Open the Library Manager (Sketch > Include Library > manage Libraries…)<br>
 +
Taper <b>u8g2</b>
 +
Choisir <b>By oliver</b> depuis le <b>IDE Arduino</b><br>
 +
 +
https://github.com/olikraus/u8g2<br>
 +
U8g2: Library for monochrome displays, version 2<br>
 +
 +
https://github.com/olikraus/U8g2_Arduino<br>
 +
U8glib V2 library for Arduino<br>
  
 
=== Code 1 ===
 
=== Code 1 ===
  
https://www.seeedstudio.com/blog/2019/07/05/u8g2-for-seeeduino-boards/
+
On va afficher la phase "<b>Hello World!</b>"
 +
sur 4 lignes, avec un police de caractères différente à chaque ligne
 +
et sur la 5eme ligne on affiche un symbole.
 +
 
 +
https://www.seeedstudio.com/blog/2019/07/05/u8g2-for-seeeduino-boards/ <br> <br>
 +
 
 +
[[File:Grove Base for XIAO 1.PNG|200px]]
 +
[[File:XIAO RA4M1 4.PNG|125px]]
 +
[[File:OLED Display 96x96 recto.jpg|150px]]
 +
 
 +
<b>Grove Base for XIAO</b> <br>
 +
XIAO-RA4M1 <br>
 +
Grove - OLED Display 1.12 inches (<b>Port I2c</b>) <br>
 +
(Pilote SH1107G) (128 × 128 pixels) <br> <br>
 +
 
 +
<pre>
 +
/*
 +
  d'après la publication de Elaine Wu dans le Blog de Seeed Studio
 +
*/
 +
</pre>
 +
 
 +
[[File:Oled 128x128 world 1.png|125px]]<br>
 +
u8g2_font_ncenB08_tr<br>
 +
u8g2_font_ncenB18_tr<br>
 +
u8g2_font_pieceofcake_mel_tr<br>
 +
u8g2_font_ncenB08_tr<br>
 +
u8g2_font_unifont_t_symbols<br>
 +
<br>
 +
Si on veux rester avec drawStr(), on doit compenser :<br>
 +
<br>
 +
int y_offset = 16; // Valeur à compenser pour SH1107<br>
 +
u8g2.drawStr(0, 24 + y_offset, "Hello World!");<br>
  
 
<pre>
 
<pre>
Line 37: Line 81:
 
=== Code 2 ===
 
=== Code 2 ===
  
https://www.seeedstudio.com/blog/2019/07/05/u8g2-for-seeeduino-boards/
+
Ce code permet d’afficher le logo de Seeed Studio
 +
 
 +
Pour plus d’information voir l’article de Elaine Wu
 +
 
 +
https://www.seeedstudio.com/blog/2019/07/05/u8g2-for-seeeduino-boards/ <br> <br>
 +
 
 +
[[File:Grove Base for XIAO 1.PNG|200px]]
 +
[[File:XIAO RA4M1 4.PNG|125px]]
 +
[[File:OLED Display 96x96 recto.jpg|150px]] <br>
 +
 
 +
<b>Grove Base for XIAO</b> <br>
 +
XIAO-RA4M1 <br>
 +
Grove - OLED Display 1.12 inches (<b>Port I2c</b>) <br>
 +
(Pilote SH1107G) (128 × 128 pixels) <br> <br>
  
 
<pre>
 
<pre>
 +
/*
 +
  d'après la publication de Elaine Wu dans le Blog de Seeed Studio
 +
*/
 +
</pre>
 +
 +
[[File:Oled 128x128 logo seeed.png|150px]]
 +
[[File:Logo.png|150px]]
  
 +
<pre>
 
#include <Arduino.h>
 
#include <Arduino.h>
 
#include <U8g2lib.h>
 
#include <U8g2lib.h>
+
 
 
U8G2_SH1107_SEEED_128X128_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
 
U8G2_SH1107_SEEED_128X128_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
 
  
 
static const unsigned char logo_2018_horizontal_bits[] = {
 
static const unsigned char logo_2018_horizontal_bits[] = {
Line 91: Line 155:
 
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
 
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
 
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
 
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
 
  
 
void setup(void) {
 
void setup(void) {
Line 97: Line 160:
 
   Serial.begin(115200);
 
   Serial.begin(115200);
 
}
 
}
+
 
 
void loop(void) {
 
void loop(void) {
 
   u8g2.clearBuffer();          // clear the internal memory
 
   u8g2.clearBuffer();          // clear the internal memory
Line 105: Line 168:
 
   Serial.println("work");
 
   Serial.println("work");
 
   delay(1000);   
 
   delay(1000);   
 +
}
 +
</pre>
 +
 +
=== Code 3 ===
 +
 +
C’est une démo complète avec des courbes, des carrés, etc.
 +
 +
https://www.seeedstudio.com/blog/2019/07/05/u8g2-for-seeeduino-boards/
 +
 +
[[File:Grove Base for XIAO 1.PNG|200px]]
 +
[[File:XIAO RA4M1 4.PNG|125px]]
 +
[[File:OLED Display 96x96 recto.jpg|150px]]
 +
 +
<b>Grove Base for XIAO</b> <br>
 +
XIAO-RA4M1 <br>
 +
Grove - OLED Display 1.12 inches (<b>Port I2c</b>) <br>
 +
(Pilote SH1107G) (128 × 128 pixels) <br> <br>
 +
 +
<pre>
 +
/*
 +
  d'après la publication de Elaine Wu dans le Blog de Seeed Studio
 +
*/
 +
</pre>
 +
 +
[[File:Oled 128x128 xample 1.png|125px]]
 +
 +
<pre>
 +
#include <Arduino.h>
 +
#include <U8g2lib.h>
 +
 +
U8G2_SH1107_SEEED_128X128_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
 +
 +
void setup(void) {
 +
  u8g2.begin();  // start a display.
 +
}
 +
 +
//
 +
void drawPixels()
 +
{
 +
  u8g2.clearBuffer();          // clear the internal memory
 +
  for(int i = 0; i < 100; i++){
 +
    // generate 100 points randomly
 +
    u8g2.drawPixel(random(128), random(128));
 +
    u8g2.sendBuffer();
 +
    delay(5);
 +
  }
 +
}
 +
 +
void drawLines()
 +
{
 +
  u8g2.clearBuffer();          // clear the internal memory
 +
  u8g2.drawLine(0,0, u8g2.getDisplayWidth(), u8g2.getDisplayHeight());
 +
  u8g2.sendBuffer();
 +
  delay(1000);
 +
  u8g2.drawLine(u8g2.getDisplayWidth(),0, 0, u8g2.getDisplayHeight());
 +
  u8g2.sendBuffer();
 +
  delay(1000);
 +
  u8g2.drawLine(0, u8g2.getDisplayHeight()/2, u8g2.getDisplayWidth(), u8g2.getDisplayHeight()/2);
 +
  u8g2.sendBuffer();
 +
  delay(1000);
 +
  u8g2.drawLine(u8g2.getDisplayWidth()/2,0, u8g2.getDisplayWidth()/2, u8g2.getDisplayHeight());
 +
  u8g2.sendBuffer();
 +
}
 +
 +
void drawBoxes()
 +
{
 +
  u8g2.clearBuffer();          // clear the internal memory
 +
  u8g2.drawBox(0, 0, u8g2.getDisplayWidth()/2-5,u8g2.getDisplayHeight()/2-5);
 +
  u8g2.sendBuffer();
 +
  delay(1000);
 +
  u8g2.drawBox(0, u8g2.getDisplayHeight()/2+5, u8g2.getDisplayWidth()/2-5,u8g2.getDisplayHeight());
 +
  u8g2.sendBuffer();
 +
  delay(1000);
 +
  u8g2.drawBox(u8g2.getDisplayWidth()/2+5, u8g2.getDisplayHeight()/2+5, u8g2.getDisplayWidth(),u8g2.getDisplayHeight());
 +
  u8g2.sendBuffer();
 +
  delay(1000);
 +
  u8g2.drawBox(u8g2.getDisplayWidth()/2+5, 0, u8g2.getDisplayWidth(),u8g2.getDisplayHeight()/2-5);
 +
  u8g2.sendBuffer();
 +
}
 +
 +
void drawFrames()
 +
{
 +
  u8g2.clearBuffer();          // clear the internal memory
 +
  u8g2.drawFrame(u8g2.getDisplayWidth()/2-10, u8g2.getDisplayHeight()/2-10, 20, 20);
 +
  u8g2.sendBuffer();
 +
  delay(1000);
 +
  u8g2.drawFrame(u8g2.getDisplayWidth()/2-20, u8g2.getDisplayHeight()/2-20, 40, 40);
 +
  u8g2.sendBuffer();
 +
  delay(1000);
 +
  u8g2.drawFrame(u8g2.getDisplayWidth()/2-30, u8g2.getDisplayHeight()/2-30, 60, 60);
 +
  u8g2.sendBuffer();
 +
  delay(1000);
 +
  u8g2.drawFrame(u8g2.getDisplayWidth()/2-40, u8g2.getDisplayHeight()/2-40, 80, 80);
 +
  u8g2.sendBuffer();
 +
  delay(1000);
 +
  u8g2.drawFrame(u8g2.getDisplayWidth()/2-50, u8g2.getDisplayHeight()/2-50, 100, 100);
 +
  u8g2.sendBuffer();
 +
}
 +
 +
void drawCircles()
 +
{
 +
  u8g2.clearBuffer();          // clear the internal memory
 +
  u8g2.drawCircle(u8g2.getDisplayWidth()/2, u8g2.getDisplayHeight()/2, 30, U8G2_DRAW_UPPER_RIGHT);
 +
  u8g2.sendBuffer();
 +
  delay(1000);
 +
  u8g2.drawCircle(u8g2.getDisplayWidth()/2, u8g2.getDisplayHeight()/2, 30, U8G2_DRAW_UPPER_LEFT);
 +
  u8g2.sendBuffer();
 +
  delay(1000);
 +
  u8g2.drawCircle(u8g2.getDisplayWidth()/2, u8g2.getDisplayHeight()/2, 30, U8G2_DRAW_LOWER_LEFT);
 +
  u8g2.sendBuffer();
 +
  delay(1000);
 +
  u8g2.drawCircle(u8g2.getDisplayWidth()/2, u8g2.getDisplayHeight()/2, 30, U8G2_DRAW_LOWER_RIGHT);
 +
  u8g2.sendBuffer();
 +
  delay(1000);
 +
  u8g2.drawCircle(u8g2.getDisplayWidth()/2, u8g2.getDisplayHeight()/2, 50, U8G2_DRAW_ALL);
 +
  u8g2.sendBuffer();
 +
}
 +
 +
void loop(void) {
 +
 +
  drawPixels();
 +
  delay(2000);
 +
  drawLines();
 +
  delay(2000);
 +
  drawFrames();
 +
  delay(2000);
 +
  drawCircles();
 +
  delay(2000);
 +
  drawBoxes();
 +
  delay(2000);
 
}
 
}
 
</pre>
 
</pre>

Latest revision as of 22:22, 26 September 2025


U8g2 for Seeeduino boards[edit]

Setup[edit]

Pour installer la Bibliothèque
Open the Library Manager (Sketch > Include Library > manage Libraries…)
Taper u8g2 Choisir By oliver depuis le IDE Arduino

https://github.com/olikraus/u8g2
U8g2: Library for monochrome displays, version 2

https://github.com/olikraus/U8g2_Arduino
U8glib V2 library for Arduino

Code 1[edit]

On va afficher la phase "Hello World!" sur 4 lignes, avec un police de caractères différente à chaque ligne et sur la 5eme ligne on affiche un symbole.

https://www.seeedstudio.com/blog/2019/07/05/u8g2-for-seeeduino-boards/

Grove Base for XIAO 1.PNG XIAO RA4M1 4.PNG OLED Display 96x96 recto.jpg

Grove Base for XIAO
XIAO-RA4M1
Grove - OLED Display 1.12 inches (Port I2c)
(Pilote SH1107G) (128 × 128 pixels)

/*
  d'après la publication de Elaine Wu dans le Blog de Seeed Studio
*/

Oled 128x128 world 1.png
u8g2_font_ncenB08_tr
u8g2_font_ncenB18_tr
u8g2_font_pieceofcake_mel_tr
u8g2_font_ncenB08_tr
u8g2_font_unifont_t_symbols

Si on veux rester avec drawStr(), on doit compenser :

int y_offset = 16; // Valeur à compenser pour SH1107
u8g2.drawStr(0, 24 + y_offset, "Hello World!");

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

U8G2_SH1107_SEEED_128X128_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

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.setFont(u8g2_font_ncenB18_tr); // choose a suitable font
  u8g2.drawStr(0,40,"Hello World!");  // write something to the internal memory
  u8g2.setFont(u8g2_font_pieceofcake_mel_tr); // choose a suitable font
  u8g2.drawStr(0,60,"Hello World!");  // write something to the internal memory
  u8g2.setCursor(40, 80);
  u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
  u8g2.print("Hello World!");
   u8g2.setFont(u8g2_font_unifont_t_symbols);
  u8g2.drawGlyph(40, 100, 0x2603);
  u8g2.sendBuffer();          // transfer internal memory to the display
  delay(1000);  
}

Code 2[edit]

Ce code permet d’afficher le logo de Seeed Studio

Pour plus d’information voir l’article de Elaine Wu

https://www.seeedstudio.com/blog/2019/07/05/u8g2-for-seeeduino-boards/

Grove Base for XIAO 1.PNG XIAO RA4M1 4.PNG OLED Display 96x96 recto.jpg

Grove Base for XIAO
XIAO-RA4M1
Grove - OLED Display 1.12 inches (Port I2c)
(Pilote SH1107G) (128 × 128 pixels)

/*
  d'après la publication de Elaine Wu dans le Blog de Seeed Studio
*/

Oled 128x128 logo seeed.png Logo.png

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

U8G2_SH1107_SEEED_128X128_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

static const unsigned char logo_2018_horizontal_bits[] = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x02, 0x00, 0xC0, 0x40, 0x00, 
  0x00, 0x80, 0x02, 0x80, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x38, 0x00, 
  0x00, 0x00, 0x80, 0x00, 0x00, 0xE0, 0x0F, 0xF8, 0x07, 0xF8, 0x07, 0xF8, 
  0x07, 0xF0, 0x39, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0xF0, 0x3F, 0xFC, 
  0x0F, 0xFC, 0x0F, 0xFC, 0x0F, 0xFC, 0x3B, 0x00, 0x00, 0x20, 0x80, 0x02, 
  0x00, 0x38, 0x18, 0x3E, 0x1E, 0x3E, 0x1E, 0x3E, 0x1F, 0xFE, 0x3F, 0x00, 
  0x00, 0x10, 0x00, 0x00, 0x00, 0x38, 0x00, 0x0E, 0x3C, 0x0F, 0x3C, 0x0F, 
  0x3C, 0x1F, 0x3F, 0x00, 0x00, 0x10, 0x00, 0x01, 0x04, 0x78, 0x00, 0x0F, 
  0x38, 0x0F, 0x38, 0x0F, 0x38, 0x0F, 0x3C, 0x00, 0x00, 0x28, 0x00, 0x06, 
  0x00, 0xF8, 0x07, 0xEF, 0x3F, 0xDF, 0x3F, 0xF7, 0x3F, 0x07, 0x3C, 0x02, 
  0x10, 0x28, 0x00, 0x04, 0x04, 0xF0, 0x1F, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 
  0xBF, 0x07, 0x38, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xC0, 0x3F, 0xFF, 
  0x7F, 0xFF, 0x7F, 0xFF, 0xBF, 0x07, 0x3C, 0x08, 0x18, 0x10, 0x00, 0x06, 
  0x02, 0x00, 0x38, 0x0F, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x3C, 0x00, 
  0x00, 0x28, 0x00, 0x00, 0x04, 0x00, 0x78, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 
  0x00, 0x0F, 0x3C, 0x00, 0x20, 0x10, 0x00, 0x06, 0x04, 0x38, 0x38, 0x1E, 
  0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x1F, 0x3F, 0x04, 0x18, 0x28, 0x00, 0x01, 
  0x01, 0xF8, 0x3F, 0xFC, 0x1F, 0xFC, 0x1F, 0xFC, 0x1F, 0xFE, 0x3F, 0x00, 
  0x00, 0x20, 0x00, 0x04, 0x02, 0xF8, 0x1F, 0xF8, 0x0F, 0xF8, 0x0F, 0xF8, 
  0x1F, 0xFC, 0x3B, 0x01, 0x60, 0x10, 0x00, 0x82, 0x02, 0xC0, 0x07, 0xE0, 
  0x03, 0xE0, 0x03, 0xE0, 0x03, 0xF0, 0x39, 0x00, 0x40, 0x20, 0x00, 0x42, 
  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0xA0, 0x60, 0x80, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x80, 0xB0, 
  0x00, 0x58, 0x80, 0x60, 0x10, 0x40, 0x00, 0x00, 0x03, 0x88, 0x00, 0x00, 
  0x00, 0x02, 0x00, 0x48, 0x00, 0xD8, 0x88, 0x64, 0x14, 0x40, 0x00, 0x10, 
  0x21, 0x88, 0x00, 0x00, 0x00, 0x09, 0x20, 0x28, 0x00, 0x98, 0x95, 0x2A, 
  0xDE, 0x7D, 0xDD, 0x2E, 0x7B, 0xBB, 0x36, 0x00, 0x00, 0x04, 0x00, 0x04, 
  0x00, 0x50, 0x9F, 0x2A, 0xD6, 0x57, 0xAD, 0x3A, 0x91, 0xAB, 0x17, 0x00, 
  0x00, 0x50, 0x80, 0x02, 0x00, 0x50, 0x99, 0x6E, 0xD4, 0x75, 0xEF, 0x1A, 
  0xAF, 0xBB, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };

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

void loop(void) {
  u8g2.clearBuffer();          // clear the internal memory
  u8g2.drawXBM(0,0, 128, 32, logo_2018_horizontal_bits);
  u8g2.sendBuffer();          // transfer internal memory to the display
  //Serial.println(sizeof(ironman_bits));
  Serial.println("work");
  delay(1000);  
}

Code 3[edit]

C’est une démo complète avec des courbes, des carrés, etc.

https://www.seeedstudio.com/blog/2019/07/05/u8g2-for-seeeduino-boards/

Grove Base for XIAO 1.PNG XIAO RA4M1 4.PNG OLED Display 96x96 recto.jpg

Grove Base for XIAO
XIAO-RA4M1
Grove - OLED Display 1.12 inches (Port I2c)
(Pilote SH1107G) (128 × 128 pixels)

/*
  d'après la publication de Elaine Wu dans le Blog de Seeed Studio
*/

Oled 128x128 xample 1.png

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

U8G2_SH1107_SEEED_128X128_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

void setup(void) {
  u8g2.begin();  // start a display.
}

//
void drawPixels()
{
  u8g2.clearBuffer();          // clear the internal memory
  for(int i = 0; i < 100; i++){
    // generate 100 points randomly
    u8g2.drawPixel(random(128), random(128));
    u8g2.sendBuffer();
    delay(5);
  }
}

void drawLines()
{
  u8g2.clearBuffer();          // clear the internal memory
  u8g2.drawLine(0,0, u8g2.getDisplayWidth(), u8g2.getDisplayHeight());
  u8g2.sendBuffer();
  delay(1000);
  u8g2.drawLine(u8g2.getDisplayWidth(),0, 0, u8g2.getDisplayHeight());
  u8g2.sendBuffer();
  delay(1000);
  u8g2.drawLine(0, u8g2.getDisplayHeight()/2, u8g2.getDisplayWidth(), u8g2.getDisplayHeight()/2);
  u8g2.sendBuffer();
  delay(1000);
  u8g2.drawLine(u8g2.getDisplayWidth()/2,0, u8g2.getDisplayWidth()/2, u8g2.getDisplayHeight());
  u8g2.sendBuffer();
}

void drawBoxes()
{
  u8g2.clearBuffer();          // clear the internal memory
  u8g2.drawBox(0, 0, u8g2.getDisplayWidth()/2-5,u8g2.getDisplayHeight()/2-5);
  u8g2.sendBuffer();
  delay(1000);
  u8g2.drawBox(0, u8g2.getDisplayHeight()/2+5, u8g2.getDisplayWidth()/2-5,u8g2.getDisplayHeight());
  u8g2.sendBuffer();
  delay(1000);
  u8g2.drawBox(u8g2.getDisplayWidth()/2+5, u8g2.getDisplayHeight()/2+5, u8g2.getDisplayWidth(),u8g2.getDisplayHeight());
  u8g2.sendBuffer();
  delay(1000);
  u8g2.drawBox(u8g2.getDisplayWidth()/2+5, 0, u8g2.getDisplayWidth(),u8g2.getDisplayHeight()/2-5);
  u8g2.sendBuffer();
}

void drawFrames()
{
  u8g2.clearBuffer();          // clear the internal memory
  u8g2.drawFrame(u8g2.getDisplayWidth()/2-10, u8g2.getDisplayHeight()/2-10, 20, 20);
  u8g2.sendBuffer();
  delay(1000);
  u8g2.drawFrame(u8g2.getDisplayWidth()/2-20, u8g2.getDisplayHeight()/2-20, 40, 40);
  u8g2.sendBuffer();
  delay(1000);
  u8g2.drawFrame(u8g2.getDisplayWidth()/2-30, u8g2.getDisplayHeight()/2-30, 60, 60);
  u8g2.sendBuffer();
  delay(1000);
  u8g2.drawFrame(u8g2.getDisplayWidth()/2-40, u8g2.getDisplayHeight()/2-40, 80, 80);
  u8g2.sendBuffer();
  delay(1000);
  u8g2.drawFrame(u8g2.getDisplayWidth()/2-50, u8g2.getDisplayHeight()/2-50, 100, 100);
  u8g2.sendBuffer();
}

void drawCircles()
{
   u8g2.clearBuffer();          // clear the internal memory
   u8g2.drawCircle(u8g2.getDisplayWidth()/2, u8g2.getDisplayHeight()/2, 30, U8G2_DRAW_UPPER_RIGHT);
   u8g2.sendBuffer();
   delay(1000);
   u8g2.drawCircle(u8g2.getDisplayWidth()/2, u8g2.getDisplayHeight()/2, 30, U8G2_DRAW_UPPER_LEFT);
   u8g2.sendBuffer();
   delay(1000);
   u8g2.drawCircle(u8g2.getDisplayWidth()/2, u8g2.getDisplayHeight()/2, 30, U8G2_DRAW_LOWER_LEFT);
   u8g2.sendBuffer();
   delay(1000);
   u8g2.drawCircle(u8g2.getDisplayWidth()/2, u8g2.getDisplayHeight()/2, 30, U8G2_DRAW_LOWER_RIGHT);
   u8g2.sendBuffer();
   delay(1000);
   u8g2.drawCircle(u8g2.getDisplayWidth()/2, u8g2.getDisplayHeight()/2, 50, U8G2_DRAW_ALL);
   u8g2.sendBuffer();
}

void loop(void) {

  drawPixels();
  delay(2000);
  drawLines();
  delay(2000);
  drawFrames();
  delay(2000);
  drawCircles();
  delay(2000);
  drawBoxes();
  delay(2000);
}