A modular, bleeding-edge digital dashboard system for race cars.
Built on ESP-IDF v6.1 + LVGL 9 + ESP-NOW for three ESP32-S3 display units.
Licensed under Sovereign Individual License v1.0 β see LICENSE file
| Display Unit | Hardware | Resolution | Directory |
|---|---|---|---|
| Center (Main Dash) | ESP32-S3-Touch-LCD-4.3 | 800Γ480 IPS | center/ |
| Left Gauge | ESP32-S3-LCD-2.8C | 480Γ480 Round | left/ |
| Right Gauge | ESP32-S3-LCD-2.8C | 480Γ480 Round | right/ |
| GPS / Telemetry | ESP32-S3-Touch-AMOLED-1.75 | 466Γ466 AMOLED | gps/ |
| BMS Logger (ext) | ESP32-DOIT-DevKit-V1 | SSD1306 128Γ64 OLED | External: rAtTrax_BMS_Logger/ |
Shared code lives in
common/β ESP-NOW protocol, data models, OBD2 PIDs, display configuration, and the pre-flight checklist system.Detailed project roadmap:
TODO.md| Central reference:PROJECT_INDEX.mdAdditional documentation: The project includes extensive documentation in the
wiki/directory with integration guides and technical details.
opendash/
βββ readme.md β You are here (landing page)
βββ docs/ β Architecture, hardware, protocols, setup
β βββ architecture.md β System-level architecture & data flow
β βββ hardware.md β Hardware specifications & pin mappings
β βββ i2c-protocol.md β I2C inter-node communication protocol
β βββ data-points.md β Legend of all displayable data points
β βββ font-system-testing.md β Font system implementation and testing
β βββ setup-guide.md β Development environment setup
β
βββ common/ β Shared libraries (all units include this)
β βββ include/ β Public headers
β β βββ opendash_common.h
β β βββ opendash_i2c_protocol.h
β β βββ opendash_data_model.h
β β βββ opendash_obd2.h
β β βββ opendash_display_config.h
β β βββ opendash_checklist.h
β β βββ opendash_wifi_ble.h
β βββ src/ β Implementations
β
βββ center/ β ESP32-S3-Touch-LCD-4.3 project
β βββ main/
β β βββ main.c β Entry point
β β βββ display_init.c/h β LCD & touch initialization
β β βββ ui_manager.c/h β LVGL screen/widget management
β β βββ assets/ β Converted images (C arrays)
β βββ CMakeLists.txt
β βββ sdkconfig.defaults
β βββ README.md
β
βββ left/ β Left gauge pod (ESP32-S3-LCD-2.8C)
β βββ main/
β β βββ main.c β Entry point, I2C slave (addr 0x10)
β β βββ display_init.c/h β ST7701S 3-wire SPI + RGB init
β β βββ ui_manager.c/h β Round gauge UI
β βββ display.ini β Hardware pin reference
β βββ CMakeLists.txt
β βββ sdkconfig.defaults
β βββ README.md
β
βββ right/ β Right gauge pod (same hardware)
β βββ main/ β Same code as left/, uses addr 0x11
β βββ display.ini
β βββ CMakeLists.txt
β βββ sdkconfig.defaults
β βββ README.md
β
βββ gps/ β ESP32-S3-Touch-AMOLED-1.75 project
βββ main/
β βββ main.c
β βββ display_init.c/h β CO5300 AMOLED init
β βββ ui_manager.c/h
β βββ gps_handler.c/h β LC76G GNSS module
β βββ imu_handler.c/h β QMI8658 6-axis IMU
β βββ parachute.c/h β Gyro-triggered parachute deployment
β βββ assets/
βββ CMakeLists.txt
βββ sdkconfig.defaults
βββ README.md
βββ rAtTrax_BMS_Logger/ β External ESP-NOW node (separate repo)
β βββ See: rAtTrax_BMS_Logger/docs/opendash-integration.md
- LVGL-based UI β Gauges, arcs, bar charts, and numeric readouts with minimal CPU overhead
- Multi-page gauge system β Left/Right pods: up to 8 configurable gauge pages (oil, water, RPM, etc.) cycled via boot button. Same layout, different data per page.
- Min/max tracking β Session high/low displayed per gauge page
- Shift-light blink β Arc flashes red/blue when RPM exceeds configurable threshold
- Configurable data views β Choose which data points appear in each screen section
- Touch-screen support β GT911 hardware reset sequence for reliable detection
- Unit conversion β Β°C/Β°F, kPa/BAR/PSI, km/h/MPH, km/mi β auto-applied to all displays
- Easy background/asset swaps β Drop converted C-array images into
assets/folders - Warning system β Flashing colored overlays (red/orange) for critical/caution alerts
- Outlined text rendering β 4-shadow technique for readable text over any background
- ESP-NOW wireless bus β All three displays communicate wirelessly using ESP-NOW (WiFi peer-to-peer) instead of I2C due to hardware limitations and GPIO conflicts
- BMS integration β ESP-NOW node for rAtTrax BMS data (cell voltages, temps, SOC)
- OBD2 support β Read any standard OBD2 PID (RPM, speed, coolant temp, boost, AFR, etc.)
- CAN bus ready β Center unit has onboard CAN for direct ECU communication
The original design intended to use I2C for inter-node communication, but due to hardware limitations and GPIO conflicts, the system was re-implemented to use ESP-NOW (WiFi peer-to-peer) for communication between nodes. This provides zero-wire communication with no GPIO conflicts and better reliability.
- LC76G GNSS β Multi-constellation (GPS, GLONASS, BeiDou, Galileo) positioning
- Predictive lap timing β Real-time delta vs. best lap, sector-based predictions
- QMI8658 6-axis IMU β Accelerometer + gyroscope for g-force, orientation, motion
- Parachute deployment β Gyro-triggered safety system with configurable thresholds
- SD card logging β CSV format, configurable sample rate, auto-session management
- Per-session files β Automatic file naming with timestamps
- Post-session analysis β Compatible with common data analysis tools
- Crew task lists β Customizable per-team checklists before each run
- Touch confirmation β Tap to mark items complete on any display
- Status sharing β Checklist state shared across all nodes via ESP-NOW
- WiFi mode β For OTA firmware updates and data transfer to companion app
- BLE mode β For low-power data sync with Android/iOS companion app
- Individual control β Each unit manages its own wireless independently
- Future Android app β Planned companion for configuration and data review
- Data point legend β Full list of displayable values (see
docs/data-points.md) - Modular sensor support β Add custom sensors via I2C/SPI/ADC
- Programmable alarms β Threshold-based warnings for any data point
- Drag-and-drop assets β Convert images with LVGL tools, drop into
assets/ - Display Mode System β Center display supports multiple cycling data views (ENGINE, GPS, custom modes) with zero memory overhead. See
center/README.mdfor customization guide. - Future: Standard Layout Switcher β Once multiple community-contributed layouts are available, end-users will be able to select from pre-built dashboard templates without coding. See DISPLAY_MODE_REFACTORING.md for technical roadmap.
New to OpenDash? See the Quick Start Guide for a 5-minute setup!
- ESP-IDF v5.3 β Installation Guide
- Node.js + npm β For font conversion (required)
- Python 3 + Pillow + ImageMagick β For image conversion (required)
- Visual Studio Code with the ESP-IDF Extension (recommended) β See VS Code Setup Guide
- USB-C cable and target hardware
π¦ Complete dependency installation guide: BUILD_DEPENDENCIES.md
# Example: Build and flash the center display
cd center/
idf.py set-target esp32s3
idf.py build
idf.py -p /dev/ttyUSB0 flash monitor- Open
opendash.code-workspacein VS Code - Open a file from the project you want to build (e.g.,
center/main/main.c) - Press F1 β "ESP-IDF: Set Espressif device target" β ESP32-S3
- Press F1 β "ESP-IDF: Build your project"
- Press F1 β "ESP-IDF: Flash your project"
See
docs/vscode-setup.mdfor detailed VS Code setup instructions.
See
docs/setup-guide.mdfor detailed setup instructions.
| Document | Description |
|---|---|
| PROJECT INDEX | β Central glossary & index β maps the entire project |
| Quick Start Guide | 5-minute setup guide β start here! |
| Build Dependencies | Complete dependency installation guide |
| Compile Errors Resolution | Troubleshooting compilation issues |
| Display Mode Refactoring | Technical deep-dive: Center display architecture redesign |
docs/vscode-setup.md |
Visual Studio Code configuration guide |
docs/setup-guide.md |
Detailed development environment setup |
docs/architecture.md |
System architecture, data flow, and node roles |
docs/hardware.md |
Hardware specs, pin mappings, and wiring |
docs/i2c-protocol.md |
ESP-NOW communication protocol between nodes |
docs/data-points.md |
Full legend of displayable data points |
docs/font-system-testing.md |
Font system implementation and testing |
center/README.md |
Center display project guide β Display mode system, customization |
left/README.md |
Left gauge pod guide |
right/README.md |
Right gauge pod guide |
gps/README.md |
GPS/Telemetry unit guide |
wiki/ |
Wiki documentation β Additional project documentation and integration guides |
wiki/system-overview.md |
β End-user system guide β start here for usage |
wiki/ota-bluetooth.md |
β BLE OTA step-by-step guide (Linux desktop) |
wiki/ota-android-plan.md |
Roadmap & options for Android-based OTA |
BLE_OTA.md |
BLE OTA architecture & root-cause reference |
Note: The project includes extensive documentation in the
wiki/directory with additional integration guides and technical details.
- ESP-IDF API Reference β https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32s3/api-reference/index.html
- LVGL Documentation β https://docs.lvgl.io/master/
- LVGL Examples β https://docs.lvgl.io/master/examples.html https://github.com/lvgl/lvgl/tree/master/examples **LVGL E
- Waveshare ESP32-S3-Touch-LCD-4.3 Wiki β https://www.waveshare.com/wiki/ESP32-S3-Touch-LCD-4.3
- Waveshare ESP32-S3-LCD-2.8C Wiki β https://www.waveshare.com/wiki/ESP32-S3-LCD-2.8C
- Waveshare ESP32-S3-Touch-AMOLED-1.75 Wiki β https://www.waveshare.com/wiki/ESP32-S3-Touch-AMOLED-1.75
This is a proprietary project β all rights reserved. The codebase is designed for clarity and maintainability:
- All code is thoroughly annotated β Every function, register write, and API call includes explanations referencing the ESP-IDF API docs
- Consistent structure β All three display projects follow the same code layout
- Modular design β Add new data sources, screens, or features without touching core code
- Documentation first β Read the docs before diving into code
Copyright Β© 2024β2026 uknowmelast & Axiom (AI Co-Architect).
All rights reserved. See LICENSE for details.
Built for racers, by racers. ποΈπ¨
Designed by uknowmelast β’ Architected with Axiom