어려웠던 모듈이다. 이론에 대해 잘 모르고 하면서 알아가는 중이라 어떤 부분이 잘못 됐는지를 몰라 많이 헤맸다. 그래도 결국 해내어 성취감 최고다.
맥북으로도 매우 잘 된다.
디스플레이와 연결을 쉽게 도와주는 쉴드, 아두이노 메가 이렇게 한 세트를 몇년 전 알리에서 구매하고 방치했다가 이번 프로젝트에 사용하게 되었다.
디스플레이 품번 : TFT_320QDT_9341
디스플레이 크기 : 240x320 pixel 3.2"
shield 품번 : TFT LCD Mega Shield v2.2
아두이노 : Mega 2560

오랫동안 보관만하고 해보질 않아서 LCD와 쉴드를 우노에 꽂고 왜 안되지? 이러고 있었다. 구매할 때 메가 보드와 세트로 사놓고 생각을 못 했다.

누가봐도 수많은 핀이 꽂히지 않고 놀고 있는데 이상하게 생각을 못 했다. 계속해서 안되니까 고민하던 찰나에 쉴드를 보니 떡하기 Mega Shield라고 적혀 있었음. 그제서 아!! 하고 깨달음.

우노에 꽂은 것과 비교하니 안정적이라 마음이 편안.
아두이노를 노트북과 연결 시켰을 때 전원은 잘 켜졌다. 그러나 Chat GPT를 통해 받은 코드, 예제 코드 등 무엇도 실행되지 않는다. 계속해서 흰 배경만 뜬다. 며칠을 고민하고 해결하려 했다. 12월 1일 학원 마치기 2분 전 드디어 해냈다. 며칠간 고민하고 하루종일 고민한 문제를 풀었다. 남들은 몰라주겠지만 내가 알면 된다.

전원 문제 :
USB를 통해 전원을 공급했다. 서칭해보니 전원이 약하면 실행이 안 된다는 말이 있어 아두이노에 코드를 업로드 후 전원 단자에 직접 전원을 연결해봤지만 똑같다. 전원부를 다시 봐도 잘 연결되어 있다.
핀 및 포트 확인:
쉴드를 사용하므로 하드웨어상 잘못 연결된 것은 없다.
시리얼 모니터 출력 확인:
실행은 정상적으로 됐고 에러가 뜨진 않았다.
라이브러리 및 코드 업데이트:
라이브러리와 코드를 최대한 최신으로 맞춰뒀지만 효과 없음.
하드웨어 문제 : 하드웨어는 테스트했을 때 잘 작동 됨.
코드 문제 : 여러 코드를 바꿔 테스트 했지만 똑같이 흰 배경이다.
사용 중인 터치스크린에 대한 라이브러리 및 드라이버가 정확한지 확인하세요.
터치스크린 모델에 맞는 라이브러리와 드라이버를 설치해야 합니다.
Chat GPT가 말해준 사항을 하나씩 풀어가던 중 드라이버를 확인하란 말이 있었다. 구글링을 했을 때도 드라이버를 확인하라는 글을 읽었어서 확인 해보기로 했다.
아래 블로그 글을 읽고 TFT LCD를 라즈베리파이에 바로 연결 후 설정했다.
라즈베리파이 TFT LCD 디스플레이 연결 방법 - 3.5인치 RPi LCD (라즈베리파이 TFT 디스플레이 연결)
$ sudo git clone https://github.com/goodtft/LCD-show.git
$ cd LCD-show
$ sudo ./LCD35-show
알려준 명령어를 똑같이 실행했다. 라즈베리파이가 자동으로 리부트되더니 키트에 붙어있던 피에조 부저가 계속해서 삐삐삐삐삐삐 거렸다. 다시 $ sudo ./LCD5-show 명령어를 입력해서 LCD 번호?를 변경했다. 3.5인치인 경우 LCD35를 사용하면 된다했으나 에러가 발생했다. LCD5로 변경 후 모니터에 뜨는 라즈베리파이 화면이 작아졌다. 크기를 키웠으나 계속해서 삐삐 거려 일단 5로 뒀다.
다시 구글링을 했다. How to fix TFT white screen problem | MIRROR image 7474 | 0x4747 tft lcd 8347 driver MCUFRIEND 유튜브 영상인데 해당 영상에서 White Screen에 대해 다뤘다. 똑같이 따라 했고 아두이노에서 처음 aspect_kbv 파일을 업로드 후 시리얼 모니터에 뜨는 번호를 확인 했다. 영상과 달리 ID = 0x404라고 떴다. 영상과 다르지만 따라해보려 했으나 ID에 뜨는 번호와 관련된 내용이라 진행이 불가했음.
https://github.com/prenticedavid/MCUFRIEND_kbv/issues/58
tft.begin(0x9320) 부분에 9320 부분이 다른 번호 일 수 있단 답변이 있어 다른 코드가 적혀있는 것을 참고하여 다양한 번호를 입력해봤지만 해결되지 않음.
참고.
위 사이트들을 읽었지만 UTFT 라이브러리를 설치하라고해서 UTFT에 대해 검색했다.
참고.
아두이노에 대해 교육용 자료를 무료로 올려주는 곳이다. 내가 가진 모듈과 똑같은 것을 사용하여 내용을 따라했다. 포스터 중간에 아래 내용과 같이 감사의 말과 함께 UTFT 라이브러리에 대한 내용이 나와 있다.
Henning Karlsen이 만든 UTFT 및 URTouch 라이브러리를 사용하겠습니다.
여기에서 나는 그가 이룬 놀라운 일에 대해 그에게 감사의 말을 전하고 싶습니다.
라이브러리를 사용하면 TFT 화면을 정말 쉽게 사용할 수 있으며 다양한 TFT 화면 크기,
쉴드 및 컨트롤러와 함께 작동합니다.
그의 웹사이트인 RinkyDinkElectronics.com에서 이러한 라이브러리를 다운로드할 수 있으며,
사용 방법에 대한 많은 데모 예제와 자세한 문서도 찾을 수 있습니다.
RinkyDinkElectronics | UTFT 라이브러리 다운
해당 사이트에서 Library > Arduino > UTFT 라이브러리를 다운 받고 아두이노에서 라이브러리를 추가 했다.

