Nextion ekran, arayüzü kendi işlemcisinde çalıştıran ve Arduino ile yalnızca UART (TX, RX) üzerinden metin komutlarıyla haberleşen dokunmatik bir HMI ekrandır. Arayüz Nextion Editor ile hazırlanır, ekran 5 V ile beslenir ve her komutun sonuna üç adet 0xFF baytı eklenir.
Arduino projesine dokunmatik bir menü eklemek, grafik kütüphaneleriyle uğraşıldığında hem belleği hem de zamanı hızla tüketir. Nextion ekran bu yükü ekranın kendi işlemcisine aktarır: Arduino yalnızca kısa metin komutları gönderir. Bu yazıda Nextion ekranın ne olduğunu, serilerin farklarını, Nextion Editor ile arayüz hazırlamayı, Arduino bağlantısını, 0xFF sonlandırmalı komut göndermeyi ve dokunma bilgisini okumayı örnek kodla anlatıyoruz.
Nextion ekran nedir?
Nextion ekran, TFT panel, dokunmatik katman, işlemci ve flash belleği tek kartta birleştiren, arayüzü kendi üzerinde çalıştıran ve ana kartla UART (seri port) üzerinden haberleşen bir HMI (insan-makine arayüzü) ekranıdır. Ekranın sayfaları, butonları ve görselleri bilgisayarda Nextion Editor ile hazırlanır ve ekranın belleğine yüklenir.
Arduino, ESP32 ya da bir PLC ekrana yalnızca "bu yazıyı değiştir", "bu sayfaya geç" gibi komutlar gönderir; ekran da dokunulan butonun bilgisini geri yollar. Bu sayede 2 KB RAM'li bir Arduino Uno bile 7 inç bir arayüzü yönetebilir. Ekran tiplerinin genel karşılaştırması için OLED, LCD ve TFT ekran seçimi yazımıza bakabilirsiniz.
Nextion serileri arasındaki fark nedir?
Nextion serileri işlemci gücü, bellek ve ek donanımla ayrılır: Basic (T) seri temel ekrandır; Enhanced (K) seri RTC saat, EEPROM ve 8 GPIO ekler; Intelligent (P) seri çok daha fazla bellek, microSD ve ses çıkışı sunar; Edge (E) seri ise ince yapıda Intelligent'e yakın özellikler verir. Model kodundaki harf seriyi gösterir.
| Seri | Kod harfi | Örnek flash / RAM | RTC, EEPROM, GPIO | Örnek model |
|---|---|---|---|---|
| Basic | T | 4-16 MB / 3584 bayt | Yok | NX4024T032 |
| Enhanced | K | 16-32 MB / 3584 bayt ve üzeri | Var (8 GPIO) | NX3224K024, NX4827K043 |
| Intelligent | P | 120 MB / 512 KB | Var, microSD, ses | NX4827P043-011C |
| Edge | E | 120 MB / 512 KB | Var, ince gövde | NX4848E028-011C |
Model adı ayrıca çözünürlüğü ve boyutu da verir: NX4827K043, 480×272 çözünürlüklü, Enhanced serisi, 4,3 inç bir ekrandır. Intelligent ve Edge modellerin sonundaki "C" kapasitif, "R" rezistif dokunmatik anlamına gelir. Değerler Nextion'ın model veri sayfalarından alınmıştır; seçtiğiniz modelin sayfasını mutlaka kontrol edin.
Başlangıç için 2,4 inç Nextion NX3224K024 küçük ve ekonomik bir Enhanced modeldir; RTC gerekmiyorsa 3,2 inç Nextion NX4024T032 Basic seri seçenektir. Animasyon, ses ve büyük görseller gerekiyorsa 4,3 inç Nextion NX4827P043-011C ya da ince yapılı Nextion Edge NX4848E028 daha uygundur.
Nextion Editor ile arayüz nasıl hazırlanır?
Arayüz, Nextion'ın ücretsiz Windows programı Nextion Editor'da sayfalar oluşturulup bileşenler sürüklenerek hazırlanır, derlenir ve .tft dosyası olarak ekrana yüklenir. Adımlar şunlardır:
- Nextion Editor'ı nextion.tech adresinden indirip kurun; yeni proje açarken ekranınızın model kodunu ve yönünü seçin.
- Tools → Font Generator ile bir yazı tipi oluşturun; Türkçe karakter kullanacaksanız bu karakterleri içeren bir kodlama seçin.
- Sayfaya bir Text (t0), bir Number (n0), bir Progress bar (j0) ve bir Button (b0) ekleyin.
- Butonun Touch Press olayında "Send Component ID" kutusunu işaretleyin; böylece dokunulduğunda Arduino'ya bilgi gider.
- Debug ile arayüzü bilgisayarda deneyin, sonra Compile ile derleyin.
- File → TFT file output ile çıkan .tft dosyasını FAT32 biçimli bir microSD karta tek dosya olarak kopyalayıp ekrana takın ve enerji verin; yükleme bitince kartı çıkarıp yeniden başlatın. Alternatif olarak Upload ile bir USB-TTL dönüştürücü üzerinden yükleyebilirsiniz.
Nextion ekran Arduino'ya nasıl bağlanır?
Nextion ekran dört kabloyla bağlanır: 5V → 5 V besleme, GND → GND, ekranın TX ucu → Arduino'nun RX olarak kullanılan pini, ekranın RX ucu → Arduino'nun TX olarak kullanılan pini. Yani TX ve RX çapraz bağlanır; varsayılan haberleşme hızı 9600 baud'dur.
| Nextion | Arduino Uno (SoftwareSerial) | Arduino Mega | ESP32 DevKit |
|---|---|---|---|
| 5V | 5V ya da harici 5 V | 5V ya da harici 5 V | Harici 5 V (VIN) |
| GND | GND | GND | GND |
| TX | D2 (RX) | RX1 (D19) | GPIO16 (RX2) |
| RX | D3 (TX) | TX1 (D18) | GPIO17 (TX2) |
Nextion'ın seri portu 3,3 V TTL seviyesinde çıkış verir, veri sayfasına göre girişi 5 V'a kadar kabul eder; bu nedenle hem 5 V'luk Arduino hem de 3,3 V'luk ESP32 doğrudan bağlanabilir. Uno'nun tek donanım seri portu USB'ye ayrıldığı için örnekte SoftwareSerial ile D2 ve D3 kullanıyoruz. 115200 baud gibi yüksek hızlar için birden fazla donanım seri portu olan Arduino Mega 2560 R3 daha uygundur.
Nextion ekran ne kadar akım çeker?
Nextion ekranlar 5 V ile çalışır ve küçük modeller 65-85 mA, 4,3 inç Intelligent ve Edge modeller yaklaşık 220-250 mA çeker (tam parlaklıkta). Nextion, küçük modeller için 5 V 500 mA, Intelligent ve Edge modeller için 5 V 1 A besleme önerir.
2,4-3,2 inç ekranlar USB'den beslenen bir Arduino Uno R3 üzerinden çalışabilir. 4,3 inç ve büyük ekranlarda, ayrıca röle ya da motor da kullanılıyorsa ekranı ayrı bir 5 V kaynaktan besleyin ve GND'leri birleştirin. Yetersiz beslemede ekran açılışta yeniden başlar, titrer ya da dokunma hatalı çalışır. Parlaklığı dim=50 komutuyla düşürmek akımı da azaltır.
Arduino'dan Nextion'a komut nasıl gönderilir?
Arduino'dan Nextion'a komut, düz metin olarak seri porttan gönderilir ve her komutun sonuna üç adet 0xFF baytı eklenir; ekran bu üç baytı görünce komutu çalıştırır. Örneğin t0.txt="Merhaba" metin bileşenini, n0.val=25 sayı bileşenini, page 1 ise açık sayfayı değiştirir.
Aşağıdaki kod, A0'a bağlı bir potansiyometrenin değerini n0 ve j0 bileşenlerine yazar, b0 butonuna dokunulduğunda da Arduino'nun 13 numaralı pinindeki LED'i yakıp söndürür:
#include <SoftwareSerial.h>
SoftwareSerial nex(2, 3); // RX = D2 (Nextion TX), TX = D3 (Nextion RX)
const uint8_t BUTON_ID = 4; // Editor'da b0'in id degeri
void nexKomut(const char *komut) {
nex.print(komut);
nex.write(0xFF);
nex.write(0xFF);
nex.write(0xFF);
}
void setup() {
pinMode(13, OUTPUT);
nex.begin(9600);
delay(500);
nexKomut("page 0");
nexKomut("t0.txt=\"Hazir\"");
}
void loop() {
char buf[24];
int deger = analogRead(A0);
snprintf(buf, sizeof(buf), "n0.val=%d", deger);
nexKomut(buf);
snprintf(buf, sizeof(buf), "j0.val=%d", (int)map(deger, 0, 1023, 0, 100));
nexKomut(buf);
// Dokunma paketi: 0x65 sayfa bilesen olay FF FF FF
while (nex.available() >= 7) {
if (nex.peek() != 0x65) { nex.read(); continue; }
uint8_t p[7];
nex.readBytes(p, 7);
if (p[4] == 0xFF && p[5] == 0xFF && p[6] == 0xFF && p[2] == BUTON_ID && p[3] == 1) {
digitalWrite(13, !digitalRead(13));
}
}
delay(200);
}
Metin değerleri çift tırnak içinde gönderilir; C kodunda tırnağı ters eğik çizgiyle yazmanız gerekir. Bileşen adları (t0, n0, j0) Editor'da verdiğiniz adlarla aynı olmalıdır. Nextion'ın resmi Arduino kütüphanesi ve ESPHome gibi hazır çözümler de aynı protokolü kullanır; protokolü elle yazmak hem belleği korur hem de hata ayıklamayı kolaylaştırır.
Nextion'dan gelen dokunma bilgisi nasıl okunur?
"Send Component ID" işaretli bir bileşene dokunulduğunda Nextion 7 baytlık bir paket gönderir: 0x65, sayfa numarası, bileşen id'si, olay (1 = basıldı, 0 = bırakıldı) ve üç adet 0xFF. Örneğin 0. sayfadaki 4 numaralı butona basılınca 65 00 04 01 FF FF FF gelir.
Ekran başka cevaplar da gönderir: get n0.val komutuna 0x71 ile başlayan ve 4 baytlık sayıyı taşıyan bir paket, metin sorgusuna 0x70 ile başlayan bir paket döner. Yukarıdaki kod 0x65 ile başlamayan baytları atlayarak bu paketlerle karışmayı önler. Seri haberleşmede sorun yaşarsanız ekranı bir USB-TTL dönüştürücü ile bilgisayara bağlayıp gelen baytları doğrudan izleyebilirsiniz.
Sık sorulan sorular
Nextion ekran Arduino'suz çalışır mı?
Evet, sayfalar arası geçiş, buton animasyonları ve basit hesaplamalar ekranın kendi kodunda çalışır; Arduino gerekmez. Enhanced ve Intelligent serilerde GPIO uçları ve RTC olduğu için basit bir LED ya da röle sürücüsünü ekran kendisi tetikleyebilir. Sensör okuma ve yük kontrolü gibi işler ise yine bir mikrodenetleyici ister.
Nextion ekranda Türkçe karakter nasıl gösterilir?
Nextion Editor'ın Font Generator aracında Türkçe karakterleri kapsayan bir kodlamayla yazı tipi oluşturup projede kullanmanız gerekir. Arduino'dan gönderilen metnin de aynı kodlamayla gönderilmesi önemlidir; Arduino IDE metni UTF-8 olarak kaydettiği için Türkçe harfler ekranda bozuk görünebilir. Bu durumda harfleri kodda bayt değeriyle göndermek en güvenli yoldur.
Nextion'ın haberleşme hızı nasıl değiştirilir?
Varsayılan hız 9600 baud'dur; bauds=115200 komutu hızı kalıcı olarak (açılış hızı), baud=115200 komutu yalnızca o oturum için değiştirir (veri sayfalarına göre desteklenen aralık 2400-921600 baud'dur). Hızı değiştirdikten sonra Arduino tarafında da aynı değeri kullanın. SoftwareSerial yüksek hızlarda güvenilir olmadığı için 115200 baud'da donanım seri portu tercih edin.
Ekrana .tft dosyası yüklenmiyor, ne yapmalıyım?
microSD kartın FAT32 biçimli olduğunu, 32 GB'tan büyük olmadığını ve kök dizinde yalnızca bir .tft dosyası bulunduğunu kontrol edin. Projenin ekranınızın tam model kodu için derlendiğinden emin olun; farklı model için derlenen dosya yüklenmez. Editor sürümü ile ekran yazılımı arasındaki uyumsuzluklarda Editor'ı güncelleyin.
Nextion ile ESP32 birlikte kullanılabilir mi?
Evet, ESP32'nin ikinci donanım seri portu (ör. GPIO16 ve GPIO17) Nextion için idealdir ve seviye dönüştürücü gerekmez. Ekranı ESP32 kartının 3V3 pininden değil, 5 V hattından besleyin. Wi-Fi'dan alınan hava durumu ya da sensör verisi aynı komutlarla ekrana yazılır; benzer projeleri TFT ekran ile Arduino ve ESP32 yazımızda da bulabilirsiniz.
Özet
- Nextion ekran, arayüzü kendi işlemcisinde çalıştıran ve UART ile haberleşen dokunmatik bir HMI ekrandır.
- Arayüz Nextion Editor'da hazırlanır, .tft dosyası microSD ya da USB-TTL ile yüklenir.
- Bağlantı dört kablodur: 5V, GND ve çapraz TX-RX; varsayılan hız 9600 baud'dur.
- Her komut düz metindir ve sonuna üç adet 0xFF baytı eklenir; dokunma paketi 0x65 ile başlar.
- Küçük modeller 5 V 500 mA, Intelligent ve Edge modeller 5 V 1 A besleme ister.
