ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π» Π±ΡΡΡ ΡΠΎΡΠΊΠΎΡΡΡ β Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ LVGL (Light and Versatile Graphics Library) Π΄Π°ΠΆΠ΅ Π±ΡΠ΄ΠΆΠ΅ΡΠ½ΡΠ΅ ESP32 ΡΠΏΠΎΡΠΎΠ±Π½Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ, Π²ΠΈΠ΄ΠΆΠ΅ΡΡ ΠΈ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ LVGL Ρ Arduino IDE ΡΠ°ΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π²ΠΎΠΏΡΠΎΡΡ: ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π΄ΠΈΡΠΏΠ»Π΅ΠΉ, ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ² ΠΏΡΠΈ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π΅ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ? ΠΡΠ° ΡΡΠ°ΡΡΡ Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠ±Π΅Π»Ρ ΠΌΠ΅ΠΆΠ΄Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ ΠΈ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠΉ.
ΠΡ ΡΠ°Π·Π±Π΅ΡΡΠΌ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π±Π°Π·ΠΎΠ²ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ, Π½ΠΎ ΠΈ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΈΡΠΌΡ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ LVGL Π½Π° ESP32 Π·Π° ΡΡΡΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΡΠΈΠΏΠ° β ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠ΄ΡΠ° Π΄ΠΎ ΡΠΎΠ½ΠΊΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π±ΡΡΠ΅ΡΠ° ΠΊΠ°Π΄ΡΠ°. ΠΡ ΡΠ·Π½Π°Π΅ΡΠ΅, ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΠ· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ LVGL ΡΠΎΡΠΌΠΎΠ·ΡΡ Π½Π° ESP32, ΠΈ ΠΊΠ°ΠΊ ΡΡΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ Π±Π΅Π· ΠΏΠΎΠΊΡΠΏΠΊΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡΠ½ΠΎΠ³ΠΎ ΠΆΠ΅Π»Π΅Π·Π°. Π Π΅ΡΡ β Π³ΠΎΡΠΎΠ²ΡΠ΅ ΡΡ Π΅ΠΌΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ Π΄ΠΈΡΠΏΠ»Π΅Π΅Π² (ILI9341, ST7789, SSD1306) Ρ ΡΡΡΡΠΎΠΌ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΠΈΡ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΎΠ².
1. ΠΠΎΡΠ΅ΠΌΡ LVGL Π½Π° ESP32 β Π½Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΉ Π²ΡΠ±ΠΎΡ?
ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄, ESP32 Ρ Π΅Π³ΠΎ Π΄Π²ΡΡ ΡΡΠ΄Π΅ΡΠ½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΎΠΉ ΠΈ 520 ΠΠ SRAM ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎΠΉ Π΄Π»Ρ LVGL. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΡ Π²Π½ΠΎΡΠΈΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΠ²Ρ:
- π ΠΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ: LVGL ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΡΠ΄Π΅Π»ΡΠ΅Ρ Π±ΡΡΠ΅Ρ ΠΊΠ°Π΄ΡΠ° ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Ρ ΡΠΊΡΠ°Π½, ΡΡΠΎ ΡΡΠ΅Π΄Π°Π΅Ρ Π΄ΠΎ 30% Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ SRAM Π½Π° Π΄ΠΈΡΠΏΠ»Π΅ΡΡ
Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ
320Γ240. - β‘ ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ: Π Π΅Π½Π΄Π΅ΡΠΈΠ½Π³ ΡΠ»ΠΎΠΆΠ½ΡΡ
Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
lv_chartΠΈΠ»ΠΈlv_anim) ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ Π΄ΠΎ 50 ΠΌΡ Π½Π° ΠΊΠ°Π΄Ρ, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π·Π°ΠΌΠ΅ΡΠ½ΡΠΌ Π»Π°Π³Π°ΠΌ. - π ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ SPI/DMA: ΠΠ΅ Π²ΡΠ΅ Π΄ΠΈΡΠΏΠ»Π΅ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΉ DMA-ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π°Π½Π½ΡΡ , ΠΈΠ·-Π·Π° ΡΠ΅Π³ΠΎ CPU ΡΡΠ°ΡΠΈΡ Π²ΡΠ΅ΠΌΡ Π½Π° ΡΡΡΠ½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ.
ΠΠ»ΡΡΠ΅Π²Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° β Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ: LVGL ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π»Π°ΡΡ Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌ Ρ ΠΠ‘ (Linux, FreeRTOS), Π³Π΄Π΅ Π΅ΡΡΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ ΠΈ ΠΏΠ°ΠΌΡΡΡΡ. ΠΠ° Π³ΠΎΠ»ΠΎΠΌ ESP32 Π±Π΅Π· RTOS ΡΡΠΈ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ ΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΡΡΠ½ΡΡ, ΡΡΠΎ Π²Π΅Π΄ΡΡ ΠΊ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ lv_demo_widgets ΠΈΠ· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ LVGL ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π΄Π»Ρ ESP32 Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ 1.2 ΠΠ Flash ΠΈ 220 ΠΠ RAM β ΡΡΠΎ 40% ΠΎΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
ΡΠ΅ΡΡΡΡΠΎΠ²!
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠ»ΠΈ Π²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Wi-Fi/Bluetooth ΠΈ LVGL, ΡΡΠΈΡΡΠ²Π°ΠΉΡΠ΅, ΡΡΠΎ ESP32 ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΡΠ΅Ρ Π΄ΠΎ 128 ΠΠ RAM Π΄Π»Ρ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΡΠ΅ΠΊΠ°. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΄Π»Ρ LVGL ΠΎΡΡΠ°Π½Π΅ΡΡΡ Π²ΡΠ΅Π³ΠΎ ~300 ΠΠ, ΡΠ΅Π³ΠΎ Ρ
Π²Π°ΡΠΈΡ ΡΠ°Π·Π²Π΅ ΡΡΠΎ Π½Π° ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ 160Γ128.
- ILI9341 (320Γ240)
- ST7789 (240Γ240)
- SSD1306 (OLED, 128Γ64)
- GC9A01 (240Γ240)
- ΠΡΡΠ³ΠΎΠΉ
2. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° LVGL Π² Arduino IDE: ΠΏΠΎΡΠ°Π³ΠΎΠ²Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ
ΠΠ°ΡΠ½ΡΠΌ Ρ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ. ΠΠ°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ:
- π₯ Arduino IDE Π²Π΅ΡΡΠΈΠΈ 1.8.19+ (ΠΈΠ»ΠΈ PlatformIO Π΄Π»Ρ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ).
- π§ ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° LVGL (Π²Π΅ΡΡΠΈΡ 8.3+). Π£ΡΡΠ°ΡΠ΅Π²ΡΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ESP32 Π½Π° ΡΡΠΎΠ²Π½Π΅ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΎΠ².
- π₯οΈ ΠΡΠ°ΠΉΠ²Π΅Ρ Π΄ΠΈΡΠΏΠ»Π΅Ρ: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
TFT_eSPIΠ΄Π»Ρ ILI9341 ΠΈΠ»ΠΈAdafruit_GFXΠ΄Π»Ρ SSD1306.
Π¨Π°Π³ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ:
- ΠΡΠΊΡΠΎΠΉΡΠ΅ Arduino IDE ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π²
Π‘ΠΊΠ΅ΡΡ β ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ β Π£ΠΏΡΠ°Π²Π»ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ. - Π ΠΏΠΎΠΈΡΠΊΠ΅ Π²Π²Π΅Π΄ΠΈΡΠ΅
lvglΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ LVGL by kisvegabor (Π°Π²ΡΠΎΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ). - Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π΄ΡΠ°ΠΉΠ²Π΅Ρ Π΄ΠΈΡΠΏΠ»Π΅Ρ. ΠΠ»Ρ ILI9341 ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ
TFT_eSPIβ ΠΎΠ½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° Π΄Π»Ρ ESP32 ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ DMA. - Π‘ΠΊΠ°ΡΠ°ΠΉΡΠ΅ lvgl_esp32_drivers β ΡΡΠΎ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠ΅ Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ LVGL Ρ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ ESP32.
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ: Π€Π°ΠΉΠ» β ΠΡΠΈΠΌΠ΅ΡΡ β LVGL β lvgl_demo_widgets. ΠΠΎ Π½Π΅ ΡΠΏΠ΅ΡΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ! Π‘Π½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Arduino IDE 1.8.19+|Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ LVGL 8.3+|Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΄ΡΠ°ΠΉΠ²Π΅Ρ Π΄ΠΈΡΠΏΠ»Π΅Ρ (TFT_eSPI/Adafruit_GFX)|Π‘ΠΊΠ°ΡΠ°ΡΡ lvgl_esp32_drivers|ΠΠ°ΡΡΡΠΎΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² lv_conf.h-->
3. ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ LVGL Π΄Π»Ρ ESP32: ΡΡΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ?
Π€Π°ΠΉΠ» lv_conf.h β ΡΠ΅ΡΠ΄ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ LVGL. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΠ½ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ Π΄Π»Ρ ΠΠ, Π° Π½Π΅ Π΄Π»Ρ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ². ΠΠΎΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΄Π»Ρ ESP32:
| ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ | Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ESP32 | ΠΠΎΡΡΠ½Π΅Π½ΠΈΠ΅ |
|---|---|---|---|
LV_MEM_CUSTOM |
0 | 1 | ΠΠΊΠ»ΡΡΠ°Π΅Ρ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΉ Π°Π»Π»ΠΎΠΊΠ°ΡΠΎΡ ΠΏΠ°ΠΌΡΡΠΈ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ. |
LV_MEM_SIZE |
Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΎ ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΡ | (32U * 1024U) (32 ΠΠ) |
ΠΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ LVGL. ΠΠ»Ρ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ Π΄ΠΎ 64 ΠΠ. |
LV_DISP_DEF_REFR_PERIOD |
30 | 16 | Π£ΠΌΠ΅Π½ΡΡΠ°Π΅Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ°Π΄ΡΠ°ΠΌΠΈ (ΠΌΡ), ΡΡΠΊΠΎΡΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ. |
LV_TICK_CUSTOM |
0 | 1 | ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΉ ΡΠ°ΠΉΠΌΠ΅Ρ ESP32 Π΄Π»Ρ ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΎΡΡΡΡΡΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. |
ΠΡΠΎΠ±ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ΄Π΅Π»ΠΈΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ LV_DISP_DEF_REFR_PERIOD. ΠΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ 30 ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π±ΡΠ΄Π΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ 30 ΡΠ°Π· Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ, Π½ΠΎ Π½Π° ESP32 ΡΡΠΎ ΡΠ°ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠΎΠ΄ΡΡΠ³ΠΈΠ²Π°Π½ΠΈΡΠΌ. ΠΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ β 16 (60 FPS), Π½ΠΎ Π΄Π»Ρ ΡΠ»ΠΎΠΆΠ½ΡΡ
Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ Π΄ΠΎ 30.
Π’Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π² platformio.ini (ΠΈΠ»ΠΈ Π½Π°ΡΡΡΠΎΠΉΡΠ΅ Π² Arduino IDE) ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ»Π°Π³ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ:
build_flags =
-D LV_CONF_INCLUDE_SIMPLE
-D LV_COLOR_DEPTH=16
-D LV_TICK_CUSTOM
-D LV_TICK_CUSTOM_INCLUDE="lvgl_esp32_drivers.h"
-D LV_TICK_CUSTOM_SYS_TIME_EXPR=(uint32_t)(esp_timer_get_time() / 1000LL)
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ TFT_eSPI, ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΠ΅ Π²lv_conf.hΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡLV_USE_LOG(ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π²0). ΠΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π΄ΠΎ 10% ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ESP32 ΠΈΠ·-Π·Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡSerial.
ΠΠ»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π² Arduino IDE Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π² preferences.txt ΡΡΡΠΎΠΊΡ compiler.warning_level=none. ΠΡΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, Π½ΠΎ ΡΠΎΠΊΡΠ°ΡΠΈΡ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ Π½Π° 20-30%.
4. ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄ΠΈΡΠΏΠ»Π΅Ρ ΠΊ ESP32: ΡΡ Π΅ΠΌΡ ΠΈ Π½ΡΠ°Π½ΡΡ
ΠΡΠ±ΠΎΡ Π΄ΠΈΡΠΏΠ»Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π²Π½Π΅ΡΠ½ΠΈΠΉ Π²ΠΈΠ΄ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, Π½ΠΎ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠΈ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠ°:
4.1. ILI9341 (320Γ240, SPI)
Π‘Π°ΠΌΡΠΉ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΠΉ TFT-Π΄ΠΈΡΠΏΠ»Π΅ΠΉ Π΄Π»Ρ ESP32. ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΏΠΎ SPI, Π½ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠΈΠ½ΠΎΠ² Π΄Π»Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ:
- π SPI-ΡΠΈΠ½Ρ: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
VSPI(ΠΏΠΈΠ½ΡGPIO 18-23), ΡΠ°ΠΊ ΠΊΠ°ΠΊHSPIΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΠ΅Ρ Ρ flash-ΠΏΠ°ΠΌΡΡΡΡ. - β‘ Π’Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅: Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ°ΡΡΠΎΡΡ SPI Π½Π°
40 ΠΠΡ(ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ Π΄Π»Ρ ILI9341). - π DMA: ΠΠΊΠ»ΡΡΠΈΡΠ΅ Π²
TFT_eSPIΠΎΠΏΡΠΈΡ#define SPI_FREQUENCY 40000000ΠΈ#define SPI_READ_FREQUENCY 20000000.
4.2. ST7789 (240Γ240, SPI)
ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° ILI9341 Ρ Π»ΡΡΡΠ΅ΠΉ ΡΠ²Π΅ΡΠΎΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ. ΠΠ»Π°Π²Π½ΡΠΉ Π½ΡΠ°Π½Ρ β ΡΡΠ΅Π±ΡΠ΅Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ° 0x36 (ΠΎΡΠΈΠ΅Π½ΡΠ°ΡΠΈΡ ΡΠΊΡΠ°Π½Π°). ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ:
tft.init(240, 240, SPI_MODE2);
tft.setRotation(2); // ΠΠΎΠ²Π΅ΡΠ½ΡΡΡ Π½Π° 180 Π³ΡΠ°Π΄ΡΡΠΎΠ², Π΅ΡΠ»ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π²ΡΡΠ½ΡΡΠΎ
tft.writecommand(0x36);
tft.writedata(0x70); // Π Π΅ΠΆΠΈΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ: RGB (Π½Π΅ BGR!)
4.3. SSD1306 (OLED, 128Γ64, I2C)
ΠΠ΄Π΅Π°Π»Π΅Π½ Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΌ ΡΠ½Π΅ΡΠ³ΠΎΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ΠΌ. ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΏΠΎ I2C, Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅: LVGL Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠ΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΌΠΎΠ½ΠΎΡ ΡΠΎΠΌΠ½ΡΡ Π΄ΠΈΡΠΏΠ»Π΅Π΅Π². Π Π΅ΡΠ΅Π½ΠΈΠ΅ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³ Ρ Π±ΡΡΠ΅ΡΠΎΠΌ Π² 1 ΠΠ:
#define LV_COLOR_DEPTH=1 // ΠΠΎΠ½ΠΎΡ
ΡΠΎΠΌΠ½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ
#define LV_DISP_BUF_SIZE (128 * 8) // ΠΡΡΠ΅Ρ Π½Π° 1 ΡΡΡΠΎΠΊΡ ΡΠΊΡΠ°Π½Π°
ΠΠ»Ρ Π²ΡΠ΅Ρ
Π΄ΠΈΡΠΏΠ»Π΅Π΅Π² ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΈΡΠ°Π½ΠΈΡ! ILI9341 ΠΈ ST7789 ΡΡΠ΅Π±ΡΡΡ 3.3Π, Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ 5Π Π²ΡΠ²Π΅Π΄Π΅Ρ ΠΈΡ
ΠΈΠ· ΡΡΡΠΎΡ. ΠΠ»Ρ SSD1306 Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ 5Π Π½Π° ΠΏΠΈΠ½Π΅ VCC, Π½ΠΎ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠΎΠ²Π½ΠΈ (SDA/SCL) Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ 3.3Π.
Π§ΡΠΎ Π΄Π΅Π»Π°ΡΡ Π΅ΡΠ»ΠΈ Π΄ΠΈΡΠΏΠ»Π΅ΠΉ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ?
ΠΡΡΠ΅ΡΠ°ΠΊΡΡ (ΠΏΠΎΠ»ΠΎΡΡ, ΠΌΠ΅ΡΡΠ°Π½ΠΈΡ, Π±ΠΈΡΡΠ΅ ΠΏΠΈΠΊΡΠ΅Π»ΠΈ) ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΡΡΠ΅ΠΌΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ:
1. **ΠΠ΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΏΠΈΡΠ°Π½ΠΈΠ΅**: ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊΠΎΠ½Π΄Π΅Π½ΡΠ°ΡΠΎΡ 100 ΠΌΠΊΠ€ ΠΌΠ΅ΠΆΠ΄Ρ VCC ΠΈ GND Π΄ΠΈΡΠΏΠ»Π΅Ρ.
2. **Π‘Π»ΠΈΡΠΊΠΎΠΌ Π²ΡΡΠΎΠΊΠ°Ρ ΡΠ°ΡΡΠΎΡΠ° SPI**: ΠΠΎΠ½ΠΈΠ·ΡΡΠ΅ Π΄ΠΎ 20 ΠΠΡ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ
TFT_eSPI.
3. **ΠΠ»ΠΎΡ
ΠΎΠΉ ΠΊΠΎΠ½ΡΠ°ΠΊΡ**: ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΏΠ°ΡΠ½ΡΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠΊΡΠ°Π½ Ρ ΡΠ°Π·ΡΡΠΌΠΎΠΌ FPC Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΎΠ² "ΠΏΠ°ΠΏΠ°-ΠΌΠ°ΠΌΠ°".
5. ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ: ΠΊΠ°ΠΊ ΡΡΠΊΠΎΡΠΈΡΡ LVGL Π½Π° ESP32?
ΠΠ°ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ LVGL ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΡΠΌΠΎΠ·ΠΈΡΡ. ΠΠΎΡ 5 ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΡΠΊΠΎΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ:
- π§ ΠΠ²ΡΡ
ΡΡΠ΄Π΅ΡΠ½ΡΠΉ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³: ΠΠ΅ΡΠ΅Π½Π΅ΡΠΈΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ LVGL Π½Π° Π²ΡΠΎΡΠΎΠ΅ ΡΠ΄ΡΠΎ ESP32 Ρ ΠΏΠΎΠΌΠΎΡΡΡ
xTaskCreatePinnedToCore. ΠΡΠΈΠΌΠ΅Ρ:xTaskCreatePinnedToCore(lvgl_task, // Π€ΡΠ½ΠΊΡΠΈΡ Ρ ΡΠΈΠΊΠ»ΠΎΠΌ lv_timer_handler()
"LVGL", // ΠΠΌΡ Π·Π°Π΄Π°ΡΠΈ
4096, // Π Π°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΊΠ°
NULL, // ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ
2, // ΠΡΠΈΠΎΡΠΈΡΠ΅Ρ
NULL, // Π₯Π΅Π½Π΄Π»Π΅Ρ Π·Π°Π΄Π°ΡΠΈ
1 // Π―Π΄ΡΠΎ 1 (Π²ΡΠΎΡΠΎΠ΅ ΡΠ΄ΡΠΎ)
);
- πΌοΈ Π£ΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ Π±ΡΡΠ΅ΡΠ° ΠΊΠ°Π΄ΡΠ°: ΠΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π±ΡΡΠ΅Ρ Π½Π° 1/4 ΡΠΊΡΠ°Π½Π°:
#define LV_DISP_BUF_SIZE (LV_HOR_RES_MAX * 60) // ΠΡΡΠ΅Ρ Π½Π° 60 ΡΡΡΠΎΠΊ - π¨ ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅Π½ΡΠΆΠ½ΡΡ
Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ²: Π
lv_conf.hΠΎΡΠΊΠ»ΡΡΠΈΡΠ΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ:#define LV_USE_ARC 0#define LV_USE_CALENDAR 0
#define LV_USE_CHART 0 // ΠΡΠ»ΠΈ Π½Π΅ Π½ΡΠΆΠ½Ρ Π³ΡΠ°ΡΠΈΠΊΠΈ
ΠΡΡ ΠΎΠ΄ΠΈΠ½ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΏΡΠΈΡΠΌ β ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΡΡΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅), ΡΠ΅Π½Π΄Π΅ΡΠΈΡΠ΅ ΠΈΡ
ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π² setup() ΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΠΉΡΠ΅ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ Π±ΡΡΠ΅Ρ:
LV_IMG_DECLARE(background_img);
lv_obj_t *bg = lv_img_create(lv_scr_act(), NULL);
lv_img_set_src(bg, &background_img);
lv_obj_set_pos(bg, 0, 0);
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Wi-Fi/Bluetooth Π²ΠΌΠ΅ΡΡΠ΅ Ρ LVGL ΠΎΡΠΊΠ»ΡΡΠΈΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΊΡΠ°Π½Π° Π² ΡΠΈΠΊΠ»Π΅loop(). ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠΉΡΠ΅ ΡΠΊΡΠ°Π½ ΠΏΠΎ ΡΠ°ΠΉΠΌΠ΅ΡΡ ΠΈΠ»ΠΈ ΡΠΎΠ±ΡΡΠΈΡ:void loop() {lv_task_handler(); // ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠΈΠΉ LVGL
delay(5); // ΠΠ°Π΄Π΅ΡΠΆΠΊΠ° Π΄Π»Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ CPU
}
Π‘Π°ΠΌΡΠΉ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ LVGL Π½Π° ESP32 β ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Π΄Π²ΡΡ ΡΡΠ΄Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° ΠΈ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ Π±ΡΡΠ΅ΡΠ° ΠΊΠ°Π΄ΡΠ° Π΄ΠΎ 1/4 ΡΠΊΡΠ°Π½Π°. ΠΡΠΎ Π΄Π°ΡΡ ΠΏΡΠΈΡΠΎΡΡ FPS Π½Π° 30-50% Π±Π΅Π· ΠΏΠΎΡΠ΅ΡΠΈ ΠΊΠ°ΡΠ΅ΡΡΠ²Π°.
6. Π’ΠΈΠΏΠΈΡΠ½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ
ΠΠ°ΠΆΠ΅ ΠΎΠΏΡΡΠ½ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΏΡΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ LVGL ΠΈ ESP32. ΠΠΎΡ ΡΠΎΠΏ-5 ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ:
| ΠΡΠΈΠ±ΠΊΠ° | ΠΡΠΈΡΠΈΠ½Π° | Π Π΅ΡΠ΅Π½ΠΈΠ΅ |
|---|---|---|
| ΠΠ΅Π»ΡΠΉ ΡΠΊΡΠ°Π½ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ | ΠΠ΅Π²Π΅ΡΠ½Π°Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΈΡΠΏΠ»Π΅Ρ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ ΠΏΠΈΠ½ΠΎΠ² SPI. | ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ pinout Π² TFT_eSPI ΠΈ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ CS-ΠΏΠΈΠ½ Π΄ΠΈΡΠΏΠ»Π΅Ρ Π½Π΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΠ΅Ρ Ρ flash-ΠΏΠ°ΠΌΡΡΡΡ (GPIO 5 Π·Π°ΠΏΡΠ΅ΡΡΠ½!). |
| LVGL Π½Π΅ ΡΠ΅Π°Π³ΠΈΡΡΠ΅Ρ Π½Π° ΠΊΠ°ΡΠ°Π½ΠΈΡ | ΠΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΡΠ½ ΠΈΠ»ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π½Π°ΡΡΡΠΎΠ΅Π½ ΡΠ°ΡΡΠΊΡΠΈΠ½ (XPT2046, FT6236). | ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π² lv_conf.h:
|
ΠΡΠ»Π΅Ρ ΠΏΠΎ Hardware Watchdog |
LVGL Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π° Π²ΡΠ΅ΠΌΡ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° (>5 ΡΠ΅ΠΊ). | Π£Π²Π΅Π»ΠΈΡΡΡΠ΅ ΡΠ°ΠΉΠΌΠ°ΡΡ watchdog ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠΈΡΠ΅ LVGL Π½Π° Π²ΡΠΎΡΠΎΠ΅ ΡΠ΄ΡΠΎ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 5). |
| ΠΡΡΠ΅ΡΠ°ΠΊΡΡ ΠΏΡΠΈ ΠΏΡΠΎΠΊΡΡΡΠΊΠ΅ | ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π±ΡΡΠ΅ΡΠ° ΠΊΠ°Π΄ΡΠ° ΠΈΠ»ΠΈ Π½ΠΈΠ·ΠΊΠ°Ρ ΡΠ°ΡΡΠΎΡΠ° SPI. | Π£Π²Π΅Π»ΠΈΡΡΡΠ΅ LV_DISP_BUF_SIZE Π΄ΠΎ LV_HOR_RES_MAX * 30 ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ°ΡΠ½ΡΡ
ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ. |
ΠΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΊΠΎΠ²Π°ΡΠ½Π° ΠΎΡΠΈΠ±ΠΊΠ° Ρ Hardware Watchdog. ΠΠ½Π° ΠΏΡΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΏΠΎΠ½ΡΠ°Π½Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° LVGL ΠΏΡΡΠ°Π΅ΡΡΡ ΠΎΡΡΠ΅Π½Π΄Π΅ΡΠΈΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, lv_chart Ρ 100 ΡΠΎΡΠΊΠ°ΠΌΠΈ). Π Π΅ΡΠ΅Π½ΠΈΠ΅ β ΡΠ°Π·Π±ΠΈΡΡ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³ Π½Π° ΡΠ°ΡΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ lv_refr_now:
for (int i = 0; i < 100; i++) {
lv_chart_set_next(chart, series, data[i]);
if (i % 10 == 0) lv_refr_now(NULL); // ΠΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³ ΠΊΠ°ΠΆΠ΄ΡΠ΅ 10 ΡΠΎΡΠ΅ΠΊ
}
7. ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ: ΡΠΎΠ·Π΄Π°ΡΠΌ Π΄Π°ΡΠ±ΠΎΡΠ΄ Ρ Π³ΡΠ°ΡΠΈΠΊΠ°ΠΌΠΈ
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ Π΄Π°ΡΠ±ΠΎΡΠ΄Π° Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ Ρ Π΄Π°ΡΡΠΈΠΊΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΠΌΠΏΠ΅ΡΠ°ΡΡΡΡ ΠΈ Π²Π»Π°ΠΆΠ½ΠΎΡΡΠΈ). ΠΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π·Π΄Π΅ΡΡ.
Π¨Π°Π³ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΊΡΠ°Π½ ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π½Π° Π½Π΅Π³ΠΎ Π³ΡΠ°ΡΠΈΠΊ:
lv_obj_t *chart = lv_chart_create(lv_scr_act(), NULL);lv_chart_set_range(chart, 0, 100); // ΠΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
lv_chart_set_type(chart, LV_CHART_TYPE_LINE);
lv_chart_series_t *series = lv_chart_add_series(chart, LV_COLOR_RED);
- ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΌΠ΅ΡΠΊΠΈ ΠΈ ΡΡΠΈΠ»ΠΈ:
lv_obj_set_size(chart, 200, 150);lv_chart_set_div_line_count(chart, 5, 5); // Π‘Π΅ΡΠΊΠ° 5Γ5
lv_chart_set_point_count(chart, 30); // 30 ΡΠΎΡΠ΅ΠΊ Π½Π° Π³ΡΠ°ΡΠΈΠΊΠ΅
- ΠΠ±Π½ΠΎΠ²Π»ΡΠΉΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠΈΠΊΠ»Π΅
loop():void loop() {static uint32_t last_ms = 0;
if (millis() - last_ms > 1000) { // ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π· Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ
last_ms = millis();
float temp = readTemperature();
lv_chart_set_next(chart, series, temp);
lv_refr_now(NULL);
}
lv_task_handler();
}
ΠΠ»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΠΊΡΡΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ lv_label:
lv_obj_t *label = lv_label_create(lv_scr_act(), NULL);
lv_label_set_text_fmt(label, "Temp: %.1fΒ°C", temp);
lv_obj_align(label, chart, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
ΠΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΠΊ Π³ΡΠ°ΡΠΈΠΊΡ?
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ lv_anim Π΄Π»Ρ ΠΏΠ»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΡΠΈΠΌΠ΅Ρ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ²Π΅ΡΠ° ΡΠ΅ΡΠΈΠΈ:
lv_anim_t a;
lv_anim_init(&a);
lv_anim_set_var(&a, series);
lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t)lv_chart_set_series_color);
lv_anim_set_values(&a, LV_COLOR_RED, LV_COLOR_BLUE);
lv_anim_set_time(&a, 1000); // ΠΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ 1 ΡΠ΅ΠΊΡΠ½Π΄Π°
lv_anim_start(&a);
FAQ: ΠΎΡΠ²Π΅ΡΡ Π½Π° ΡΠ°ΡΡΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ LVGL Π½Π° ESP32 Π±Π΅Π· Arduino IDE (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ESP-IDF)?
ΠΠ°, Π½ΠΎ ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΡΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ. Π ESP-IDF Π½ΡΠΆΠ½ΠΎ:
- Π‘ΠΊΠ°ΡΠ°ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΈ LVGL ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΡ Π² ΠΏΡΠΎΠ΅ΠΊΡ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ.
- ΠΠ°ΡΡΡΠΎΠΈΡΡ
CMakeLists.txtΠ΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ LVGL Ρ ΡΠ»Π°Π³Π°ΠΌΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ (-Os). - Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π΄ΡΠ°ΠΉΠ²Π΅Ρ Π΄ΠΈΡΠΏΠ»Π΅Ρ ΡΠ΅ΡΠ΅Π·
SPI MasterΠΈΠ»ΠΈI2CΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ESP-IDF.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ESP-IDF β Π»ΡΡΡΠ°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ΄Π° (Π½Π° 10-15% Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Π² Arduino IDE). ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ β ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ Π½ΠΎΠ²ΠΈΡΠΊΠΎΠ².
ΠΠ°ΠΊ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ LVGL Π½Π° ESP32?
ΠΠΎΡ 4 ΡΠΏΠΎΡΠΎΠ±Π°:
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
LV_COLOR_DEPTH=16Π²ΠΌΠ΅ΡΡΠΎ32(ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ 50% ΠΏΠ°ΠΌΡΡΠΈ Π½Π° Π±ΡΡΠ΅Ρ ΠΊΠ°Π΄ΡΠ°). - ΠΡΠΊΠ»ΡΡΠΈΡΠ΅ Π°Π½ΡΠΈΠ°Π»ΠΈΠ°ΡΠΈΠ½Π³:
#define LV_ANTIALIAS 0. - ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠΆΠ°ΡΡΠ΅ ΡΡΠΈΡΡΡ:
LV_FONT_DECLARE(lv_font_montserrat_12_compressed). - Π Π΅Π½Π΄Π΅ΡΠΈΡΠ΅ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
lv_calendar) ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ, Π° Π½Π΅ Π²setup().
ΠΠΎΡΠ΅ΠΌΡ ΠΏΡΠΈ ΠΊΠ°ΡΠ°Π½ΠΈΠΈ ΡΠΊΡΠ°Π½Π° LVGL Π·Π°Π²ΠΈΡΠ°Π΅Ρ Π½Π° 1-2 ΡΠ΅ΠΊΡΠ½Π΄Ρ?
ΠΡΠΎ ΡΠΈΠΏΠΈΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ΅Π·ΠΈΡΡΠΈΠ²Π½ΡΡ ΡΠ°ΡΡΠΊΡΠΈΠ½ΠΎΠ² (XPT2046). ΠΡΠΈΡΠΈΠ½Ρ:
- ΠΡΠ°ΠΉΠ²Π΅Ρ ΡΠ°ΡΡΠΊΡΠΈΠ½Π° ΠΎΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ°ΡΡΠΎ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΡΠ΅ 20 ΠΌΡ).
- ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠΈΡ ΠΊΠ°ΡΠ°Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅: ΡΠ²Π΅Π»ΠΈΡΡΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΠΎΠΏΡΠΎΡΠ° Π² lv_conf.h:
#define LV_INDEV_DEF_READ_PERIOD 100 // ΠΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ ΡΠ°Π· Π² 100 ΠΌΡ
Π ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠΈΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΊΠ°ΡΠ°Π½ΠΈΠΉ Π½Π° Π²ΡΠΎΡΠΎΠ΅ ΡΠ΄ΡΠΎ.
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ LVGL Π²ΠΌΠ΅ΡΡΠ΅ Ρ BLE Π½Π° ESP32?
ΠΠ°, Π½ΠΎ Ρ ΠΎΠ³ΠΎΠ²ΠΎΡΠΊΠ°ΠΌΠΈ:
- BLE Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π΄ΠΎ 50 ΠΠ RAM, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ LVGL ΠΎΡΡΠ°Π½Π΅ΡΡΡ ~270 ΠΠ (ΠΏΡΠΈ ΠΎΠ±ΡΠ΅ΠΉ SRAM 320 ΠΠ).
- Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ² Π² ΡΠΎΠ½Π΅ (
esp_ble_gap_stop_scanning()), ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΠΏΠΎΡΡΠ΅Π±Π»ΡΠ΅Ρ CPU. - ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
lv_tick_inc(5)Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠΌΠ΅ΡΠ°, ΡΡΠΎΠ±Ρ ΡΠ½ΠΈΠ·ΠΈΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ.
ΠΡΠΈΠΌΠ΅Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ:
#define LV_DISP_BUF_SIZE (LV_HOR_RES_MAX * 20) // ΠΡΡΠ΅Ρ Π½Π° 20 ΡΡΡΠΎΠΊ
#define LV_MEM_SIZE (16U * 1024U) // 16 ΠΠ Π΄Π»Ρ LVGL
ΠΠ°ΠΊ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ LVGL Π΄ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ Π² Arduino IDE?
Π Arduino IDE Π½Π΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ. Π‘Π΄Π΅Π»Π°ΠΉΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
- Π£Π΄Π°Π»ΠΈΡΠ΅ ΡΡΠ°ΡΡΡ Π²Π΅ΡΡΠΈΡ LVGL ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ
~/Documents/Arduino/libraries/lvgl. - Π‘ΠΊΠ°ΡΠ°ΠΉΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ Ρ GitHub (Π²Π΅ΡΠΊΠ°
release/v8.3). - Π Π°ΡΠΏΠ°ΠΊΡΠΉΡΠ΅ Π°ΡΡ
ΠΈΠ² Π² ΠΏΠ°ΠΏΠΊΡ
librariesΠΈ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΡΠΉΡΠ΅ ΠΏΠ°ΠΏΠΊΡ Π²lvgl. - ΠΠ±Π½ΠΎΠ²ΠΈΡΠ΅
lv_conf.h(ΡΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ ΠΈΠ· ΡΡΠ°ΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ).
ΠΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Ρ Π²Π°ΡΠΈΠΌ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΎΠΌ Π΄ΠΈΡΠΏΠ»Π΅Ρ β Π² Π½ΠΎΠ²ΡΡ
Π²Π΅ΡΡΠΈΡΡ
LVGL ΠΌΠΎΠ³ΡΡ ΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΈΠ³Π½Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, lv_obj_set_pos β lv_obj_set_x/lv_obj_set_y).