Add Pico dashboard architecture document

This commit is contained in:
root
2026-06-03 02:29:30 -06:00
parent c243c361af
commit 41b8f636cf
+325
View File
@@ -0,0 +1,325 @@
# Pico Dashboard Architecture
## Purpose
The Raspberry Pi Pico 2 W dashboard is the primary user interface for the Xterra Overland Power & Monitoring Dashboard.
Its responsibilities are:
* Display live system status
* Display alarms and warnings
* Allow relay control
* Provide touchscreen navigation
* Communicate with the ESP32 cargo controller
* Provide audible alerts through a dashboard buzzer
The Pico is intentionally a display and control device.
The ESP32 remains responsible for hardware control and sensor collection.
---
# Hardware
## Dashboard Controller
* Raspberry Pi Pico 2 W
## Display
* ST7796S
* 320x480 resolution
* SPI interface
## Touch Controller
* FT6336U
* Capacitive touch
* I2C interface
## Audio
* Active buzzer
## Communications
Primary:
* UART over CAT5
Backup:
* WiFi HTTP API
Fallback only:
* RS-485 (not currently planned)
---
# Software Architecture
```text
main.py
├── app_state.py
├── comms/
│ ├── uart_client.py
│ ├── http_client.py
│ └── protocol.py
├── hardware/
│ ├── display.py
│ ├── touch.py
│ └── buzzer.py
├── alarms/
│ ├── alarm_manager.py
│ └── alarm_definitions.py
└── ui/
├── screen_manager.py
├── dashboard_screen.py
├── battery_screen.py
├── temps_screen.py
├── power_screen.py
├── system_screen.py
└── alarm_overlay.py
```
---
# Application State
A single application state object should hold all current controller data.
Example:
```python
state.battery_soc
state.battery_voltage
state.fridge_zone_1_temp
state.fridge_zone_2_temp
state.starlink_enabled
state.fridge_enabled
state.ignition_on
state.uart_connected
state.wifi_connected
```
All screens should render from the application state rather than communicating directly with the ESP32.
---
# Communication Layer
## Responsibilities
* Send status requests
* Receive status responses
* Send relay commands
* Handle communication failures
* Switch to HTTP fallback if UART fails
The communication layer should be the only component that knows how to talk to the ESP32.
---
# Screen Manager
The screen manager owns navigation.
Initial screens:
1. Dashboard
2. Battery
3. Temperatures
4. Power
5. System
Only one screen should be active at a time.
---
# Dashboard Screen
The dashboard screen is the default landing page.
Display:
* Battery SOC
* Battery voltage
* Battery current
* Remaining runtime
* Fridge temperatures
* Relay status
* Communication status
* Active alarms
Goal:
Quick vehicle-at-a-glance information.
---
# Battery Screen
Display:
* SOC
* Voltage
* Current
* Remaining amp-hours
* Runtime estimate
* Battery temperature
Future:
* BMS cell voltages
* Charge/discharge limits
---
# Temperature Screen
Display:
* Fridge Zone 1
* Fridge Zone 2
* Rear Seat Area
* Outside Air
Display sensor fault indicators when sensors are missing.
---
# Power Screen
Display:
* Starlink relay status
* Fridge relay status
Allow relay control.
Future:
* Inverter
* Lighting
* Additional accessory relays
---
# System Screen
Display:
* ESP32 status
* Communication status
* Firmware versions
* WiFi status
* Sensor health
Future:
* Configuration options
---
# Alarm Manager
The alarm manager continuously evaluates system state.
Initial alarms:
## Battery Low
Triggered when SOC falls below configured threshold.
## Battery Voltage Low
Triggered when voltage falls below configured threshold.
## Fridge Temperature High
Triggered when fridge temperature exceeds configured threshold.
## Sensor Failure
Triggered when a sensor becomes unavailable.
## Communication Failure
Triggered when ESP32 communication is lost.
---
# Alarm Overlay
The alarm overlay is visible from any screen.
Severity levels:
* Info
* Warning
* Critical
Critical alarms should trigger the buzzer.
---
# Buzzer Manager
Initial buzzer events:
* Critical battery alarm
* High fridge temperature
* Communication loss
* Sensor failure
The buzzer should be non-blocking and event-driven.
---
# UI Design Goals
* Touchscreen-only operation
* Large buttons
* Readable in sunlight
* Minimal navigation depth
* Fast status visibility
* Safe operation while driving
---
# Initial Bring-Up Order
1. Display test
2. Touch test
3. Buzzer test
4. Static UI rendering
5. UART communications
6. Live status display
7. Relay control
8. Alarm overlay
9. WiFi fallback
---
# Out of Scope
Not currently planned:
* Persistent logging
* Historical graphs
* Cloud connectivity
* Internet access requirements
* User accounts
* Remote access
The system is intended to operate fully offline.