Files

164 lines
2.3 KiB
Markdown

# ESP32 ↔ Pico Communication Protocol
## Current Decision
Primary communication is **UART over CAT5**.
Backup communication is the **ESP32 WiFi HTTP API**.
RS-485/MAX3485 is fallback-only and is not currently planned.
## Physical Link
* Transport: UART
* Baud: 115200
* Format: 8N1
* Framing: newline-delimited JSON
* Direction: Pico dashboard ↔ ESP32 cargo controller
## Message Rules
Each message is one JSON object followed by a newline.
Example:
```
{"type":"status_request"}
```
Responses should also be one JSON object followed by a newline.
## Pico → ESP32 Messages
### Status Request
```
{"type":"status_request"}
```
Expected response:
```
{"type":"status_response"}
```
### Set Relay
```
{
"type": "set_relay",
"relay": "starlink",
"enabled": true
}
```
Valid relay names:
* starlink
* fridge
Expected response:
```
{
"type": "relay_response",
"relay": "starlink",
"enabled": true,
"ok": true
}
```
## ESP32 → Pico Messages
### Status Response
```
{
"type": "status_response",
"timestamp": 123456,
"battery": {
"soc": 82.0,
"voltage": 13.2,
"current": -6.4,
"remaining_ah": 82.0,
"runtime_hours": 12.0,
"temperature_f": 76.0
},
"temps": {
"fridge_zone_1": 34.5,
"fridge_zone_2": 36.0,
"rear_seat": 71.2,
"outside": 89.1
},
"sensor_health": {
"fridge_zone_1": true,
"fridge_zone_2": true,
"rear_seat": true,
"outside": true
},
"relays": {
"starlink": false,
"fridge": true
},
"vehicle": {
"ignition_on": false
},
"network": {
"wifi_enabled": true,
"uart_connected": true
}
}
```
## Error Response
```
{
"type": "error",
"message": "unknown_message_type"
}
```
Known error messages:
* invalid_json
* unknown_message_type
* unknown_relay
* message_too_long
## Sensor Null Handling
If a DS18B20 sensor is missing or faulted, its temperature value should be null.
Example:
```
{
"temps": {
"fridge_zone_1": null
},
"sensor_health": {
"fridge_zone_1": false
}
}
```
## Current Scope
The protocol currently supports:
* Live status polling
* Relay control
* Temperature reporting
* Sensor health reporting
* Basic error reporting
The protocol does not currently include:
* Persistent logging
* Historical data sync
* OTA updates
* BMS write/config commands
* Starlink diagnostic integration
* GPS/OBD-II data