ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° U8glib ΡΡΠ°Π»Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΌΠΎΠ½ΠΎΡ
ΡΠΎΠΌΠ½ΡΠΌΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π΄ΠΈΡΠΏΠ»Π΅ΡΠΌΠΈ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ
Arduino, AVR ΠΈ Π΄ΡΡΠ³ΠΈΡ
ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°Ρ
. ΠΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΠ΅ΠΊΡΡ, Π³ΡΠ°ΡΠΈΠΊΡ ΠΈ ΠΏΡΠΎΡΡΡΠ΅ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ Π½Π° ΡΠΊΡΠ°Π½Ρ Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌΠΈ I2C, SPI ΠΈΠ»ΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Ρ Π±ΠΎΠ»Π΅Π΅ 300 ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π΄ΠΈΡΠΏΠ»Π΅Π΅Π² ΠΎΡ Nokia 5110 Π΄ΠΎ SSD1306. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ U8g2, U8glib ΠΎΡΡΠ°ΡΡΡΡ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΉ Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΡΡ (ΠΌΠ΅Π½Π΅Π΅ 8 ΠΠ Flash), Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π±Π°ΠΉΡ Π½Π° ΡΡΠ΅ΡΡ.
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Π²Ρ Π½Π°ΠΉΠ΄ΡΡΠ΅ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ, Π½ΠΎ ΠΈ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ΄Π°, ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π°ΠΌΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠΈΡΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ β ΠΎΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π΄ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΡ ΡΠ°Π·Π±Π΅ΡΡΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΊ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΌ Π΄ΠΈΡΠΏΠ»Π΅ΡΠΌ, Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΡΠΈΡΡΡ ΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ½Π΅ΡΠ³ΠΎΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ΠΌ. ΠΡΠΎΠ±ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ΄Π΅Π»Π΅Π½ΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΊΠΈΡΠΈΠ»Π»ΠΈΡΠ΅ΠΉ ΠΈ Π°Π΄Π°ΠΏΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ΄ ΡΡΡΡΠΊΠΎΡΠ·ΡΡΠ½ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ.
1. Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ U8glib ΠΈ Π΄Π»Ρ ΡΠ΅Π³ΠΎ ΠΎΠ½Π° Π½ΡΠΆΠ½Π°
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° U8glib (Universal 8bit Graphics Library) β ΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π΄ΠΈΡΠΏΠ»Π΅ΡΠΌΠΈ Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄ΠΎ 128Γ128 ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΉ Olivier Giulieri. ΠΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ β ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΡΠ΅ΡΡΡΡΠ°ΠΌ: ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π°ΠΆΠ΅ Π½Π° ATtiny85 (1 ΠΠ ΠΠΠ£) ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠ° Ρ Arduino IDE, PlatformIO, Π° ΡΠ°ΠΊΠΆΠ΅ "Π³ΠΎΠ»ΡΠΌ" AVR ΡΠ΅ΡΠ΅Π· avr-gcc.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΡΠ°Π΅Ρ U8glib:
- π± ΠΡΠ²ΠΎΠ΄ ΡΠ΅ΠΊΡΡΠ° ΠΈ Π³ΡΠ°ΡΠΈΠΊΠΈ Π½Π° ΠΌΠΎΠ½ΠΎΡ ΡΠΎΠΌΠ½ΡΠ΅ ΡΠΊΡΠ°Π½Ρ (OLED, LCD, e-Paper)
- π Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π±ΡΡΠ΅ΡΠΎΠΌ ΠΊΠ°Π΄ΡΠ° Π΄Π»Ρ ΠΏΠ»Π°Π²Π½ΠΎΠΉ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ
- π¨ ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΡΡΠΈΡΡΠΎΠ² ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²
- β‘ ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΠ½Π΅ΡΠ³ΠΎΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ (ΡΠ΅ΠΆΠΈΠΌΡ ΡΠ½Π°, ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅)
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΡΡΡΠΎΠ΅Π½Π° Π½Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ "page buffer": ΡΠΊΡΠ°Π½ Π΄Π΅Π»ΠΈΡΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ ΠΏΠΎ 8 ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ Π²ΡΡΠΎΡΠΎΠΉ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ ΠΏΠ°ΠΌΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π΄ΠΈΡΠΏΠ»Π΅Ρ SSD1306 128Γ64 ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠ΅Π³ΠΎ 1024 Π±Π°ΠΉΡΠ° Π±ΡΡΠ΅ΡΠ° (ΠΏΡΠΎΡΠΈΠ² 2 ΠΠ ΠΏΡΠΈ ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΠΎΠΌ Π±ΡΡΠ΅ΡΠ΅ Π² U8g2). ΠΡΠΎ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π½Π° ATmega328P (ΠΊΠ°ΠΊ Π² Arduino Uno), Π³Π΄Π΅ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΡΠ°ΡΡΠΎ ΠΌΠ΅Π½ΡΡΠ΅ 2 ΠΠ.
- SSD1306 (OLED)
- Nokia 5110 (LCD)
- SH1106
- PCF8812
- ΠΡΡΠ³ΠΎΠΉ
2. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ U8glib ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ΅ΠΌΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ:
- Π§Π΅ΡΠ΅Π· ΠΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Arduino IDE: Π²Π²Π΅Π΄ΠΈΡΠ΅ Π² ΠΏΠΎΠΈΡΠΊΠ΅
U8glibΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ (Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ 2026 Π³ΠΎΠ΄Π° β1.23). - Π ΡΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ°: ΡΠΊΠ°ΡΠ°ΠΉΡΠ΅ ZIP-Π°ΡΡ
ΠΈΠ² Ρ GitHub ΠΈ ΡΠ°ΡΠΏΠ°ΠΊΡΠΉΡΠ΅ Π² ΠΏΠ°ΠΏΠΊΡ
librariesΠ²Π°ΡΠ΅ΠΉ Arduino IDE. - ΠΠ»Ρ PlatformIO: Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΡΡΠΎΠΊΡ
lib_deps = olikraus/U8glib@^1.23Π²platformio.ini.
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ HelloWorld (ΠΌΠ΅Π½Ρ Π€Π°ΠΉΠ» β ΠΡΠΈΠΌΠ΅ΡΡ β U8glib). ΠΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ° 'U8GLIB' not found, ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ:
- π ΠΠ°ΠΏΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ
U8glib(Π±Π΅Π· Π²Π΅ΡΡΠΈΠΉ ΠΈΠ»ΠΈ ΠΏΠΎΡΡΡΠΈΠΊΡΠΎΠ²) - π Arduino IDE ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠ΅Π½Π° ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ
- π οΈ Π ΠΊΠΎΠ΄Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ:
#include
βοΈ ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ²ΡΠΌ Π·Π°ΠΏΡΡΠΊΠΎΠΌ
ΠΠ»Ρ Π΄ΠΈΡΠΏΠ»Π΅Π΅Π² Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ I2C (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, SSD1306) ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΡ Π°Π΄ΡΠ΅Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π°. Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π°Π΄ΡΠ΅Ρ β 0x3C, Π½ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ 0x3D. ΠΡΠΎΠ²Π΅ΡΠΈΡΡ Π°Π΄ΡΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ΅ΡΡΠ΅ΠΌ I2C_Scanner.
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Nokia 5110 (PCF8814) ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ ΡΠ΅Π·ΠΈΡΡΠΎΡ10 ΠΊΠΠΌΠΌΠ΅ΠΆΠ΄ΡRSTΠΈ+3.3V. ΠΠ΅Π· Π½Π΅Π³ΠΎ Π΄ΠΈΡΠΏΠ»Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡΡΡ!
3. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ΄Π°
U8glib ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ 50 ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΈΡΠΏΠ»Π΅Π΅ΠΌ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅:
| Π€ΡΠ½ΠΊΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
|---|---|---|
firstPage() | ΠΠ°ΡΠΈΠ½Π°Π΅Ρ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ°Π΄ΡΠ° | |
setFont() | Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΡΠΈΡΡ | u8g.setFont(u8g_font_6x10) |
drawStr() | ΠΡΠ²ΠΎΠ΄ΠΈΡ ΡΡΡΠΎΠΊΡ | u8g.drawStr(0, 10, "ΠΡΠΈΠ²Π΅Ρ!") |
drawBox() | Π ΠΈΡΡΠ΅Ρ Π·Π°ΠΊΡΠ°ΡΠ΅Π½Π½ΡΠΉ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ | u8g.drawBox(0, 0, 20, 10) |
setContrast() | ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΡ (0β255) | u8g.setContrast(128) |
ΠΡΠΈΠΌΠ΅Ρ Π²ΡΠ²ΠΎΠ΄Π° ΡΠ΅ΠΊΡΡΠ° ΠΈ Π³ΡΠ°ΡΠΈΠΊΠΈ Π½Π° SSD1306 128Γ64:
#include
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
void draw() {
u8g.setFont(u8g_font_unifont);
u8g.drawStr(0, 20, "Π’Π΅ΠΌΠΏΠ΅ΡΠ°ΡΡΡΠ°:");
u8g.setPrintPos(80, 20);
u8g.print(23.5);
u8g.print("Β°C");
u8g.drawFrame(0, 0, 128, 15); // Π Π°ΠΌΠΊΠ°
}
void setup() {
u8g.begin();
}
void loop() {
u8g.firstPage();
do { draw(); }
while(u8g.nextPage());
delay(1000);
}
ΠΠ»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΊΠΈΡΠΈΠ»Π»ΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΈΡΡΡ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Unicode, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ u8g_font_unifont ΠΈΠ»ΠΈ u8g_font_cyrillic. ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° β ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΡΡΠΈΡΡΠ° ΡΠ΅ΡΠ΅Π· U8glib Font Creator.
Π§ΡΠΎΠ±Ρ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ ΠΏΠ°ΠΌΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΈΡΡΡ Ρ ΡΡΡΡΠΈΠΊΡΠΎΠΌ _r (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, u8g_font_6x10_r) β ΠΎΠ½ΠΈ Ρ
ΡΠ°Π½ΡΡΡΡ Π² Flash, Π° Π½Π΅ Π² ΠΠΠ£.
4. ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
U8glib Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π±ΡΡΠ΅ΡΠΎΠΌ ΠΊΠ°Π΄ΡΠ°, Π½ΠΎ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΌΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΡΠ½Π°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ:
- π§Ή Π£ΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ Π±ΡΡΠ΅ΡΠ°: ΠΠ»Ρ Π΄ΠΈΡΠΏΠ»Π΅Π΅Π² Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ
β€ 84Γ48(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Nokia 5110) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌU8G_I2C_OPT_NO_ACKβ ΡΡΠΎ ΡΠΎΠΊΡΠ°ΡΠ°Π΅Ρ Π±ΡΡΠ΅Ρ Π½Π° 20%. - β‘ Π§Π°ΡΡΠΈΡΠ½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅: ΠΠ΅ΡΠΎΠ΄
setHiSpeed()ΡΡΠΊΠΎΡΡΠ΅Ρ Π²ΡΠ²ΠΎΠ΄ Π½Π° SSD1306 Π΄ΠΎ 2 ΡΠ°Π·, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ. - π ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅Π½ΡΠΆΠ½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ: Π ΡΠ°ΠΉΠ»Π΅
U8glib.hΠ·Π°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΡΠΉΡΠ΅ ΡΡΡΠΎΠΊΠΈ Ρ Π½Π΅Π½ΡΠΆΠ½ΡΠΌΠΈ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°ΠΌΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,//#define U8G_16BIT).
Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ Π΄Π»Ρ Arduino Uno:
| ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ | Flash (Π±Π°ΠΉΡ) | ΠΠΠ£ (Π±Π°ΠΉΡ) |
|---|---|---|
| ΠΠ°Π·ΠΎΠ²ΡΠΉ Π²ΡΠ²ΠΎΠ΄ ΡΠ΅ΠΊΡΡΠ° | 4210 | 312 |
| + ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΡΠΈΡΡ | 5830 | 380 |
| + ΠΠ½ΠΈΠΌΠ°ΡΠΈΡ (2 ΠΊΠ°Π΄ΡΠ°) | 6120 | 512 |
Π‘ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠ΅ΠΉ (NO_ACK) | 3980 | 280 |
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈsetHiSpeed()Π½Π° Π΄ΠΈΡΠΏΠ»Π΅ΡΡ SH1106 Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ ΡΠ±ΠΎΠΈ ΠΏΡΠΈ ΡΠ°ΡΡΠΎΡΠ΅ I2C Π²ΡΡΠ΅400 ΠΊΠΡ. ΠΠ³ΡΠ°Π½ΠΈΡΡΡΠ΅ ΡΠΊΠΎΡΠΎΡΡΡ Π²Wire.begin()!
5. Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ U8glib ΠΈ U8g2: ΡΡΠΎ Π²ΡΠ±ΡΠ°ΡΡ
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° U8g2 (ΠΏΡΠΈΡΠ΅Π΄ΡΠ°Ρ Π½Π° ΡΠΌΠ΅Π½Ρ U8glib) ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½ΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΎΠΏΡΠ°Π²Π΄Π°Π½Π°:
| ΠΡΠΈΡΠ΅ΡΠΈΠΉ | U8glib | U8g2 |
|---|---|---|
| ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ²Π΅ΡΠ½ΡΡ Π΄ΠΈΡΠΏΠ»Π΅Π΅Π² | β ΠΠ΅Ρ | β ΠΠ° (ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎ) |
| ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Flash-ΠΏΠ°ΠΌΡΡΡ | ~3.5 ΠΠ | ~8 ΠΠ |
| Π¨ΡΠΈΡΡΡ | ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΉ Π½Π°Π±ΠΎΡ | 100+ ΡΡΠΈΡΡΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ Unicode |
| Π‘ΠΊΠΎΡΠΎΡΡΡ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ | ΠΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ (no buffer) | ΠΡΡΡΡΠ΅Π΅ (full buffer) |
| Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ | ΠΡΡΡΠ΅ Π΄Π»Ρ AVR | ΠΡΡΡΠ΅ Π΄Π»Ρ ESP32/ARM |
ΠΡΠ±ΠΈΡΠ°ΠΉΡΠ΅ U8glib, Π΅ΡΠ»ΠΈ:
- π Π Π°Π±ΠΎΡΠ°Π΅ΡΠ΅ Π½Π° ATmega328P ΠΈΠ»ΠΈ ATtiny Ρ ΠΏΠ°ΠΌΡΡΡΡ
< 8 ΠΠ. - β‘ ΠΡΠΆΠ½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ ΡΠΎ ΡΡΠ°ΡΡΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ.
- π οΈ ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π΄ΠΈΡΠΏΠ»Π΅ΠΈ Π±Π΅Π· ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π² U8g2 (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, PCF8833).
ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΠ΅ Π½Π° U8g2, Π΅ΡΠ»ΠΈ:
- π₯οΈ ΠΠ°Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ β ESP32, STM32 ΠΈΠ»ΠΈ Raspberry Pi Pico.
- π¨ ΠΡΠΆΠ΅Π½ Π²ΡΠ²ΠΎΠ΄ ΠΊΠΈΡΠΈΠ»Π»ΠΈΡΡ Π±Π΅Π· ΡΡΡΠ½ΠΎΠΉ ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ ΡΡΠΈΡΡΠΎΠ².
- π Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠ»Π°Π²Π½Π°Ρ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ Ρ ΡΠ°ΡΡΠΎΡΠΎΠΉ > 10 FPS.
ΠΠ»Ρ 90% ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π½Π° Arduino Uno/Nano ΠΎΠΏΡΠΈΠΌΠ°Π»Π΅Π½ Π²ΡΠ±ΠΎΡ U8glib β ΠΎΠ½Π° ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ Π΄ΠΎ 40% ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ U8g2.
6. Π’ΠΈΠΏΠΈΡΠ½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ
ΠΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ U8glib ΡΠ°ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½Ρ Ρ Π½Π΅Π²Π΅ΡΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π΄ΠΈΡΠΏΠ»Π΅Ρ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ°ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΎΠΏ-5 ΠΏΡΠΎΠ±Π»Π΅ΠΌ:
- ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:
'U8GLIB_SSD1306_128X64' does not name a typeΠΡΠΈΡΠΈΠ½Π°: ΠΠ΅ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ Π΄ΠΈΡΠΏΠ»Π΅Ρ. Π Π΅ΡΠ΅Π½ΠΈΠ΅: ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠΊΡΠ°Π½Π° ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
U8GLIB_SH1106_128X64Π΄Π»Ρ SH1106). ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ β Π² ΡΠ°ΠΉΠ»Π΅U8glib.h. - ΠΠ΅Π»ΡΠΉ ΡΠΊΡΠ°Π½ ΠΈΠ»ΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ
ΠΡΠΈΡΠΈΠ½Ρ: ΠΠ΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΈΡΠ°Π½ΠΈΡ (Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ
3.3VΠ΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° OLED) ΠΈΠ»ΠΈ ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄ΡΠ½Π½ΡΠΉ Π΄ΠΈΡΠΏΠ»Π΅ΠΉ. ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΌΡΠ»ΡΡΠΈΠΌΠ΅ΡΡΠΎΠΌ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π²ΡΠ²ΠΎΠ΄Π°ΡVCCΠΈGND. - Π’Π΅ΠΊΡΡ Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ
Π Π΅ΡΠ΅Π½ΠΈΠ΅: Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²ΡΠ·Π²Π°Π½
u8g.firstPage()ΠΈu8g.nextPage()Π² ΡΠΈΠΊΠ»Π΅. ΠΠ΅Π· Π½ΠΈΡ Π±ΡΡΠ΅Ρ Π½Π΅ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π½Π° Π΄ΠΈΡΠΏΠ»Π΅ΠΉ!
ΠΠ»Ρ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΡΠΊΠ΅ΡΡ:
void testDisplay() {
u8g.drawBox(0, 0, 128, 64); // ΠΠ°ΠΊΡΠ°ΡΠΈΡΡ ΡΠΊΡΠ°Π½
delay(1000);
u8g.drawBox(0, 0, 128, 64); // ΠΡΠΈΡΡΠΈΡΡ ΡΠΊΡΠ°Π½
u8g.setColorIndex(1); // ΠΠ΅Π»ΡΠΉ ΡΠ²Π΅Ρ
u8g.drawPixel(64, 32); // Π’ΠΎΡΠΊΠ° Π² ΡΠ΅Π½ΡΡΠ΅
}
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠΊΠ΅ΡΡΠ° Π΄ΠΈΡΠΏΠ»Π΅ΠΉ SSD1306 ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠ΅ ΠΏΠΈΠΊΡΠ΅Π»ΠΈ, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΏΠΎΠ΄ΡΡΠ³ΠΈΠ²Π°ΡΡΠΈΠΉ ΡΠ΅Π·ΠΈΡΡΠΎΡ Π½Π° Π»ΠΈΠ½ΠΈΠΈSDA(ΡΡΠ°Π½Π΄Π°ΡΡ β4.7 ΠΊΠΠΌΠΊ+3.3V).
7. ΠΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠ΅ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ: Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅
Π‘ U8glib ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠΎΡΡΡΠ΅ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ ΠΈ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ. ΠΡΠΈΠΌΠ΅Ρ ΠΏΠ»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°:
int x = 0;
void loop() {
u8g.firstPage();
do {
u8g.drawBox(x, 30, 10, 10); // ΠΠ²Π°Π΄ΡΠ°Ρ
x = (x + 1) % 118; // ΠΠ²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΡΡΠ³Ρ
} while(u8g.nextPage());
delay(50);
}
ΠΠ»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΉ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΎΠΏΡΠΎΡ Π² loop():
#define BUTTON_PIN 2
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
if (digitalRead(BUTTON_PIN) == LOW) {
u8g.drawStr(0, 20, "ΠΠ½ΠΎΠΏΠΊΠ° Π½Π°ΠΆΠ°ΡΠ°!");
}
// ... ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ...
}
ΠΠ»Ρ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² (ΠΌΠ΅Π½Ρ, Π³ΡΠ°ΡΠΈΠΊΠΈ) ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ:
- π ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π²ΠΎΠΉΠ½ΡΡ Π±ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ: ΡΠΈΡΡΠΉΡΠ΅ Π² ΡΠΊΡΡΡΠΎΠΌ Π±ΡΡΠ΅ΡΠ΅, Π° Π·Π°ΡΠ΅ΠΌ ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ Π½Π° ΡΠΊΡΠ°Π½.
- π ΠΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠΊΠ»Ρ: ΠΈΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ Π²ΡΠ·ΠΎΠ²Π°
drawStr()Π²loop()β Π»ΡΡΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠΉΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΠ½Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ. - π οΈ ΠΠ»Ρ Π³ΡΠ°ΡΠΈΠΊΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΌΠ°ΡΡΠΈΠ² ΡΠΎΡΠ΅ΠΊ ΠΈ ΡΡΠ½ΠΊΡΠΈΡ
drawLine()Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ.
ΠΠ°ΠΊ ΡΡΠΊΠΎΡΠΈΡΡ Π²ΡΠ²ΠΎΠ΄ Π³ΡΠ°ΡΠΈΠΊΠΈ?
1. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ drawBitmap() Π΄Π»Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ β ΠΎΠ½ Π² 3 ΡΠ°Π·Π° Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ.
2. ΠΡΠΊΠ»ΡΡΠΈΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π³ΡΠ°Π½ΠΈΡ: u8g.setClipWindow(0, 0, 128, 64).
3. ΠΠ»Ρ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ ΡΠΌΠ΅Π½ΡΡΠΈΡΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π΄ΠΎ 64Γ48 (Π΅ΡΠ»ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΈΡΠΏΠ»Π΅ΠΉ).
FAQ: Π§Π°ΡΡΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΏΠΎ U8glib
ΠΠ°ΠΊ Π²ΡΠ²Π΅ΡΡΠΈ ΡΡΡΡΠΊΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ?
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΈΡΡ u8g_font_cyrillic ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ²ΠΎΠΉ ΡΠ΅ΡΠ΅Π· U8glib Font Creator. ΠΡΠΈΠΌΠ΅Ρ:
u8g.setFont(u8g_font_cyrillic);
u8g.drawStr(0, 20, "ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ!");
ΠΠ»Ρ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Unicode ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΠ΅ Π½Π° U8g2.
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ U8glib Π½Π° ESP32?
Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ Π΄Π°, Π½ΠΎ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ. U8glib Π½Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΠΈ ESP32 ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ²Π°ΡΡ Ρ Wi-Fi. ΠΠ»Ρ ESP32 Π»ΡΡΡΠ΅ Π²ΡΠ±ΡΠ°ΡΡ U8g2 ΠΈΠ»ΠΈ TFT_eSPI.
ΠΠ°ΠΊ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΠΌΠ΅ΡΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΡΠΊΡΠ°Π½Π°?
ΠΠ΅ΡΡΠ°Π½ΠΈΠ΅ Π²ΡΠ·Π²Π°Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ Π±ΡΡΠ΅ΡΠ°. Π Π΅ΡΠ΅Π½ΠΈΡ:
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
setHiSpeed()(ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ SSD1306). - Π£ΠΌΠ΅Π½ΡΡΠΈΡΠ΅ ΠΎΠ±Π»Π°ΡΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ:
u8g.setClipWindow(x, y, w, h). - ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΡΠ΅ Π½Π° U8g2 Ρ ΠΎΠΏΡΠΈΠ΅ΠΉ
FULL_BUFFER.
ΠΠ΄Π΅ ΡΠΊΠ°ΡΠ°ΡΡ Π΄Π°ΡΠ°ΡΠΈΡΡ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ Π΄ΠΈΡΠΏΠ»Π΅Π΅Π²?
ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠ΅ Π΄Π°ΡΠ°ΡΠΈΡΡ:
- SSD1306: Adafruit
- SH1106: DisplayFuture
- Nokia 5110 (PCF8814): SparkFun
ΠΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΠΈΡΠΏΠ»Π΅Π΅Π² ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ Arduino?
ΠΠ»Ρ I2C-Π΄ΠΈΡΠΏΠ»Π΅Π΅Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ°Π·Π½ΡΠ΅ Π°Π΄ΡΠ΅ΡΠ° (ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ΅Π·ΠΈΡΡΠΎΡΡ A0/A1 Π½Π° ΠΌΠΎΠ΄ΡΠ»Π΅). ΠΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ Π΄Π²ΡΡ
SSD1306:
U8GLIB_SSD1306_128X64 u8g_1(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0);
U8GLIB_SSD1306_128X64 u8g_2(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_1);
ΠΠ»Ρ SPI Π·Π°Π΄Π΅ΠΉΡΡΠ²ΡΠΉΡΠ΅ ΡΠ°Π·Π½ΡΠ΅ ΠΏΠΈΠ½Ρ CS.