Basic Tutorial for Arduino, 進階篇, 顯示器模組

【Arduino進階教學】ST7735 1.8吋 TFT 全彩顯示螢幕模組:SPI 接線、Adafruit 圖形庫與畫面繪製實作

一、 實驗說明:為什麼選擇 ST7735 TFT 全彩顯示螢幕?

在 Arduino 專題製作中,顯示器的選擇非常多樣。若需要呈現豐富的彩色畫面與圖形介面,米羅強烈推薦使用 ST7735 1.8 吋 TFT 全彩顯示螢幕,它不僅 CP 值最高,且顯示效果鮮豔、視角極寬。

核心技術與軟體架構

  1. 硬體規格: 搭載 ST7735 控制器晶片,支援 65K 真實彩色,解析度為 像素,採用高速的 SPI 介面 進行通訊。

  2. Adafruit 繪圖生態系: 本範例採用廣受好評的 Adafruit 函式庫。除了主體的 Adafruit_ST7735 驅動外,還需搭配 Adafruit_GFX 核心圖形庫。

  3. 強大的通用語法: Adafruit_GFX 為所有的 LCD 和 OLED 顯示器提供了統一的圖形與文字繪製語法。這使得開發者未來若更換顯示器型號,也能輕鬆轉移程式碼。

二、 實驗所需材料與電路接線圖 (Hardware Setup)

請依照下表的引腳對接說明,將 1.8 吋 ST7735 螢幕模組正確連接至 Arduino Uno。

⚠️ 安全警告: 接線時請務必仔細核對螢幕背板的引腳名稱(如 BL、CS、DC、RES),接錯電源極性或腳位將可能導致顯示模組永久損毀。

🛒 準備材料

  • Arduino Uno R3 開發板 x 1

  • USB 傳輸線 x 1

  • 1.8 吋 ST7735 TFT 全彩 LCD 模組 x 1

  • 杜邦線 若干

🛍️ 準備好你的硬體工具了嗎? 推薦選購:米羅科技 – Arduino 程式學習爆款套件組(包含豐富驅動專案模組)

👍爆款推薦:程式學習套件組 

購買網址:shop.mirotek.com.tw

 

▼ 購買1.8吋ST7735 LCD:

1.8吋 / 1.44吋 TFT LCD 全彩螢幕 128×160 SPI介面

 

⚡ 腳位對接說明 (Pin Mapping)

ST7735 模組腳位功能說明Arduino Uno 對應引腳
BL背光控制 (Backlight)3.3V
CS晶片選擇 (Chip Select)PIN 10
DC (A0 / RS)資料/指令選擇PIN 8
RES (RST)硬體重置 (Reset)PIN 9
MOSI (SDA)主輸出從輸入 (SPI Data)PIN 11
SCK (SCL)序列時脈 (SPI Clock)PIN 13
VCC電源正極 (3.3V ~ 5V)5V
GND電源接地GND

三、 必備函式庫安裝步驟

在編譯程式碼之前,必須透過 Arduino IDE 內建的程式庫管理員安裝兩個核心套件:

  1. 安裝 Adafruit ST7735 程式庫:

    • 打開 Arduino IDE,點選上方選單的 草稿碼 (Sketch) > 匯入程式庫 (Include Library) > 管理程式庫 (Manage Libraries)。

    • 在右上角搜尋框輸入 「Adafruit ST7735」。

    • 找到該項目後,點擊右下角的 「安裝 (Install)」 按鈕。

  2. 安裝 Adafruit GFX 程式庫:

    • 同樣在程式庫管理器中,輸入搜尋 「Adafruit GFX」。

    • 找到 Adafruit GFX Library 後點擊 「安裝」(若提示安裝額外相依相容套件,請一併安裝)。

四、 完整程式碼實作:圖形、字型與色彩繪製

本程式示範如何初始化 ST7735 螢幕、設定自訂英文字型、輸出彩色文字,並透過 mediabuttons() 函式繪製方框、圓形與三角形等幾何圖形。

