TFT ili9341 collor error

Hello guys
I am using esp32 camera and TFT ili9341 display. The code captures an image with the camera and it shows the image to the display. Unfortunately after some minutes the colors of the image are distorted like the picture. When I am trying to reset, the colors remain distorted

Display's VCC and Ground pin are connected to 5V power supply and the LED pin is connected to 3.3V power supply.

Any suggestions?

How are we supposed to know what the picture is supposed to look like?

Where is your code?
Where is your schematic?

I was remembering this similar (??) situation --
ESP32 ILI9341 TFT_eSPI white screen - Using Arduino / Displays - Arduino Forum

What 3.3V supply?

(I have a Teensy 4, ILI9341 display and MLX90640 thermal camera, with 1A 3.3V buck converter power supply running for days on end, without problem)

Thank you for your reply
Here is the schematic
In order not to have too much information in one picture, I divided it into 2 parts. All the cables are connected to esp32 at the same time. The external supply is Elegoo Power MB V2
Part1


Part2

Here is the display at the begging
image

and this is after almost 30s


and here is the code I used

#include "esp_camera.h"
#include <SPI.h>
#include <TFT_eSPI.h>
#include <TJpg_Decoder.h>

#define PWDN_GPIO_NUM     32
#define RESET_GPIO_NUM    -1
#define XCLK_GPIO_NUM      0
#define SIOD_GPIO_NUM     26
#define SIOC_GPIO_NUM     27
#define Y9_GPIO_NUM       35
#define Y8_GPIO_NUM       34
#define Y7_GPIO_NUM       39
#define Y6_GPIO_NUM       36
#define Y5_GPIO_NUM       21
#define Y4_GPIO_NUM       19
#define Y3_GPIO_NUM       18
#define Y2_GPIO_NUM        5
#define VSYNC_GPIO_NUM    25
#define HREF_GPIO_NUM     23
#define PCLK_GPIO_NUM     22

TFT_eSPI tft = TFT_eSPI();




void setup() {
  Serial.begin(115200);
  Serial.setDebugOutput(true);
  Serial.println();
  displayInit();
  cameraInit(); 

}

void loop() {
  showingImage();
}

void cameraInit(){
  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 10000000;
  config.pixel_format = PIXFORMAT_JPEG;
  config.frame_size = FRAMESIZE_VGA; 
  config.jpeg_quality = 10;
  config.fb_count = 2;

  esp_err_t err = esp_camera_init(&config);
   Serial.print("Camera init Succesfully");
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    return;
  }


  
}

void showingImage(){
  camera_fb_t* fb = esp_camera_fb_get();
  if(!fb || fb->format != PIXFORMAT_JPEG){
    Serial.println("Camera Capture Failed!");
  }else{
    Serial.println("Camera Image to Display Here!");
    TJpgDec.drawJpg(0, 0, (const uint8_t*)fb->buf, fb->len);    
  }
  esp_camera_fb_return(fb);
}
bool tft_output(int16_t x, int16_t y, uint16_t w, uint16_t h, uint16_t* bitmap){
  //Serial.println("bool workss!!!");
  if( y>= tft.height()) return 0;
  tft.pushImage(x, y, w, h, bitmap);  
  return 1;
}
void displayInit(){
  tft.begin();
  tft.setRotation(1);
  tft.fillScreen(TFT_RED);
  Serial.println("Display Initialized sucessfully");

  TJpgDec.setJpgScale(1); 
  TJpgDec.setSwapBytes(true);
  TJpgDec.setCallback(tft_output);
}

Here is the User_Setup code from TFT_eSPI library

#define USER_SETUP_INFO "User_Setup"

#define ILI9341_DRIVER       // Generic driver for common displays

// For ESP32 Dev board (only tested with ILI9341 display)
// The hardware SPI can be mapped to any pins

#define TFT_MISO 12
#define TFT_MOSI 13
#define TFT_SCLK 14
#define TFT_CS    2  // Chip select control pin
#define TFT_DC   15  // Data Command control pin
#define TFT_RST  16  // Reset pin (could connect to RST pin)
//#define TFT_RST  -1  // Set TFT_RST to -1 if display RESET is connected to ESP32 board RST

// Comment out the #defines below with // to stop that font being loaded
// The ESP8366 and ESP32 have plenty of memory so commenting out fonts is not
// normally necessary. If all fonts are loaded the extra FLASH space required is
// about 17Kbytes. To save FLASH space only enable the fonts you need!

#define LOAD_GLCD   // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2  // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4  // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6  // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7  // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.
#define LOAD_FONT8  // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
//#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT
#define LOAD_GFXFF  // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts

// Comment out the #define below to stop the SPIFFS filing system and smooth font code being loaded
// this will save ~20kbytes of FLASH
#define SMOOTH_FONT

#define SPI_FREQUENCY  40000000
// Optional reduced SPI frequency for reading TFT
#define SPI_READ_FREQUENCY  20000000

// The XPT2046 requires a lower SPI clock rate of 2.5MHz so we define that here:
#define SPI_TOUCH_FREQUENCY  2500000

Here is the Libraries I used for
TJpg_Decoder v1.0.3
TFT_eSPi v2.4.61

So it looks like your trouble is like that of the fellow in the link.
It probably is not an ILI9341, but an ST7789, judging by the pic in the diagram (Post#5).
But I could be dead wrong.

Thank you for your suggestion I will give it a try

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.