Files
esp32-aldl-android/README.md
T

39 lines
3.0 KiB
Markdown

# ESP32 ALDL Dashboard Android Application
This Android app connects via Bluetooth SPP to an ESP32 microcontroller that interfaces with a 1986 Pontiac Fiero 1227170 ECM using the 160-baud ALDL (Assembly Line Diagnostic Link) datastream. It decodes the telemetry stream in real-time and displays it on a modern Jetpack Compose dashboard.
## Features
* **Real-time Dashboard:** View essential engine metrics including Engine Speed (RPM), Vehicle Speed (MPH), Coolant Temperature, Manifold Air Temperature (MAT), Manifold Absolute Pressure (MAP), Throttle Position (TPS), O2 Sensor Voltage, and Battery Voltage.
* **Custom UI Components:** Beautiful animated Canvas-based radial RPM gauge and TPS bar graph.
* **Trouble Code Alerts:** Automatically decodes ECM active fault codes into human-readable alerts (e.g., Code 14 - Coolant Temperature Sensor High).
* **Status Flags:** Real-time visibility into Closed Loop, Rich Mixture, TCC Lockup, A/C Clutch requests, and more.
* **Derived Metrics:** Calculates estimated Engine Load and Fuel Flow Hint based on core telemetry data.
* **Real-Time Line Charts:** Built-in rolling graphs of RPM vs. Time, perfect for diagnostic troubleshooting.
* **Background Telemetry Logging:** Uses an Android Foreground Service to maintain the Bluetooth connection and record data seamlessly even when the app is minimized.
* **Local Persistence:** Uses Jetpack Room database to save full sessions with timestamped raw payloads.
* **CSV Data Export:** Automatically generates TunerPro RT compatible `.csv` log files in the `Downloads/ALDLLogs` folder using Android MediaStore APIs.
* **Settings & Configuration:** Persistent DataStore preferences for Unit Toggle (°C/°F), Auto-Logging toggles, and Coolant Alert Thresholds.
## Architecture Highlights
* **MVVM & StateFlow:** Strict MVVM separation of concerns. The UI reactivity is entirely driven by `StateFlow` streams.
* **Circular Ring Buffer Packet Parsing:** The Bluetooth ingest layer uses `ArrayDeque<Byte>` circular buffering. It constantly seeks the `AA 55` header, preventing misalignment desyncs over noisy lines.
* **Robust Parsers:** The `ALDLParser` encapsulates all scaling constants and interpolation arrays (for MAT) required by the TunerPro `24-INT10.ads` definition.
## Requirements
* Android Device running Android 8.0+ (Tested extensively against Android 13+)
* Bluetooth Permissions (Nearby Devices on Android 12+)
* ESP32 hardware module programmed with the accompanying ALDL datastream code.
## Setup Instructions
1. Pair the ESP32 (named `ESP32-ALDL`) in your Android Bluetooth settings.
2. Grant the requested Bluetooth permissions inside the app.
3. Tap "Connect BT" to begin the telemetry stream.
4. Navigate to the **Settings** tab to toggle Auto-Logging or customize unit formats.
5. View historical `.csv` logs in your device's `Downloads/ALDLLogs` folder.
## Build Information
Developed using Android Studio and Gradle. Built with Jetpack Compose, Room (with KSP Annotation Processor), and DataStore.