아두이노 나노 ILI9341 ILI9488 ST7789 TFT LCD 터치 디스플레이 SPI 인터페이스
이 튜토리얼은 Arduino Nano에서 SPI TFT 디스플레이를 단계적으로 사용하는 방법을 안내합니다. Nano는 Uno와 동일한 ATmega328P를 소형 브레드보드 친화적인 패키지에 담았습니다 — 동일한 하드웨어 SPI 핀이 있어 TFT 배선은 Uno와 동일합니다. 주의할 제한 사항은 2KB SRAM입니다: 메모리에 큰 비트맵을 피하고 이미지 데이터에는 PROGMEM을 사용하세요.
다음을 배울 것입니다:
- SPI TFT 디스플레이 모듈을 Arduino Nano에 배선하는 방법.
- 도형, 선을 그리고 색상으로 영역을 채우는 방법.
- 화면에 텍스트와 숫자 값을 표시하는 방법.
- 프로그램 메모리(PROGMEM)에서 비트맵 이미지를 그리는 방법.
- SD 카드에서 불러온 비트맵 이미지를 그리는 방법.
- 사용자 정의 외부 폰트로 텍스트를 렌더링하는 방법.
- XPT2046 컨트롤러에서 원시 터치 좌표를 읽는 방법.
- 손가락을 디스플레이에 드래그하여 화면에 그리는 방법.
- 화면에 인터랙티브 터치 버튼을 만드는 방법.
- 터치 스크린을 보정하는 방법.
- 디스플레이에 보조 또는 사용자 정의 SPI 버스를 사용하는 방법.
이 튜토리얼은 터치 및 비터치 SPI TFT LCD 디스플레이를 모두 다룹니다. ILI9341, ILI9488, 또는 ST7789 컨트롤러 칩이 탑재된 1.3, 1.54, 2.2, 2.4, 2.8, 3.2, 3.5인치 패널에서 작동합니다.

필요한 하드웨어
| 1 | × | 아두이노 나노 | 쿠팡 | 아마존 | |
| 1 | × | USB A to Mini-B USB 케이블 | 쿠팡 | 아마존 | |
| 1 | × | SPI TFT display module | 쿠팡 | 아마존 | |
| 1 | × | 5V to 3.3V Level Converter | 아마존 | |
| 1 | × | 점퍼케이블 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 나노용 스크루 터미널 확장 보드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 나노용 브레이크아웃 확장 보드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 나노용 전원 분배기 | 쿠팡 | 아마존 |
SPI TFT 디스플레이 개요
SPI TFT 디스플레이 모듈은 4선 SPI 버스를 통해 컨트롤러 칩이 구동하는 컬러 LCD 패널입니다. DIYables_TFT_SPI 라이브러리는 세 가지 인기 드라이버 칩을 지원합니다:
- ILI9341 - 16비트 RGB565 색상, 최대 40MHz SPI.
- ILI9488 - 18비트 RGB666 색상, 최대 24MHz SPI.
- ST7789 - 16비트 RGB565 색상, 최대 40MHz SPI.
권장 사항: 디스플레이를 아직 구매하지 않은 경우 ST7789 드라이버를 권장합니다. 널리 구할 수 있고, 최대 40MHz SPI 속도로 실행되며, 새 프로젝트에 가장 간단한 선택입니다.
핀아웃
대부분의 SPI TFT LCD 디스플레이에는 다음 핀이 있습니다:
디스플레이 핀:
| 핀 | 기능 |
|---|---|
| VCC | 전원 공급 |
| GND | 그라운드 |
| CS | 칩 선택 — SPI 버스에서 디스플레이를 선택하기 위해 LOW로 당김 |
| DC / RS | 데이터/명령 선택 — 픽셀 데이터는 HIGH, 명령은 LOW |
| RST | 하드웨어 리셋 — 선택 사항; 사용하지 않으면 3.3V에 연결 |
| MOSI / SDI / SDA | SPI 데이터 입력(MCU → 디스플레이) |
| SCK / CLK | SPI 클록 |
| MISO / SDO | SPI 데이터 출력(디스플레이 → MCU) — 디스플레이 전용 사용 시 선택 사항 |
| LED / BL / BLK | 백라이트 전원 — 3.3V 또는 밝기 조절을 위한 PWM 핀에 연결 |
SD 카드 핀(애플리케이션에서 SD 카드에 접근해야 하는 경우):
| 핀 | 기능 |
|---|---|
| SD_CS / TF_CS | SD 카드 칩 선택 |
| MOSI / SDI | MOSI — MCU에서 SD 카드로 데이터 |
| SCK / CLK | SCK — SPI 클록 |
| MISO / SDO | MISO — SD 카드에서 MCU로 데이터 |
터치를 지원하는 TFT 디스플레이의 경우 추가 터치 핀이 있습니다:
| 핀 | 기능 |
|---|---|
| T_CS | 터치 컨트롤러 칩 선택 |
| T_CLK | SCK — SPI 클록 |
| T_DIN | MOSI — MCU에서 터치 컨트롤러로 데이터 |
| T_DO | MISO — 터치 컨트롤러에서 MCU로 데이터 |
| T_IRQ | 터치 인터럽트 — 선택 사항; 화면이 터치될 때 신호를 보냄 |

배선도
⚠ 중요 — 전압 불일치: Arduino Nano는 5V 보드입니다. GPIO 핀은 5V 로직을 출력하지만 SPI TFT 디스플레이는 3.3V에서 작동합니다. Nano에서 디스플레이로 신호선(MOSI, SCK, CS, DC, RST, 터치 사용 시 T_CS)을 직접 연결하면 디스플레이가 손상됩니다. Nano와 디스플레이 사이의 모든 MCU 구동 신호선에 5V to 3.3V 레벨 컨버터를 사용해야 합니다. MISO 라인(디스플레이 → MCU)은 레벨 컨버터가 필요 없습니다. TFT VCC를 Nano의 3.3V 핀에 연결합니다.
터치 없는 경우
| TFT 핀 | Arduino Nano 핀 | 설명 |
|---|---|---|
| VCC | 3.3V 또는 5V | 전원 공급 |
| GND | GND | 그라운드 |
| CS | D10 | 칩 선택 |
| DC / RS | D9 | 데이터/명령 선택 |
| RST | D8 | 리셋(선택 사항) |
| MOSI / SDI | D11 | 하드웨어 SPI MOSI |
| SCK | D13 | 하드웨어 SPI 클록 |
| MISO / SDO | D12 | 하드웨어 SPI MISO(선택 사항) |
| LED / BL | 3.3V | 백라이트 전원 |

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
터치가 있는 경우
| TFT 핀 | Arduino Nano 핀 | 설명 |
|---|---|---|
| VCC | 3.3V 또는 5V | 전원 공급 |
| GND | GND | 그라운드 |
| CS | D10 | 칩 선택 |
| DC / RS | D9 | 데이터/명령 선택 |
| RST | D8 | 리셋(선택 사항) |
| MOSI / SDI | D11 | 하드웨어 SPI MOSI |
| SCK | D13 | 하드웨어 SPI 클록 |
| MISO / SDO | D12 | 하드웨어 SPI MISO(선택 사항) |
| LED / BL | 3.3V | 백라이트 전원 |
터치 컨트롤러:
| 터치 핀 | Arduino Nano 핀 | 설명 |
|---|---|---|
| T_CS | 사용 가능한 GPIO | 터치 칩 선택 |
| T_IRQ | 사용 가능한 GPIO | 터치 인터럽트(선택 사항) |
| T_DIN | D11 | 디스플레이 MOSI(D11)와 공유 |
| T_CLK | D13 | 디스플레이 SCK(D13)와 공유 |
| T_DO | D12 | 디스플레이 MISO(D12)와 공유 |

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
Arduino Nano와 기타 부품에 전원을 공급하는 가장 효과적인 방법은 다음 링크를 참조하세요: 아두이노 나노 전원 공급 방법.
라이브러리 설치 방법
- USB 케이블을 사용하여 Arduino Nano를 컴퓨터에 연결합니다.
- Arduino IDE에서 올바른 보드와 포트가 선택되었는지 확인합니다.
- 왼쪽 사이드바에서 Libraries 아이콘을 클릭합니다.
- 검색창에 "DIYables_TFT_SPI"를 입력하고 DIYables에서 게시한 라이브러리를 찾습니다.
- Install을 클릭하여 라이브러리를 추가합니다. 메시지가 표시되면 Adafruit GFX Library 의존성도 설치합니다.
- Search for DIYables TFT SPI created by DIYables.io and click the Install button.
최소 스케치 구조
※ 주의:
Arduino Nano는 2KB SRAM만 있습니다. 큰 비트맵 배열은 PROGMEM에 저장하고 메모리에 직접 두지 마세요.
도형 그리기
실행 방법
- 배선도에 표시된 대로 TFT 모듈을 Arduino Nano에 연결합니다.
- USB 케이블을 연결합니다.
- Arduino IDE에서 코드를 붙여넣고, 올바른 보드와 포트를 선택하고, Upload를 누릅니다.
텍스트와 숫자 표시
실행 방법
- 위와 같이 배선하고 업로드합니다.
이미지 그리기
실행 방법
- Bitmap.h를 스케치 파일과 동일한 폴더에 넣습니다.
- 배선도에 표시된 대로 TFT 모듈을 Arduino Nano에 연결합니다.
- Arduino IDE에서 코드를 붙여넣고, 보드와 포트를 확인하고, Upload를 누릅니다.
SD 카드 이미지 그리기
실행 방법
- SD 모듈을 Arduino Nano에 연결합니다. SPI 버스(D11/D13/D12)를 디스플레이와 공유합니다.
- SD 카드의 루트에 원시 RGB565 바이너리 이미지 파일을 복사합니다.
- Arduino IDE에서 코드를 붙여넣고, 보드와 포트를 확인하고, Upload를 누릅니다.
외부 폰트 사용
※ 주의:
외부 폰트는 플래시에 저장됩니다. Arduino Nano(32KB 플래시)에서는 한 번에 하나의 폰트만 포함하는 것이 좋습니다.
터치 포인트 가져오기
실행 방법
- XPT2046 컨트롤러를 Arduino Nano에 연결하고 디스플레이와 SPI 버스를 공유합니다.
- USB 케이블을 연결하고 코드를 업로드합니다.
- 시리얼 모니터를 9600 보드레이트로 엽니다.
터치 그리기
터치 버튼
터치 보정
사용자 정의 SPI
문제 해결
- 검은 화면 - CS, DC, MOSI, SCK가 모두 연결되어 있는지 확인합니다.
- 잘못된 드라이버 - 생성자 라인 하나만 활성화되어야 합니다. 나머지는 주석 처리해야 합니다.
- 이동되거나 잘린 이미지 - 생성자의 너비와 높이가 물리적 패널 크기와 일치해야 합니다.
- 터치가 작동하지 않음 - TouchCalibration 예제를 실행하여 특정 패널에 맞는 보정 값을 얻습니다.
- 메모리 부족 - Arduino Nano의 SRAM은 2KB입니다. 큰 배열은 PROGMEM을 사용하세요.
플랫폼 지원
이 라이브러리는 Arduino 표준 API(SPI, digitalWrite, millis)만 사용하며 모든 Arduino 호환 플랫폼에서 실행됩니다.