Skip to content

Latest commit

Β 

History

103 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🏁 OpenDash β€” Universal Racecar Dashboard

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


πŸ“‹ Quick Links β€” Display Projects

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.md

Additional documentation: The project includes extensive documentation in the wiki/ directory with integration guides and technical details.


πŸ—οΈ Repository Structure

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

✨ Key Features

πŸ–₯️ Display & UI

  • 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

πŸ“‘ Communication

  • 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

⚠️ Important Note

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.

πŸ›°οΈ GPS & Telemetry (GPS Unit)

  • 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

πŸ“Š Data Logging

  • 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

πŸ“‹ Pre-Flight Checklist

  • 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

πŸ“Ά Connectivity

  • 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

πŸ”§ Customization & Extensibility

  • 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.md for 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.

πŸš€ Getting Started

Quick Start

New to OpenDash? See the Quick Start Guide for a 5-minute setup!

Prerequisites

  1. ESP-IDF v5.3 β€” Installation Guide
  2. Node.js + npm β€” For font conversion (required)
  3. Python 3 + Pillow + ImageMagick β€” For image conversion (required)
  4. Visual Studio Code with the ESP-IDF Extension (recommended) β€” See VS Code Setup Guide
  5. USB-C cable and target hardware

πŸ“¦ Complete dependency installation guide: BUILD_DEPENDENCIES.md

Build & Flash (Any Unit)

Command Line

# Example: Build and flash the center display
cd center/
idf.py set-target esp32s3
idf.py build
idf.py -p /dev/ttyUSB0 flash monitor

Visual Studio Code

  1. Open opendash.code-workspace in VS Code
  2. Open a file from the project you want to build (e.g., center/main/main.c)
  3. Press F1 β†’ "ESP-IDF: Set Espressif device target" β†’ ESP32-S3
  4. Press F1 β†’ "ESP-IDF: Build your project"
  5. Press F1 β†’ "ESP-IDF: Flash your project"

See docs/vscode-setup.md for detailed VS Code setup instructions.

See docs/setup-guide.md for detailed setup instructions.


πŸ“– Documentation

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.


πŸ”— Reference Links


🀝 Contributing

This is a proprietary project β€” all rights reserved. The codebase is designed for clarity and maintainability:

  1. All code is thoroughly annotated β€” Every function, register write, and API call includes explanations referencing the ESP-IDF API docs
  2. Consistent structure β€” All three display projects follow the same code layout
  3. Modular design β€” Add new data sources, screens, or features without touching core code
  4. Documentation first β€” Read the docs before diving into code

πŸ“„ License

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

About

A quick display solution for zoom zoom.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages