ST7735; Sitronics adlı Rus firmasının geliştirdiği bir kontrol çipidir ve bu çipi kullanan ST7735 LCD modülleri oldukça uygun fiyata temin edilebilmektedir. ST7735, SPI seri haberleşme arayüzü ile çalışır. Ekran 160 satır ve 128 sütundan oluşmaktadır ve 16bit renk derinliğine sahiptir.
ST7735 3.3Volt ile çalışır. Bu nedenle 5V Arduino modeli kullanılıyorsa, gerilimin 3.3Volt’ a düşürülmesi gerekmektedir. Bunun için 5 adet 1K direnç kullanmak yeterli olacaktır.
Malzemeler
- 1 adet Arduino
- 1 adet ST7735 1.8″ TFT LCD
- 5 adet 1K direnç
Bağlantı şeması
ST7735 pin adı | ST7735 alternatif pin adı | Arduino bağlantı pini |
---|---|---|
GND | GND | GND |
VCC | VDD | 3.3V |
SCL | SCLK | 13 (1K direnç ile) |
SDA | MOSI | 11 (1K direnç ile) |
RST | Reset | 8 (1K direnç ile) |
DC | A0 | 9 (1K direnç ile) |
CS | CS | 10 (1K direnç ile) |
BLK | Led | 3.3V |
ST7735 1.8″ LCD modellerinin bağlantı pinlerinin yeri farklılık gösterebilir. Bu yüzden bağlantı yaparken yukarıdaki tabloya uygun olarak yapınız.
Kaynak kod
ST7735 TFT LCD’ yi çalıştırmak için Adafruit_GFX, Adafruit_ST7735 ve SPI kütüphaneleri gerekmektedir. Kütüphaneleri aşağıdaki linklere tıklayarak indirebilirsiniz.
Arduino ile ekranın iletişim kurması için kütüphanelerin çağırılıp, ekranın pin numaralarının Arduino’ ya bildirilmesi gerekmektedir. Bu işlem aşağıdaki kod satırları ile yapılabilir.
int sclk = 13; int mosi = 11; int cs = 10; int dc = 9; int rst = 8; #include <Adafruit_GFX.h> // grafik kütüphanesi #include <Adafruit_ST7735.h> // donanım kütüphanesi #include <SPI.h> Adafruit_ST7735 tft = Adafruit_ST7735 (cs, dc, rst); void setup() { Serial.begin (9600); tft.initR (INITR_BLACKTAB); Serial.println ("TFT bağlandı"); } void loop() { delay(500); //Ekranın tazelenmesi için bekleme süresi }
Yukarıdaki kod çalıştırıldığında ekranda herhangi bir bildirim görünmeyecektir. Ancak seri porttan “TFT bağlandı” yazısı alındıysa LCD doğru bir şekilde bağlanmış demektir. Burada tft adında bir ST7735 nesnesi tanımlanmıştır ve bundan sonraki kodlar tft nesnesi üzerinden ilerleyecektir.
Bir pikselin rengini değiştirme
Ekranda herhangi bir pikseli istenen renge boyamak için aşağıdaki fonksiyon kullanılır.
void drawPixel(uint16_t x, uint16_t y, uint16_t color);
Bu fonksiyonun parametreleri;
uint16_t x: Pikselin x koordinatındaki konumu (hangi sütunda?)
uint16_t y: Pikselin y koordinatındaki konumu (hangi satırda?)
uint16_t color: Pikselin boyanacağı renk kodu
Örneğin 20. sütun ve 80. satırdaki pikseli yeşile boyamak istersek loop fonksiyonunun içine
tft.drawPixel(20, 80, 0x07E0);
komut satırını ekleyebiliriz. Burada 0x7BEF bir uint16 renk kodunu ifade etmektedir. ST7735 kütüphanesinin içinde önceden tanımlanmış renk kodları bulunur. Bunlar aşağıdaki tablodaki şekildedir.
ST7735 Renk Kodu | uint16 | Karşılığı |
---|---|---|
ST7735_BLACK | 0x0000 | Siyah |
ST7735_RED | 0x001F | Kırmızı |
ST7735_GREEN | 0x07E0 | Yeşil |
ST7735_WHITE | 0xFFFF | Beyaz |
ST7735_BLUE | 0xF800 | Mavi |
ST7735_CYAN | 0x07FF | Camgöbeği |
ST7735_YELLOW | 0xFFE0 | Sarı |
ST7735_MAGENTA | 0xF81F | Eflatun |
Buna göre yukarıdaki kodu aşağıdaki şekilde yazarsak da piksel yine aynı renge (yeşile) boyanacaktır.
tft.drawPixel(20, 80, ST773_GREEN);
İki nokta arasına çizgi çizme
Ekranda iki nokta arasına çizgi çizmek için aşağıdaki fonksiyon kullanılır.
void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color);
Bu fonksiyonun parametreleri;
uint16_t x0, uint16_t y0: Birinci pikselin x, y koordinatları
uint16_t x1, uint16_t y1: İkinci pikselin x, y koordinatları
uint16_t color: Çizginin rengi
Örneğin 20,80 noktası ile 50,100 noktası arasında kırmızı renkte bir çizgi çekmek için aşağıdaki komut satırı uygulanabilir.
tft.drawLine(20, 80, 50, 100, ST7735_RED);
Dikdörtgen çizme
Ekranda verilen bir noktadan itibaren dikdörtgen çizmek için aşağıdaki fonksiyonlardan biri kullanılır.
// İçi boş dikdörtgen çizmek için void drawRect(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint16_t color); // İçi dolu dikdörtgen çizmek için void fillRect(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint16_t color);
Bu fonksiyonların parametreleri;
uint16_t x0, uint16_t y0: Başlangıç pikselinin x, y koordinatları
uint16_t w: Dikdörtgenin genişliği
uint16_t h: Dikdörtgenin yüksekliği
uint16_t color: Dikdörtgenin rengi
Bu fonksiyonların kullanım örnekleri aşağıdaki gibidir.
// 10,10 pikselden başlayarak 20x30 piksel büyüklüğünde içi boş kırmızı çerçeveli bir dikdörtgen çizmek için tft.drawRect(10, 10, 20, 30, ST7735_RED); // 25,35 pikselden başlayarak 40x30 piksel büyüklüğünde içi dolu mavi bir dikdörtgen çizmek için tft.fillRect(25, 35, 40, 30, ST7735_BLUE);
Daire çizme
Ekranda verilen bir noktayı merkez alarak, bu merkezin etrafına istenen yarıçapta bir daire çizmek için aşağıdaki fonksiyonlar kullanılır.
// İçi boş daire çizmek için void drawCircle(uint16_t x0, uint16_t y0, uint16_t r, uint16_t color); // İçi dolu daire çizmek için void fillCircle(uint16_t x0, uint16_t y0, uint16_t r, uint16_t color);
Bu fonksiyonların parametreleri;
uint16_t x0, uint16_t y0: Başlangıç pikselinin (dairenin merkez noktasının) x, y koordinatları
uint16_t r: Dairenin yarıçapının kaç piksel olduğu
uint16_t color: Dairenin rengi
Bu fonksiyonların kullanım örnekleri aşağıdaki gibidir.
// Merkez noktası 40,40 pikselde olan 10 piksel yarıçapında kırmızı bir daire çiz tft.drawCircle(40, 40, 10, ST7735_RED); // Merkez noktası 30,50 pikselde olan 5 piksel yarıçapında yeşil ve içi dolu bir daire çiz tft.fillCircle(30, 50, 5, ST7735_GREEN);
Kenarları yumuşatılmış dikdörtgen çizme
Bazı uygulamalarda kenarları yumuşatılmış dikdörtgenler çizmek gerebilir .Verilen bir noktadan itibaren yumuşatılmış dikdörtgen çizmek için aşağıdaki fonksiyonlardan biri kullanılır.
// İçi boş yumuşatılmış dikdörtgen çizmek için void drawRoundRect(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint16_t radius, uint16_t color); // İçi dolu yumuşatılmış dikdörtgen çizmek için void fillRoundRect(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint16_t radius, uint16_t color);
Bu fonksiyonların parametreleri;
uint16_t x0, uint16_t y0: Başlangıç pikselinin x, y koordinatları
uint16_t w: Dikdörtgenin genişliği
uint16_t h: Dikdörtgenin yüksekliği
uint16_t radius: Yumuşatma yarıçapı
uint16_t color: Dikdörtgenin rengi
Bu fonksiyonların kullanım örnekleri aşağıdaki gibidir.
// 10,10 pikselden başlayarak 20x30 piksel büyüklüğünde 1 piksel yumuşatılmış içi boş kırmızı çerçeveli bir dikdörtgen çizmek için tft.drawRect(10, 10, 20, 30, 1, ST7735_RED); // 25,35 pikselden başlayarak 40x30 piksel büyüklüğünde 3 piksel yumuşatılmış içi dolu mavi bir dikdörtgen çizmek için tft.fillRect(25, 35, 40, 30, 3, ST7735_BLUE);
Üçgen çizme
Verilen üç noktanın birleştirilip bir üçgen çizilmesi için aşağıdaki fonksiyonlardan biri kullanılır.
// İçi boş bir üçgen çizmek için void drawTriangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color); // İçi dolu bir üçgen çizmek için void fillTriangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);
Bu fonksiyonların parametreleri;
uint16_t x0, uint16_t y0: Birinci pikselin x, y koordinatları
uint16_t x1, uint16_t y1: İkinci pikselin x, y koordinatları
uint16_t x2, uint16_t y2: Üçüncü pikselin x, y koordinatları
uint16_t color: Üçgenin rengi
Bu fonksiyonların kullanım örnekleri aşağıdaki gibidir.
// (10,10), (20,32) ve (100,99) noktaları arasında içi boş yeşil bir üçgen çizmek için tft.drawTriangle(10, 10, 20, 32, 100, 99, ST7735_GREEN); // (10,10), (20,32) ve (100,99) noktaları arasında içi dolu yeşil bir üçgen çizmek için tft.fillTriangle(10, 10, 20, 32, 100, 99, ST7735_GREEN);
Metin yazdırma
Ekrana bir metin yazdırmak için aşağıdaki komut satırları kullanılabilir.
tft.fillScreen (ST7735_BLACK); // Ekranın tamamını siyaha boya tft.setTextColor(ST7735_RED); // Yazı rengini kırmızı olarak ayarla tft.setTextSize(1); // Yazı boyutu 1 olsun tft.setCursor (10, 6); // Yazının başlangıç pikselinin koordinatları tft.print ("www.hbmacit.com"); // Ekrana yazdırılacak metin
Bu komut seti çalıştırıldığında aşağıdaki gibi bir çıktı elde edilecektir.
Resim çizme
ST7735 ekranına monokrom görüntüler çizilebilir ve bunlardan animasyonlar oluşturulabilir. Bunun için aşağıdaki fonksiyon kullanılmaktadır.
void drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h, uint16_t color);
Bu fonksiyonların parametreleri;
uint16_t x0, uint16_t y0: Resmin başlangıç x, y koordinatları
uint8_t *bitmap: Resmi gösteren array
int16_t w: Resmin genişliği
int16_t h: Resmin yüksekliği
uint16_t color: Resmin rengi
Bir resmi ekranda çizdirmek için önce o resmi uint_8 dizisine dönüştürmek gerekir. Bu dönüşümü yapan bazı programlar olsa da, aşağıdaki linki verilen web sitesinden bu işlemi çevrimiçi olarak kolayca yapabilirsiniz.
Bir görüntüyü array’ e dönüştürünce Arduino’ da aşağıdaki şekilde tanımlayabilirsiniz.
const unsigned char BenimResmim [] PROGMEM = { 0x01, 0x80, 0x01, 0x80, 0x01, 0x98, 0x07, 0xf8, 0x0c, 0x30, 0x10, 0x08, 0x20, 0x04, 0x2c, 0x34, 0x26, 0x64, 0x61, 0x86, 0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x10, 0x08, 0x0c, 0x30, 0x07, 0xe0 };
Resmin çözünürlüğü ne kadar çoksa, dizinin boyutu da o kadar çok olacaktır. Yukarıdaki array’ i ekrana yazdırmak için aşağıdaki komut satırı kullanılabilir.
tft.drawBitmap(0, 0, BenimResmim, 16, 16, ST7735_RED);
Bu komut satırı ile ekranın sol üst köşesinden (0,0 piksel) başlayarak 16×16 piksel büyüklüğünde ve kırmızı renkte resim çizilecektir.