5.6 KiB
Xterra Overland Power & Monitoring Dashboard
Current Goal
Build a custom monitoring and control system for a Nissan Xterra using:
- Raspberry Pi Pico 2 W dashboard module
- ESP32 cargo-area controller
- 3.5 inch 320x480 SPI capacitive touchscreen
- DS18B20 temperature sensors
- UART over CAT5 communication
- WiFi HTTP backup interface
Current Hardware
Ordered / Planned
- Raspberry Pi Pico 2 W
- ESP32 2-channel relay board
- 3.5 inch 320x480 touchscreen
- ST7796S display controller
- FT6336U capacitive touch controller
- 4x DS18B20 waterproof sensors
- Active 5V buzzer
- CAT5 cable
- Bosch automotive relays
- 12V to 5V buck converter
Architecture
Dashboard Module (Pico)
Responsibilities:
- Touchscreen UI
- Audible alarms
- Dashboard display
- User interaction
- Sends commands to ESP32
- Receives status updates
Cargo Controller (ESP32)
Responsibilities:
- Relay control
- Sensor collection
- Configuration storage
- Future battery monitoring
- HTTP backup API
- UART communications
Communications
Primary:
UART over CAT5
Backup:
WiFi HTTP API
Fallback:
RS485 over CAT5 if UART proves unreliable
Message format:
Newline-delimited JSON
Example Request:
{"type":"status_request"}
Example Response:
{"type":"status_response"}
CAT5 Pinout
Pair 1
Blue +5V Blue/White +5V
Pair 2
Orange Ground Orange/White Ground
Pair 3
Green Pico TX -> ESP32 RX Green/White Pico RX <- ESP32 TX
Pair 4
Brown Ignition Sense Brown/White Spare
Power Plan
House Battery
- Powers ESP32 directly through fused 12V
- Powers 12V to 5V buck converter
- Buck converter powers Pico through CAT5
Important:
- ESP32 relay board never carries fridge load current
- ESP32 relay board never carries Starlink load current
- ESP32 relay outputs only trigger Bosch relays
- High current circuits are separately fused
Temperature Sensors
Current Sensors
- Fridge Zone 1
- Fridge Zone 2
- Rear Seat Area
- Outside Air
No battery bay temperature sensor planned.
Reason:
Battery temperature will eventually come from the JBD/Xiaoxiang BMS.
Battery Monitoring
Future Integration
JBD / Xiaoxiang BLE Battery
Planned Data:
- State of Charge
- Voltage
- Current
- Remaining Ah
- Runtime Estimate
- Battery Temperature
- Cell Voltages
- Cell Imbalance
Relay Outputs
Current
- Starlink
- Fridge
Future
- Inverter
- Camp Lights
Known GPIO Assignments
GPIO16 = Relay Output 1 GPIO17 = Relay Output 2
Relay ON = HIGH Relay OFF = LOW
Dashboard Screens
Implemented in Simulator
- Dashboard
- Battery
- Temps
- Power
- System
- Config
Dashboard Screen
- Battery Percentage
- Runtime Remaining
- Fridge Zone 1 Temperature
- Fridge Zone 2 Temperature
- Rear Seat Temperature
- Outside Air Temperature
- Relay Status
Alarm System
Implemented in Simulator
- Warning alarms
- Critical alarms
- Full screen alarm overlay
- Acknowledge required
- Sensor fault alarms
- Configurable thresholds
Alarm Targets
- Rear Seat Warning
- Rear Seat Critical
- Fridge Zone 1 Warm
- Fridge Zone 2 Warm
- Battery Low
Future
- Dashboard buzzer
Simulator Status
Location
simulator/
Implemented
- Flask backend
- Browser dashboard
- Pico simulator
- ESP32 simulator
- Protocol layer
- Transport layer
- Config persistence
- Sensor fault simulation
- Ignition simulation
- Communication failure simulation
- Latency simulation
- Packet loss simulation
Run Command
python3 simulator/app.py
Firmware Status
ESP32 Firmware
Location
firmware/esp32/xterra-controller/
Implemented
- Relay framework
- Sensor framework
- DS18B20 support
- HTTP status endpoint
- WiFi AP mode
- GPIO16 relay
- GPIO17 relay
Next ESP32 Tasks
- Verify relay hardware
- Verify DS18B20 hardware
- Implement UART communications
Pico Status
Not started.
Next Tasks
Create:
firmware/pico/display_test/ firmware/pico/touch_test/ firmware/pico/dashboard/
Goals
- Verify ST7796S display
- Verify FT6336U touch controller
- Select graphics library
- Build dashboard UI
- Implement UART communications
Important Decisions
- Touchscreen-only interface
- Active buzzer mounted in dashboard enclosure
- UART over CAT5 is primary wired communication
- WiFi is backup communication
- RS485 is back-burnered as fallback
- No persistent logging currently planned
- Focus on live monitoring, alarms, and control
- Repository is the source of truth
- Verify current file contents before generating patches
Repository
Repository is the source of truth.
Do not assume previous patches were applied successfully.
Verify file contents before modifying existing files.
New Chat Handoff
When continuing this project in a new chat:
Continue my Xterra Overland Power & Monitoring Dashboard project from docs/project-state.md.
The repository is the source of truth.
Ask me for current file contents before generating patches that modify existing files.