산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노 나노로 2.8" TFT SPI 디스플레이에 JPEG 사진·RGB565 동영상 재생하기

부품 및 소모품

아두이노 나노 R3 1개
2.8" 320x240 SPI TFT 디스플레이 (터치스크린 내장) 1개
마이크로 SD카드 (1GB 이상, FAT32 포맷) 1개
아두이노 나노용 TFT 쉴드 (브레이크아웃 보드) 1개

프로젝트 개요

아두이노 나노와 2.8" TFT SPI 디스플레이로 JPEG 이미지와 RGB565 포맷 동영상을 재생하는 미니 미디어 플레이어를 만듭니다. 터치스크린으로 재생/일시정지/정지 제어 가능.

하드웨어 구성

아두이노 나노 + TFT 쉴드 + 디스플레이를 결합하고 SD카드를 장착합니다. 이전 글 TFT 쉴드 제작기를 참고하세요.

소프트웨어 준비

SD카드 준비

동영상 변환 명령어 (ffmpeg)

ffmpeg -i input.avi -s 320x240 -pix_fmt rgb565 output.rgb

필수 라이브러리

YATFT 라이브러리 설치 필요 (TFT 쉴드 전용)

메인 코드 (PhotoAndVideoPlay.ino)


#include 
#include 
#include 
#include 

YATFT tft(0);
SDC sdc;
#define CS_PIN A0
XPT2046_Touchscreen ts(CS_PIN);

uint16_t frame = 0;
uint32_t total_time = 0;
bool f_first = true;
uint8_t mode = 0;

void setup() {
  Serial.begin(115200);
  tft.begin(0x4391, -8);
  tft.SetColor(BLACK);
  tft.ClearDevice();
  ts.begin();
  SPI.end();
  
  uint8_t state = sdc.FSInit();
  sdc.currentFileType = DEMO_FILE_TYPE_RGB;
  total_time = millis() + 500;
}

void loop() {
  if (total_time < millis()) {
    total_time = millis() + 2000;
    
    if (f_first) {
      if (-1 != sdc.FindFirst("*.*", ATTR_ARCHIVE, &sdc.nextFile))
        f_first = false;
      else total_time = 0;
    } else {
      // JPEG 이미지 재생
      if (sdc.GetFileType(sdc.nextFile.filename) == DEMO_FILE_TYPE_JPEG) {
        if (sdc.currentFileType != DEMO_FILE_TYPE_JPEG) {
          tft.SetColor(0x007F); tft.ClearDevice(); tft.SetYUV();
          sdc.currentFileType = DEMO_FILE_TYPE_JPEG;
        }
        // JPEG 디코딩 및 표시
        FSFILE *jpeg_file = sdc.FSfopen(sdc.nextFile.filename, "r");
        JPEG_DECODE jpeg_decode;
        jpeg_decode.stream = (void*)jpeg_file;
        sdc.JPEGReadFromSD(&jpeg_decode, 0, 0, GetMaxX()+1, GetMaxY()+1);
        sdc.FSfclose(jpeg_file);
        frame++; frame &= 0xF;
        total_time = millis() + 2000;
      }
      // RGB565 동영상 재생
      else if (sdc.GetFileType(sdc.nextFile.filename) == DEMO_FILE_TYPE_RGB) {
        if (sdc.currentFileType != DEMO_FILE_TYPE_RGB) {
          tft.SetColor(BLACK); tft.ClearDevice(); tft.SetRGB();
          sdc.currentFileType = DEMO_FILE_TYPE_RGB;
        }
        FSFILE *pFile = sdc.FSfopen(sdc.nextFile.filename, "rb");
        tft.SetColor(BLACK); tft.ClearDevice();
        sdc.RGBReadFromSD(pFile, &ScanTouch);  // 터치 콜백으로 제어
        mode = 0;
        tft.SetColor(BLACK); tft.ClearDevice();
        sdc.FSfclose(pFile);
        total_time = millis() + 1000;
      }
      
      if (-1 == sdc.FindNext(&sdc.nextFile))
        f_first = true;
    }
  }
}

// 터치스크린 콜백: 재생/일시정지/정지 버튼 처리
uint8_t ScanTouch(void) { ... }

터치 제어

라이브러리 및 참고 자료

제조공정

  1. 모빌리티로 제조업 혁신: 데이터, 음성, 비디오, 위치 솔루션
  2. 신규 HDMI-APIX3 컨버터, 자동차 비디오 및 ADAS 테스트 강화
  3. 데이터 모듈, 스마트 와이파이 제어 탑재 23.1인치 울트라 슬림 TFT 디스플레이 출시
  4. 라즈베리 파이와 Zabbix로 아날로그 센서 읽기 – 단계별 가이드
  5. RetroPie에 Kuman 3.5″ TFT 디스플레이 설치하기 - 단계별 가이드
  6. K 2019, 최첨단 재활용 기계와 지속가능 포장 혁신 선보여
  7. 플랜지의 DN/PN 표시 이해하기: 종합 가이드
  8. 홀로그래픽 라이트필드 3D 디스플레이: AR 위한 선명하고 왜곡 없는 시야 구현
  9. ILI9341 2.4인치 TFT 터치스크린 실드에서 비트맵 애니메이션 구현하기 (Visuino 활용)
  10. 사출 성형 마감 마스터하기: SPI & VDI 표준 완벽 해설