Add. ZIP Library로 추가하면 압축해제 없이 추가할 수 있어 편리하다.
해당 라이브러리를 다운 받으면 예제 코드가 생겼고 실행 시켰을 때 URTouch 라이브러리도 필요하여 이것도 위 사이트에서 다운 받고 추가했다.
하루종일 눈이 빠지게 찾았는데 문제가 해결되지 않아 힘들었다. 해결하고 싶었다. 포기하지 않고 아까 보았던 내용들을 Chat GPT에도 물어보고 다시 검색도 해봤다. 여전히 나오지 않았다.
4번에서 봤던 사이트를 다시 들어 갔고 다시 읽어보니
UTFT 예제 파일 중 UTFT myGLCD(ITDB32S, 38, 39, 40, 31); 코드를 UTFT myGLCD(ILI9341_16,38,39,40,41); 코드로 바꾸세요.라는 문장을 봤다. ILI9341_16이 중요한 포인트였다. 내가 사용하는 TFT LCD와 쉴드는 ILI9341_16 라이브러리를 사용해야 했던 것. 아두이노 예제에 해당 라이브러리 이름이 적힌 예제가 있었지만 실행이 되지 않았다. 차이점을 살펴봐야 겠다.
참고
UTFT myGLCD(ILI9341_S5P, 51, 52, 10, 9, 8); // UTFT myGLCD(모델, SDI, SCK, CS, RST, DC);
URTouch myTouch(6, 5, 4, 3, 2); // T_CLK, T_CS, T_DIN, T_DO, T_IRQ
계속해서 여러 테스트 코드를 거쳤고 겨우 찾은 해결법을 사용해서 처음으로 켜진 디스플레이 화면. 혼자 소리 지름.

집에서 똑같이 코드를 쳐서 해봤는데 갑자기 터치가 안되는 문제가 발생 함.
혹시나 싶어 포트 3개 중 2번째에 꽂으니 터치가 된다. 왜 그런거지???
한 번은 포트 여러 곳을 바꿔도 안되길래 전원을 바꿨더니 된다. 허브가 전원이 약해서 그런가 싶다.

위 GIF와 같이 터치를 하면 좌우상하가 반전되어 나온다. 이에 대한 해결책은 라이브러리 사이트에 적혀있었다.
라이브러리: URTouch
방법 참고사이트를 토대로 진행했다.
경로
- 맥북 기준 : File > Examples > URTouch > Arduino > URTouch_Calibration

URTouch_Calibration 코드를 아두이노에 업로드 후 디스플레이에서 설정을 진행하면 된다. 그럼 마지막에 좌표가 나온다.
CAL_X, Y, S

- 맥북기준 경로
/Users/컴퓨터이름/Documents/Arduino/libraries/URTouch/URTouchCD.h- 라즈베리 경로
/home/pi/Arduino/libraries/URTouch/URTouchCD.h
해당 파일은 C언어로 되어있고 VSCode로 열었다.(라즈베리에서는 그냥 더블 클릭)
아래 사진을 보면 CAL_X 옆에 글자가 있고 해당 글자는 디스플레이 설정 후 얻은 값으로 변경 후 저장한다.
#define CAL_X 0x03D200B8UL
#define CAL_Y 0x03D8C167UL
#define CAL_S 0x000EF13FUL


반전이던 터치가 정상적으로 돌아온 것을 확인할 수 있다.