Using cheap AliExpress TFT Displays
Posted: Sat Feb 22, 2025 7:33 pm
I've been experimenting with "cheap" displays from AliExpress, with the intent of running user interface / display off of them in my Beetle project.
The display I have started with is the Guition JC3248W535 display. This is the cheapest display at <$20. It is defined as a 320 x 480 pixel 3.5" TFT display with capacitive touch:
This display looks promising because it has:
ESP32 S3 chip, dual core (of which I am only using one core for Arduino) Actually no longer true, I am now multithreading to improve the graphics and touch performance.
Lots of memory (SPIFFS and PSRAM)
Wifi 2.4ghz
BTLE
USB-C and serial comms
SD card
Speaker output
10 exposed general purpose input output (GPIO) pins, split into 3 japan solderless terminal (JST) headers (in 1.00mm and 1.25mm)
Can be powered by serial 3.3-5v, USB-C, or battery
At first it seemed like there was not a lot of support for the display, but with some tinkering with libraries and my own code, I have pretty much everything I need. Here is the display I have programmed:
On boot: After giving it Serial commands that mimic CANBus: I modeled the display off of my ID.4 center display. I am using the Adafruit_GFX library for graphics and the bb_captouch library for touch, and these things work.
I am also going to tinker with these other displays:
Guition JC8048W550, which is a larger 480 x 800 pixel 5" display with all the same specs but fewer GPIO pins,
ViewE DX48480040E, which is a 480 x 480 4" display (2.9 x 2.9") with just every single GPIO pin exposed.
Basically my goal is to put the display(s) on the CAN bus and analog circuits as my cockpit.
These displays can handle CAN, but need an external transceiver, of which I will be using the TJA1050 interface board. I will be reading kw/regen and rpm from the OpenInverter, and SoC from the Thunderstruck MCU. I also intend to add a GPS module with the NEO6MV2, get external temperature with a AHT20+BMP280 IC (which also does humidity but I don't need that), and use, at the least, the position of the DNR switch (either analog or from the CAN if OpenInverter sends these messages?) for the display.
The reason I am using GPS is that I want to get GPS speed, and not for the instantaneous speed, for which I will be using RPM, but as a long-term correction factor to make sure the RPM-speed conversion is accurate. I also show a "miles remaining" indication, which I will have to figure out how to estimate. I know my ID.4 estimates this based on SoC, driving history, and temperature. I should probably also put some kind of odometer on this, which needs to be saved for potentially years? Perhaps I can store the corrections and long-term data on the SD card? I haven't figured out how to use that yet.
And I also need to connect to the web interface to set up the inverter of course. Maybe these displays can do that as well. I haven't tried, and I know the GPIO pins will be different than on johu's code.
The display I have started with is the Guition JC3248W535 display. This is the cheapest display at <$20. It is defined as a 320 x 480 pixel 3.5" TFT display with capacitive touch:
This display looks promising because it has:
ESP32 S3 chip, dual core (of which I am only using one core for Arduino) Actually no longer true, I am now multithreading to improve the graphics and touch performance.
Lots of memory (SPIFFS and PSRAM)
Wifi 2.4ghz
BTLE
USB-C and serial comms
SD card
Speaker output
10 exposed general purpose input output (GPIO) pins, split into 3 japan solderless terminal (JST) headers (in 1.00mm and 1.25mm)
Can be powered by serial 3.3-5v, USB-C, or battery
At first it seemed like there was not a lot of support for the display, but with some tinkering with libraries and my own code, I have pretty much everything I need. Here is the display I have programmed:
On boot: After giving it Serial commands that mimic CANBus: I modeled the display off of my ID.4 center display. I am using the Adafruit_GFX library for graphics and the bb_captouch library for touch, and these things work.
I am also going to tinker with these other displays:
Guition JC8048W550, which is a larger 480 x 800 pixel 5" display with all the same specs but fewer GPIO pins,
ViewE DX48480040E, which is a 480 x 480 4" display (2.9 x 2.9") with just every single GPIO pin exposed.
Basically my goal is to put the display(s) on the CAN bus and analog circuits as my cockpit.
These displays can handle CAN, but need an external transceiver, of which I will be using the TJA1050 interface board. I will be reading kw/regen and rpm from the OpenInverter, and SoC from the Thunderstruck MCU. I also intend to add a GPS module with the NEO6MV2, get external temperature with a AHT20+BMP280 IC (which also does humidity but I don't need that), and use, at the least, the position of the DNR switch (either analog or from the CAN if OpenInverter sends these messages?) for the display.
The reason I am using GPS is that I want to get GPS speed, and not for the instantaneous speed, for which I will be using RPM, but as a long-term correction factor to make sure the RPM-speed conversion is accurate. I also show a "miles remaining" indication, which I will have to figure out how to estimate. I know my ID.4 estimates this based on SoC, driving history, and temperature. I should probably also put some kind of odometer on this, which needs to be saved for potentially years? Perhaps I can store the corrections and long-term data on the SD card? I haven't figured out how to use that yet.
And I also need to connect to the web interface to set up the inverter of course. Maybe these displays can do that as well. I haven't tried, and I know the GPIO pins will be different than on johu's code.