TFT SPI 디스플레이의 사진 및 RGB 비디오
구성품 및 소모품
| | × | 1 | |
| 2,8" 320x240 SPI TFT 디스플레이 | | × | 1 | |
| | × | 1 | |
| Arduino Nano용 TFT 실드(브레이크아웃) | | × | 1 | |
섹션>
이 프로젝트 정보
소개
안녕하세요!
오늘 기사에서는 TFT SPI 디스플레이(320x240, 2.8") 화면에서 사진이나 사진(*.jpg 형식), 동영상(RGB565 형식)을 볼 수 있는 방법에 대해 이야기하고자 합니다.
먼저 간단한 데모 동영상:
하드웨어
필요한 구성 요소:
<울> 아두이노 나노 R3,
<울> 터치스크린이 있는 SPI TFT 디스플레이(320x240),
<울> usD 카드>1GB,
<울> Arduino Nano용 TFT 실드.
비디오에 표시된 순서대로 모든 부품을 배치합니다(또는 이전 기사를 읽을 수 있습니다:https://create.arduino.cc/projecthub/alf81010/tft-shield-for-arduino-nano-start-f4391e .피>
소프트웨어
준비 마이크로 SD 카드.
마이크로 SD 카드는 FAT32로 포맷해야 합니다. 이미지를 카드에 직접 기록할 수 있습니다(처리 없이). 이미지의 크기는 2560x1920 이하인 것이 바람직합니다.
rgb565 형식의 동영상을 재생하려면 미리 파일을 준비해야 합니다. 비디오를 변환하려면 ffmpeg(http://ffmpeg.org)를 사용하십시오. 컴퓨터에 다운로드하여 설치합니다. 그런 다음 이 데모와 호환되는 비디오를 표시하는 예제 명령줄 ffmpeg를 사용합니다.
ffmpeg -i video.avi -s 320x240 -pix_fmt rgb565 비디오.rgb
Arduino Nano용 TFT 실드와 함께 작동하는 데 필요한 라이브러리를 다운로드하여 설치하십시오:https://github.com/YATFT/YATFT.
Arduino Nano에서 다음 스케치를 다운로드하십시오.
<사전><코드>/************************************************ ************************************ 소프트웨어와 문서는 어떠한 보증도 없이 "있는 그대로" 제공됩니다* 명시적이든 묵시적이든 상품성, 소유권, 비침해 및 특정* 목적에의 적합성에 대한 보증*을 포함하되 이에 국한되지 않습니다. 어떤 경우에도 저자 또는 그의 라이선스 제공자는 계약, 태만, 엄격한 책임, 공헌*, 보증 위반 또는 기타 법적 형평성 이론에 따라 직접적 또는 간접적* 손해에 대해 책임을 지지 않거나 의무를 지지 않습니다. ,* 간접, 징벌적 또는 결과적 손해, 이익 손실 또는 데이터 손실,* 대체 상품, 기술, 서비스 또는 제3자의 모든* 클레임 조달 비용(한도로 제한되지 않음)* .**************************************************** ******************************/#include // 하드웨어별 라이브러리#include #include #include YATFT tft(0);SDC sdc;#define CS_PIN A0// MOSI=11, MISO=12, SCK=13XPT2046_Touchscreen ts(CS_PIN);/* 실드를 사용하는 경우 모든 제어 및 데이터 라인이 고정되며 더 간단한 선언을 선택적으로 사용할 수 있습니다.*/uint16_t frame =0;uint32_t total_time =0;bool f_first =true;uint8_ t 모드 =0;/************************************************ ************************************************** ***/void setup(void){ Serial.begin(115200); // 직렬 포트 초기화 Serial.println(F("Photo And Video Play example!")); tft.begin(0x4391,-8); // 디스플레이 초기화 tft.SetColor(BLACK); tft.ClearDevice(); // 화면 지우기 ts.begin(); // 터치스크린 초기화 SPI.end(); Serial.print(F("FS 초기화... ")); uint8_t 상태 =sdc.FSInit(); if (상태 ==0) Serial.println(F("실패.")); else Serial.println(F("성공")); sdc.currentFileType =DEMO_FILE_TYPE_RGB; total_time =millis() + 500;}void 루프(void){ if (total_time 100 &&y<140) { // 정지 모드 =1; Serial.println(F("모드 =1")); } else if (x>140 &&x<180 &&y>100 &&y<140) { // 일시 정지 모드 =2; // 버튼 그리기 tft.SetColor(BRIGHTRED); tft.DrawFillCirc(GetMaxX()/4,GetMaxY()/2,50); tft.SetColor(밝은 노란색); tft.DrawFillRect(GetMaxX()/4-30,GetMaxY()/2-30, GetMaxX()/4+30,GetMaxY()/2+30); tft.SetColor(밝은 빨간색); tft.DrawFillCirc(GetMaxX()/4*3,GetMaxY()/2,50); tft.SetColor(밝은 노란색); for(uint8_t i=0; i<60; i++) { tft.DrawLine(210+i, 90+i/2, 210+i, 150-i/2); } Serial.println(F("모드 =2")); } else if (x>190 &&y>100 &&y<140) { // 재생 모드 =0; Serial.println(F("모드 =0")); } 반환 모드; } SPI.end(); 반환 모드;}
나는 짧은 기사를 만들고 그 내용의 요점을 설명하려고 노력했습니다. 또한이 프로젝트에는 어려운 것이 없습니다. 그러나 질문이 있으면 주저하지 말고 질문하십시오.;-) 글을 추가해보도록 하겠습니다.
관심을 가져주셔서 감사합니다!
계속됩니다.
이전 기사:
1) Arduino Uno용 고유 TFT 쉴드 - 시작,
2) Arduino Uno를 위한 고유한 TFT Shield - OV7670 Cam Live View,
3) Arduino Uno용 고유 TFT 실드 - Arduino Bluetooth 카메라(ABC),
4) 아두이노 나노용 TFT 쉴드 - 시작.
2021년 4월 1일 업데이트:
다시 안녕! 현재 두 개의 실드와 두 개의 브레이크아웃 보드로 구성된 일련의 화면에 대한 업데이트된 라이브러리가 있습니다. 스케치는 선택한 버전(1~4)과 마이크로 컨트롤러 유형(MegaAVR 또는 ESP-32)에 따라 컴파일됩니다. 사진, 예를 추가했습니다. 자세한 내용은 https://github.com/Ekaburg/EkaTFT에서 확인할 수 있습니다.
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드"> 코드
<울> PhotoAndVideoPlay.ino
PhotoAndVideoPlay.inoC/C++
<사전>/************************************************ ******************************** * 소프트웨어와 문서는 어떤 종류의 보증도 없이 "있는 그대로" 제공됩니다. 상품성, 소유권, 비침해성 및 특정 목적에의 적합성에 대한 모든 보증을 포함하되 이에 국한되지 않는 명시적 또는 묵시적 *. 어떤 경우에도 저자 또는 그의 라이선스 제공자는 계약, 과실, 엄격한 책임, 공헌, * 보증 위반 또는 기타 법적 평등 이론에 의거하여 직접적 또는 간접적인 손해에 대해 책임을 지지 않거나 * 의무를 지지 않습니다. , * 간접, 징벌적 또는 결과적 손해, 이익 손실 또는 데이터 손실, * 대체 제품, 기술, 서비스 또는 기타 * 제3자의 클레임 조달 비용(한도로 제한되지 않음) .**************************************************** ******************************/#include // 하드웨어별 라이브러리#include #include #include YATFT tft(0);SDC sdc;#define CS_PIN A0// MOSI=11, MISO=12, SCK=13XPT2046_Touchscreen ts(CS_PIN);/* 실드를 사용하는 경우 모든 제어 및 데이터 라인이 고정되고 더 간단한 선언을 선택적으로 사용할 수 있습니다.*/uint16_t frame =0;uint32_t total_time =0;bool f_first =true;uint8_t 모드 =0;/************************************************ ************************************************** ****/void setup(void){ Serial.begin(115200); // 직렬 포트 초기화 Serial.println(F("Photo And Video Play example!")); tft.begin(0x4391,-8); // 디스플레이 초기화 tft.SetColor(BLACK); tft.ClearDevice(); // 화면 지우기 ts.begin(); // 터치스크린 초기화 SPI.end(); Serial.print(F("FS 초기화... ")); uint8_t 상태 =sdc.FSInit(); if (상태 ==0) Serial.println(F("실패.")); else Serial.println(F("성공")); sdc.currentFileType =DEMO_FILE_TYPE_RGB; total_time =millis() + 500;}void 루프(void){ if (total_time 100 &&y<140) { // 정지 모드 =1; Serial.println(F("모드 =1")); } else if (x>140 &&x<180 &&y>100 &&y<140) { // 일시 정지 모드 =2; // 버튼 그리기 tft.SetColor(BRIGHTRED); tft.DrawFillCirc(GetMaxX()/4,GetMaxY()/2,50); tft.SetColor(밝은 노란색); tft.DrawFillRect(GetMaxX()/4-30,GetMaxY()/2-30, GetMaxX()/4+30,GetMaxY()/2+30); tft.SetColor(밝은 빨간색); tft.DrawFillCirc(GetMaxX()/4*3,GetMaxY()/2,50); tft.SetColor(밝은 노란색); for(uint8_t i=0; i<60; i++) { tft.DrawLine(210+i, 90+i/2, 210+i, 150-i/2); } Serial.println(F("모드 =2")); } else if (x>190 &&y>100 &&y<140) { // 재생 모드 =0; Serial.println(F("모드 =0")); } 반환 모드; } SPI.end(); 반환 모드;} 섹션> 회로도
Arduino Nano용 라이브러리 TFT 실드
https://github.com/YATFT/YATFT