U8g2 for Seeeduino boards
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
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 */
![]()
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
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 */
#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
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 */
#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);
}