Martin's corner on the web

Experimenting with a 3.5″ TFT

I decided to test a 3.5″ TFT version of the TFT32 project as the original version’s 2.4″ 320×240 TFT is a bit small-ish. The TFT I chose is an ILI9488 480×320 3.5″ with resistive touch.

The upgrade was pretty straightforward, because of the hardware abstraction layer in the code I practically only had to adapt the TFT drivers for the ILI9488 specifics. I use the ILI9488 in 4 wire SPI mode, this only allows for RGB666 i.e. 18bpp. That’s three bytes per pixel, so memory usage is up compared to the previously used RGB565 16bpp or two bytes per pixel. Since the GUI library uses double video buffering, the increased resolution and bpp requirements mean more memory is used. To mitigate this, I chose to use an ESP32 WROVER SoC that includes external RAM available.

In addition, I modified the RFM69 footprint, so that I can alternatively use LoRa modules like the RFM95.

It is alive 🙂

I managed to get the ILI9488 to work well clocked at 40MHz with DMA. It is reasonably fast, see it in action here:

3.5″ ILI9488 TFT

Bigger is better they say. Or is it? This TFT costs twice the 2.4″ version, requires significantly more memory to run.

Tagged on: , ,

11 thoughts on “Experimenting with a 3.5″ TFT

  1. Adrian

    Hi, I am working on a very similar application with an ILI9488 3.5″ touch screen and ESP WROVER. Is this code available for contribution? I have it working with LittleVGL but with bars across the screen.

  2. Jose Miguel Castillejo

    Hello Martin

    I want to congratulate you for your work, I am very interested in the project and I would like to know if there is a possibility of obtaining the source code, making the payment you consider appropriate

    1. Martin Post author

      this project is part of a larger IoT framework with commercial targets; Please contact me via email for corporate pricing: martin at harizanov dot com.

  3. Huy

    Dear Martin

    I’m using littlevgl framwork with ST7789V driver chip.
    My screen using RGB666 color, but littlevGL only support 16 bit and 32 bit color.

    I’m look at your github repository here

    I see you are using littlevGL framework.

    I want to ask you one question, how can you convert RGB666 to RGB565, or how can you convert RGB565 to RGB666?

    Thank you so much, i’m so sorry about my english.

    1. Martin Post author

      use LV_COLOR_DEPTH = 32 and rearrange the frame buffer in tft_flush:

      typedef struct {
      uint8_t red;
      uint8_t green;
      uint8_t blue;
      } lv_color_custom_t;

      lv_color32_t* tmp32 = (lv_color32_t*) color_map;
      lv_color_custom_t* tmp24 = (lv_color_custom_t*) color_map;
      for(x=0; x < size; x++) {
      tmp24[x].red = tmp32[x].red;
      tmp24[x].green = tmp32[x].green;
      tmp24[x].blue = tmp32[x].blue;}

  4. Rangel


    What ffc/fpc 40 pin connector do you use ?
    40 pin 0,5mm i belive, but top or bottom contact ?

    Could you pass me the component code ?