[HoloEye] 05_IPS LCD GIF 출력

05_IPS_GIF출력

enter image description here

[HoloEye] 05_IPS LCD GIF 출력

1. GIF 준비

지금까지 잘 따라왔다면 사실 지금부터는 별거 없다. 만들었던 이미지를 여러장으로 만들어서 넣어주면 된다.
우선은 LCD에 띄우고 싶은 GIF 파일을 구한다. NodeMCU의 내부 FLASH를 사용하기 때문에 240x240 픽셀 이미지가 4MBit를 넘으면 안된다. 처음에는 4MByte 인줄 알았는데 4MBit 이고 512KB FLASH 이므로 펌웨어 코드까지 생각해서 넣는다면 생각보다 많이 넣을 수 없다. 간단한 테스트 코드만 넣으면 NodeMCU에서는 GIF 240x240 RGB 6프레임이 최대인 것으로 보인다.

https://ezgif.com/

위 사이트에서 GIF 파일을 240x240 으로 Resize 하고 Splitter 탭으로 가서 GIF를 여러장의 PNG 이미지로 분리해준다.
PNG 파일을 이전 포스팅에서 처럼 UTFT를 사용해서 각각 이미지로 변환하고 2차원 배열로 만든다.

2. GIF Convert

UTFT 컨버터를 활용해서 여러장의 이미지를 변환해도 되지만 이렇게 만들어진 파일을 다시 하나로 합치고 작업하는 것이 번거롭게 느껴진다. 그래서 Python으로 하나 만들었다.

만들다 보니 여러 기능들이 계속 필요해서 추가하게 되어 프로젝트로 따로 만들었으니 다음 링크를 참조하기 바란다.
링크 : GIFtoRGB565Converter

3. GIF 출력

GIFtoRGB565 컨버터로 원하는 GIF 이미지를 6프레임만 RGB565 2차원 배열로 만든 후에 heart.h 라는 파일로 추가한 테스트 코드 이다.

#include <SPI.h>
#include <TFT_eSPI.h>  // Hardware-specific library
#include "heart.h"

TFT_eSPI tft = TFT_eSPI();

void setup() {
  // put your setup code here, to run once:
  tft.init();
  tft.setRotation(2);

  tft.setSwapBytes(true);
  tft.fillScreen(TFT_WHITE);
}

void loop() {
  for (uint8_t i = 0; i < frames; i++)
  {
    delay(40);
    tft.pushImage(0, 0, heartWidth, heartHeight, heart[i]);
  }
}

40ms 마다 flash 배열에 있는 코드를 뿌려주는 코드 이다.

4. 결과

IPS에 GIF 출력하는 것은 여기가 마지막인데 이후에는 먼가 재미있는게 생기면 추가 포스팅 해보겠다.

끝 :)

도움이 되셨다면 더 좋은 정보 공유를 위해 광고 클릭 부탁 드립니다 :)

댓글 쓰기

0 댓글