İçindekiler
Arduino LVGL Kullanımı Giriş
Arduino LVGL Kullanımı. Arduino ekosisteminde yıllardır grafik ekran kullanımı genellikle basit kütüphanelerle sınırlıydı. Ancak endüstriyel kullanıcı arayüzlerine benzer ekranlar geliştirmek, animasyon, menü sistemi, dokunmatik kontrol, widget’lar ve profesyonel HMI tasarımı gibi özellikler isteyenler için LVGL (Light and Versatile Graphics Library) devrim niteliğinde bir çözümdür.
LVGL, düşük bellek tüketimi ve yüksek performansıyla ESP32, STM32, Arduino tabanlı ekranlar ve diğer mikrodenetleyiciler üzerinde çalışan modern bir grafik arayüz (GUI) kütüphanesidir.
1. LVGL Nedir?
LVGL (LittlevGL); gömülü sistemlerde grafik arayüz geliştirmek için tasarlanmış açık kaynaklı, yüksek performanslı ve düşük kaynak tüketen bir GUI motorudur.
LVGL’nin teknik özellikleri:
- Ultra düşük bellek tüketimi (20 KB RAM’de bile çalışabilir)
- Yüksek FPS sağlayan grafik motoru
- Çoklu sayfa (screen) yönetimi
- Stil ve tema sistemi
- Animasyon motoru
- Touch panel desteği
- Olay tabanlı widget sistemi
- FreeRTOS uyumluluğu
- Donanımdan bağımsız yapı
Özellikle ESP32 + Arduino + TFT ekran kombinasyonunda mükemmel sonuç verir.
2. Gerekli Donanım Listesi
LVGL, çoğu grafik ekran ile uyumludur. Aşağıda en çok kullanılan yapılandırma verilmiştir:
| Donanım | Açıklama |
|---|---|
| ESP32 DevKitC | LVGL için yeterli RAM ve hız sağlar |
| ILI9341, ST7789, ILI9488 TFT ekran | Yaygın olarak kullanılır |
| XPT2046 resistive touch panel (isteğe bağlı) | Dokunmatik kontrol |
| FT6236 capacitive touch (isteğe bağlı) | Kapasitif touch |
| TFT_eSPI veya LovyanGFX | Donanım sürücüsü |
| Breadboard & jumper kablolar | Bağlantılar |
Arduino UNO da LVGL ile kullanılabilir ancak RAM sınırlamaları nedeniyle önerilmez. ESP32, LVGL için ideal platformdur.
3. Bağlantı Şeması
Aşağıdaki şema ESP32 + ILI9341 (SPI) + XPT2046 touch için hazırlanmıştır.
TFT (ILI9341) Bağlantısı
| ILI9341 Pin | ESP32 Pin |
|---|---|
| VCC | 3.3V |
| GND | GND |
| CS | 15 |
| RESET | 4 |
| DC | 2 |
| MOSI | 23 |
| MISO | 19 |
| SCK | 18 |
| LED | 3.3V |
Touch Panel Bağlantısı (XPT2046)
| XPT2046 Pin | ESP32 Pin |
|---|---|
| T_DO (MISO) | 19 |
| T_DIN (MOSI) | 23 |
| T_CLK | 18 |
| T_CS | 5 |
| IRQ | 25 |
Bu bağlantı, LVGL + TFT_eSPI + XPT2046 üçlüsü ile %100 uyumludur.
4. Arduino LVGL Başlangıç Kodu
Aşağıdaki kod, temel LVGL kurulumunu, ekran sürücüsünü ve basit bir etiket (label) oluşturmayı gösterir.
#include <lvgl.h>
#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI();
static lv_disp_draw_buf_t draw_buf;
static lv_color_t buf[240 * 10];
void my_disp_flush(lv_disp_drv_t *disp,
const lv_area_t *area,
lv_color_t *color_p) {
tft.startWrite();
tft.setAddrWindow(area->x1, area->y1,
area->x2 - area->x1 + 1,
area->y2 - area->y1 + 1);
uint32_t size = (area->x2 - area->x1 + 1) *
(area->y2 - area->y1 + 1);
tft.pushColors((uint16_t *)&color_p->full, size, true);
tft.endWrite();
lv_disp_flush_ready(disp);
}
void setup() {
lv_init();
tft.begin();
tft.setRotation(1);
lv_disp_draw_buf_init(&draw_buf, buf, NULL, 240 * 10);
static lv_disp_drv_t disp_drv;
lv_disp_drv_init(&disp_drv);
disp_drv.hor_res = 240;
disp_drv.ver_res = 320;
disp_drv.flush_cb = my_disp_flush;
disp_drv.draw_buf = &draw_buf;
lv_disp_drv_register(&disp_drv);
lv_obj_t *label = lv_label_create(lv_scr_act());
lv_label_set_text(label, "Merhaba LVGL!");
lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
}
void loop() {
lv_timer_handler();
delay(5);
}
Bu kod:
- Ekranı başlatır
- LVGL grafik motorunu çalıştırır
- Ekrana yazı basar
- Touch sürücüsü eklenebilir
5. LVGL Widget Örnekleri
LVGL, çok sayıda hazır kullanıcı arayüzü bileşeni (widget) sunar:
Button + Click Event
lv_obj_t *btn = lv_btn_create(lv_scr_act());
lv_obj_set_size(btn, 120, 50);
lv_obj_align(btn, LV_ALIGN_CENTER, 0, 40);
lv_obj_t *label = lv_label_create(btn);
lv_label_set_text(label, "Bas");
lv_obj_center(label);
Slider
lv_obj_t *slider = lv_slider_create(lv_scr_act());
lv_obj_set_width(slider, 200);
lv_obj_align(slider, LV_ALIGN_CENTER, 0, 80);
Chart (Grafik)
lv_obj_t *chart = lv_chart_create(lv_scr_act());
lv_chart_set_point_count(chart, 20);
lv_obj_set_size(chart, 200, 150);
lv_obj_align(chart, LV_ALIGN_CENTER, 0, -40);
6. Gündelik Hayatta LVGL Kullanım Alanları
Endüstriyel Uygulamalar
- Makine kontrol paneli
- Üretim sayaç ekranı
- HMI arayüzleri
IoT Sistemleri
- Sıcaklık–nem izleme
- Enerji tüketim paneli
- Kablosuz sensör ağı ekranı
Akıllı Ev Sistemleri
- Aydınlatma kontrol paneli
- Güvenlik ekranı
- Ev otomasyon menüsü
Robotik
- Servo açı ekranı
- Pil seviyesi göstergesi
- Robot durum paneli
3D Yazıcı ve CNC
- Menü sistemi
- Isı kontrol paneli
- Motor konum ekranı
7. Google’da En Çok Aranan Sorular ve Cevapları
1. LVGL Arduino UNO’da çalışır mı?
Teorik olarak evet, ancak UNO’nun RAM’i çok düşük olduğu için kullanımı önerilmez.
ESP32 en ideal seçenektir.
2. Ekranım LVGL ile açılıyor ama donuyor. Neden?
En yaygın nedenler:
lv_timer_handler()çağrılmıyor- Çizim tamponu (buffer) çok küçük
- SPI hızı çok düşük
3. LVGL Touch neden çalışmıyor?
Olası nedenler:
- Touch CS pini yanlış
- Touch sürücüsü yüklenmemiş
- Koordinatlar kalibre edilmemiş
4. LVGL ile menü tasarlamak mümkün mü?
Evet. LVGL, profesyonel menü sistemleri oluşturmak için uygundur.
5. LVGL’de FPS nasıl artırılır?
- TFT_eSPI’de SPI frekansını yükselt
- Çizim tampona daha büyük boyut ver
- Ekran çözünürlüğünü düşür
- Animasyon sayısını azalt
6. LVGL ile 20 sayfalık menü tasarlayabilir miyim?
Evet. LVGL çoklu ekran yapısı sayesinde sınırsız sayfa destekler.
7. LVGL neden endüstride bu kadar çok kullanılıyor?
- Düşük RAM tüketimi
- Yüksek stabilite
- Profesyonel widget sistemi
- Dokunmatik desteği
- Cross-platform yapısı
8. Geliştirilebilir Proje Fikirleri
Dokunmatik ekranlı akıllı termostat
SSH üzerinden mesaj alan IoT ekranı
Tarım teknolojileri için kontrol paneli
Servo motor kontrol UI
Çevrim içi hava durumu gösteren widget paneli
Eğitimlerimize katılarak bu ve diğer projeleri uygulamalı olarak öğrenebilirsiniz. Eğitimlerimize ve diğer bilgilere buradaki linkten (https://www.facadium.com.tr/) ulaşabilirsiniz. Ürünlerimize STEM Kits üzerinden ulaşabilirsiniz. STEM Kits (https://www.stemkits.com.tr/) Lütfen bizlere iletişim kanallarından ulaşınız.
