Stream slave accel via ESP-NOW with master snapshot cache.
Slaves push BMA456 samples at 16ms when enabled; the master caches per client and exposes ACCEL_SNAPSHOT and ACCEL_STREAM over UART. goTool adds dashboard stream controls, HTTP accel-stream routes, and an external WebSocket API with per-connection receive/interval and slave stream commands. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -22,7 +22,8 @@ enum MessageType {
|
||||
OTA_SLAVE_PROGRESS = 21;
|
||||
FIND_ME = 22;
|
||||
RESTART = 23;
|
||||
ACCEL_READ = 24;
|
||||
ACCEL_SNAPSHOT = 24;
|
||||
ACCEL_STREAM = 25;
|
||||
}
|
||||
|
||||
message UartMessage {
|
||||
@@ -49,8 +50,10 @@ message UartMessage {
|
||||
EspNowFindMeResponse espnow_find_me_response = 20;
|
||||
RestartRequest restart_request = 21;
|
||||
RestartResponse restart_response = 22;
|
||||
AccelReadRequest accel_read_request = 23;
|
||||
AccelReadResponse accel_read_response = 24;
|
||||
AccelSnapshotRequest accel_snapshot_request = 23;
|
||||
AccelSnapshotResponse accel_snapshot_response = 24;
|
||||
AccelStreamRequest accel_stream_request = 25;
|
||||
AccelStreamResponse accel_stream_response = 26;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,6 +78,8 @@ message ClientInfo {
|
||||
uint32 last_ping = 5;
|
||||
uint32 last_success_ping = 6;
|
||||
uint32 version = 7;
|
||||
/** Master: ESP-NOW accel stream enabled for this slave. */
|
||||
bool accel_stream_enabled = 8;
|
||||
}
|
||||
|
||||
message ClientInfoResponse {
|
||||
@@ -109,14 +114,40 @@ message AccelDeadzoneResponse {
|
||||
uint32 slaves_updated = 4;
|
||||
}
|
||||
|
||||
// Host → device: read current BMA456 accelerometer sample (raw LSB, ±2g range).
|
||||
message AccelReadRequest {}
|
||||
// Host → master: enable/disable slave accel ESP-NOW stream (~16 ms per slave).
|
||||
// write=false: read; write=true: apply. client_id 0 invalid for write (use >0 or all_clients).
|
||||
message AccelStreamRequest {
|
||||
bool write = 1;
|
||||
bool enable = 2;
|
||||
uint32 client_id = 3;
|
||||
bool all_clients = 4;
|
||||
}
|
||||
|
||||
message AccelReadResponse {
|
||||
bool success = 1;
|
||||
sint32 x = 2;
|
||||
sint32 y = 3;
|
||||
sint32 z = 4;
|
||||
message AccelStreamResponse {
|
||||
bool enabled = 1;
|
||||
uint32 client_id = 2;
|
||||
bool success = 3;
|
||||
uint32 slaves_updated = 4;
|
||||
}
|
||||
|
||||
// Host → master: read cached accel samples from slaves (only while stream enabled).
|
||||
// client_id 0 = all registered slaves; otherwise one slave.
|
||||
message AccelSnapshotRequest {
|
||||
uint32 client_id = 1;
|
||||
}
|
||||
|
||||
message AccelSample {
|
||||
uint32 client_id = 1;
|
||||
bool valid = 2;
|
||||
sint32 x = 3;
|
||||
sint32 y = 4;
|
||||
sint32 z = 5;
|
||||
/** Milliseconds since last ESP-NOW sample from this slave. */
|
||||
uint32 age_ms = 6;
|
||||
}
|
||||
|
||||
message AccelSnapshotResponse {
|
||||
repeated AccelSample samples = 1 [(nanopb).max_count = 16];
|
||||
}
|
||||
|
||||
message EspNowUnicastTestRequest {
|
||||
|
||||
Reference in New Issue
Block a user