#include <Adafruit_GFX.h>  //核心圖形庫
#include <Adafruit_ST7735.h>  //Hardware-specific library for ST7735
#include <Adafruit_ST7789.h>  //Hardware-specific library for ST7789
#include <Fonts/FreeMonoBold9pt7b.h>  //字型FreeMonoBold9pt7b
#include <Fonts/FreeSansBold9pt7b.h>  //字型FreeSansBold9pt7b
#include <Fonts/FreeSerif9pt7b.h>  //字型FreeSerif9pt7b
#include <SPI.h> 

#define TFT_CS  10 // TFT CS PIN腳
#define TFT_DC   8 // TFT DC(A0、RS) PIN腳
#define TFT_RST  9 // TFT RES(Reset) PIN腳


Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);


void setup(void) {
  
  tft.initR(INITR_BLACKTAB);      // Init ST7735S chip, black tab

  tft.setRotation(1);  //螢幕轉向
  tft.fillScreen(ST77XX_BLACK);  //設定螢幕背景為黑色
  tft.setCursor(6, 15);  //設定文字游標開始位置
  tft.setTextColor(ST77XX_WHITE);  //設定文字顏色
  tft.setFont(&FreeMonoBold9pt7b);  //字型
  tft.print(" Hi Mirotek !");  //顯示文字
  tft.setCursor(20, 52);
  tft.setTextColor(ST77XX_RED);
  tft.setFont(&FreeSansBold9pt7b);
  tft.print("Color Display");
  tft.setCursor(3, 80);
  tft.setTextColor(ST77XX_GREEN);
  tft.setFont(&FreeSerif9pt7b); 
  tft.print("shop.mirotek.com.tw");
  mediabuttons();  //繪制幾何圖形

}

void mediabuttons() {
  tft.drawRect(25, 95, 30, 30, ST77XX_MAGENTA); //畫一個方框 x,y,w,h,顏色值
  tft.fillRect(28, 98, 24, 24, ST77XX_MAGENTA); //填滿方形 x,y,w,h,顏色值
  tft.drawCircle(80, 110, 15, ST77XX_BLUE);  //畫一個空的圓框  x,y,radius,顏色值 
  tft.fillCircle(80, 110, 12, ST77XX_BLUE);  //填滿圓形 x,y,radius,顏色值
  tft.drawTriangle(105, 125, 125, 95, 145, 125, ST77XX_YELLOW);//給予三角形的三個頂點座標點,以及顏色值。
  tft.fillTriangle(110, 122, 125, 100, 140, 122, ST77XX_YELLOW);//給予三角形的三個頂點座標點,以及顏色值。
}

void loop() {
  
}

五、 常見問題與除錯 (FAQ)

Q1:如何修改螢幕的顯示方向(直立轉橫向)?

  • 解答: 可以透過更改 tft.setRotation(n); 中的數值 n(通常為 0 到 3)來切換 0 度、90 度、180 度或 270 度的畫面旋轉。

Q2:畫面完全黑屏,背光有亮但沒有顯示任何文字或圖形?

  • 解答: 請檢查 SPI 的硬體接線(MOSI 與 SCK 是否對應到 Uno 的 Pin 11 與 Pin 13),並確認 DC 腳位與 CS 腳位是否有插錯。

Q3:螢幕邊緣出現白色邊框或畫面位置偏移怎麼辦?

  • 解答: 市面上部分批次的 ST7735 液晶螢幕模組其控制器內部記憶體偏移量不同。若您發現畫面四周出現異常白邊或影像被裁切,可以透過修改 Adafruit 函式庫中的全域參數來進行修正:

    1. 調整解析度參數: ST7735_TFTWIDTH_128 與 ST7735_TFTHEIGHT_160

    2. 設定檔案路徑位置: /Arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST77xx.h

    3. 調整晶片標籤: 調整對應的晶片初始化標籤(例如從 INITR_BLACKTAB 改為 INITR_REDTAB或 INITR_GREENTAB)即可完美解決版面偏移問題。

ST7735 1.8吋 TFT 全彩顯示螢幕模組白色邊框調整參數

檔案位置:/Arduino/libraries/Adafruit_ST7735_and_ST7789_Library/Adafruit_ST77xx.h

相關文章