Displaying Cyrillic fonts on a 128x64 OLED display

Recently I picked up a couple inexpensive 128x64 pixel OLED displays with an I2C interface. It turns out that displaying Russian text on these displays is not difficult. But it’s non-obvious. This is a brief description of how to make it work.

display.jpg

First, there’s a variety of these little displays and they’re all seemingly configured a little differently. I used this device for this test.

There are two options for libraries to simplify communicating with SSD1306 boards:

The u8g2 library has a much more robust mechanism for selecting fonts, so that’s what I used.

Here’s the code in full:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <Arduino.h>
#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

/*
Illustrating the use of cyrillic text on the 128x64 OLED display
*/

U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, SCL, SDA, U8X8_PIN_NONE);

void setup(void) {
u8g2.begin();
u8g2.enableUTF8Print(); // enable UTF8 support for the Arduino print() function
}

void loop(void) {
// select a font with 11px height
u8g2.setFont(u8g2_font_cu12_t_cyrillic);
u8g2.firstPage();
do {
u8g2.setCursor(0, 40);
u8g2.print("Всем привет!");
u8g2.setCursor(0,12);
u8g2.print("Как у вас?");
} while ( u8g2.nextPage() );
}

References