Skip to content

Firmware for using the JC3248W535EN 480×320 ESP32-S3 display with AIDA64 via the OdoSpace (LCD) output mode. Designed specifically for this device — not a universal display firmware

License

Notifications You must be signed in to change notification settings

AyQWERTY/esp32-odospace

Repository files navigation

ESP32-ODOSPACE

Firmware for using the JC3248W535EN 480×320 display (ESP32-S3 based board) together with AIDA64 using the OdoSpace (LCD) output mode. The goal of this project is not to be universal — it is tailored to this specific device and to the way AIDA64 sends frames.


What this project does

  • Connects ESP32-S3 to your Wi-Fi network.
  • Opens a TCP server on port 38000 — the same port used by AIDA64 for OdoSpace LCD output.
  • Receives PNG frames from AIDA64 and renders them to the 480×320 LCD on JC3248W535EN.
  • Turns the screen on only when frames are coming.
  • Turns the screen off after 5 seconds of no incoming frames.
  • Reconnects to Wi-Fi automatically if the network disappears.

This repository was built specifically for JC3248W535EN. For other panels you will have to adjust at least the pins and the init sequence.


Target hardware

  • Board: ESP32-S3 (the boards that ship with this display should all be ESP32-S3-based, so no extra notes here)
  • Display: JC3248W535EN
  • Resolution: 480 × 320
  • Panel driver: bundled custom driver for this panel/controller
  • Backlight: controlled from firmware

All pin assignments and display parameters are in:

// components/project_config/user_settings.h
#pragma once
#include "sdkconfig.h"

// Display geometry
#define DISPLAY_W 320
#define DISPLAY_H 480

// 0 - Off /1 - On
#define PANEL_MIRROR 0

// 0 = LE; 1 = BE
#define RGB565_ENDIAN_BE 1

// Auto-off timeout (ms) since last frame
#define AUTO_OFF_MS 5000

// Increase if the image is not fully rendered [1 - DISPLAY_H (e.g. 480px)]
#define LINES_PER_CALL 32
// Should be > DISPLAY_H/LINES_PER_CALL
#define QUEUE_DEPTH 20

#define TCP_PORT 38000

#define WIFI_SSID CONFIG_WIFI_SSID
#define WIFI_PSK  CONFIG_WIFI_PSK

So the firmware expects 480×320 (or 320×480) frames.


AIDA64 setup

  1. Open AIDA64 → Preferences → LCD.
  2. Choose OdoSpace (LCD) as the display type.
  3. Set the IP address of your ESP32-S3.
  4. Keep the port = 38000 (this project listens on that port).
  5. Enable the LCD output — AIDA64 will start pushing PNGs, ESP32 will wake up and show them.

No custom protocol tweaks are needed — the project uses the standard OdoSpace LCD behavior from AIDA64.


Wi-Fi configuration

There are two supported ways.

1. Through menuconfig (preferred)

If you build with ESP-IDF or PlatformIO (ESP-IDF mode):

idf.py menuconfig

then go to the project section and set:

  • CONFIG_WIFI_SSID
  • CONFIG_WIFI_PSK

The code later uses:

#define WIFI_SSID CONFIG_WIFI_SSID
#define WIFI_PSK  CONFIG_WIFI_PSK

so it picks up whatever you set in sdkconfig.

2. Through ready sdkconfig file

In the repo there is a sample config:

sdkconfig.esp32-s3-devkitc-1.example

Rename it to:

sdkconfig.esp32-s3-devkitc-1

(or just sdkconfig, depending on your build flow)

and edit Wi-Fi credentials inside. All other settings in that file are already tuned for this device.

The firmware contains logic to retry Wi-Fi connection endlessly, so if the router reboots or SSID becomes available again — ESP32 should come back online.


Build & flash

ESP-IDF

idf.py set-target esp32s3
idf.py build
idf.py flash
idf.py monitor

Make sure you renamed the example sdkconfig or set Wi-Fi via menuconfig before flashing.

PlatformIO

pio run -t menuconfig      # set Wi-Fi
pio run
pio run -t upload
pio device monitor

Runtime behavior

  • On power-up the screen may stay dark — this is expected.
  • The screen turns on when the first valid frame is received.
  • If no frames are received for 5 seconds (AUTO_OFF_MS 5000), the screen is turned off (backlight off / sleep).
  • TCP server continues to run and will wake the display again when AIDA64 sends the next frame.

This matches the intended usage: the display is only “alive” when the PC is actually sending data.


Project structure

components/
  backlight/          - backlight GPIO control
  display/            - high-level display API (init, draw, sleep)
  esp_lcd_axs15231b/  - panel driver for this display
  img_decode/         - PNG decoding + RGB565 conversion + buffering
  net_wifi/           - Wi-Fi STA with auto-reconnect
  panel_init_axs15231b/ - init sequence for this exact panel
  project_config/     - pins and user_settings.h
  tcp_png/            - TCP server on port 38000, PNG framing
src/
  main.c              - startup, component init, task creation

Everything here is wired specifically for JC3248W535EN and for AIDA64’s way of sending images.


About

Firmware for using the JC3248W535EN 480×320 ESP32-S3 display with AIDA64 via the OdoSpace (LCD) output mode. Designed specifically for this device — not a universal display firmware

Topics

Resources

License

Stars

Watchers

Forks