4.4 KiB
Architecture
Overland Controller is a distributed monitoring and control platform for the Nissan Xterra and future mobile power systems.
Core principle:
Cargo ESP32 = controller / source of truth
Waveshare ESP32-S3 dashboard = local touchscreen client
Phone/laptop WebUI = configuration interface
Home server = future optional remote access layer
The system must work locally without internet.
Cargo ESP32 Controller
The Cargo ESP32 owns critical control state and configuration.
Responsibilities:
- Read JBD/Xiaoxiang BMS data over BLE
- Read DS18B20 temperature sensors
- Control relay trigger outputs
- Store configuration
- Serve HTTP API
- Serve local WebUI
- Run WiFi AP mode
- Maintain status, alarms, and fault state
The Cargo ESP32 should not depend on the dashboard, phone, home server, or internet for core operation.
Waveshare ESP32-S3 Dashboard
Target hardware:
- Waveshare ESP32-S3-Touch-LCD-5
- 5 inch 800x480 capacitive touchscreen
- ESP32-S3
- 16MB flash
- 8MB PSRAM
- WiFi + BLE
- CAN with onboard TJA1051 transceiver
- microSD
- 7-36V VIN support
Responsibilities:
- Native LVGL dashboard
- Connect to Cargo ESP32 AP as WiFi client
- Poll Cargo ESP32 HTTP API
- Send simple control commands through HTTP API
- Display battery, relay, temp, vehicle, and alert data
- Future CAN vehicle data
- Future transmission temperature sender display
The dashboard is a client only. It must not own relay state, BMS config, alarms, or persistent configuration.
WebUI
The WebUI remains hosted by the Cargo ESP32.
Use WebUI for:
- Setup/configuration
- Relay names
- Temperature sensor names
- BMS setup
- Recovery
- API testing
Avoid complex configuration on the touchscreen dashboard.
Network
Cargo ESP32 runs WPA2 AP mode continuously.
Expected local URL:
http://192.168.4.1
Dashboard connects to that AP and talks HTTP.
No UART cable is planned between dashboard and Cargo ESP32.
HTTP API
HTTP is the primary integration contract for:
- WebUI
- Dashboard
- Simulator
- Future home server
- Future MQTT/Home Assistant/Grafana integrations
Preferred direction:
GET /api/v1/health
GET /api/v1/capabilities
GET /api/v1/status
GET /api/v1/config
GET /api/v1/config/export
POST /api/v1/config/import
POST /api/v1/relay/set
Pre-versioned root routes remain registered as compatibility aliases for existing local clients.
Generic IDs
Firmware uses generic IDs.
Relays:
relay_1
relay_2
Temperature sensors:
temp_1
temp_2
temp_3
temp_4
temp_5
temp_6
temp_7
temp_8
Install-specific names belong in saved configuration only.
Examples:
Fridge
Starlink
Cabin
Outside
House Battery
Status Model
Dashboard should be able to render from status/config responses without duplicating business logic.
Expected status groups:
battery
temps
relays
vehicle
network
alarms
system
config
Vehicle Data
Use standard OBD-II over CAN first.
Planned standard PIDs:
0105 coolant temperature
010C RPM
010D vehicle speed
Transmission temperature is planned through a dedicated sender rather than Nissan CAN reverse engineering.
Future Home Server
Future optional architecture:
Phone/PWA
-> Home server HTTPS
-> MQTT/WebSocket/HTTPS bridge
-> Cargo ESP32 outbound connection
Remote features must not break local operation.
Cargo-led AP Pairing and Credential Migration
The Cargo ESP32 owns the local overland network. It is the AP owner, source of truth, and configuration authority.
Target behavior:
- Cargo ESP32 starts a WPA2-protected AP.
- Cargo OLED shows setup credentials and critical recovery/status information.
- Phone connects to the Cargo AP and uses the WebUI for setup/admin.
- Dashboard ESP32-S3 joins the Cargo AP as a client.
- If the user changes the Cargo AP SSID/password, the Cargo ESP stages the new credentials and coordinates dashboard migration.
- Dashboard stores the new credentials before the Cargo AP restarts.
- Cargo AP applies the new credentials.
- Dashboard reconnects automatically.
The dashboard should not own network authority. A temporary dashboard setup AP may exist only as a recovery/fallback mechanism, not the normal pairing path.
Recovery target:
- A setup/status button on the Cargo ESP enclosure can show AP credentials on the OLED.
- A long hold can restore factory AP credentials or enter recovery mode.