How zexry619/votol-esp32-can-bus works
Votol BLE+WiFi Dashboard monitors a Votol controller and BMS over CAN, presenting live vehicle and battery data in a browser. The main workflow is ESP32 CAN acquisition and compact data output, reception over BLE, WiFi, or USB Serial, normalization by the Go application, and WebSocket delivery to its dashboard. The product also includes CAN-sniffer views, charging/injector features, transport switching, and ESP32 firmware updates over WiFi HTTP or BLE. The architecture follows the README and sampled Go, WiFi, and OTA code; unsampled firmware details are represented only where documented.
Main entry points: main.go Web + APIs · votol_ble_dualcore.ino CAN Monitoring · dashboard.html Web Dashboard · ota_http.cpp HTTP OTA Endpoints
Components 16
ESP32 Firmware
- CAN Monitoring
esp32/votol_ble_dualcore/votol_ble_dualcore.ino - Charger Injector
esp32/votol_ble_dualcore/votol_ble_dualcore.ino - WiFi AP + WS
esp32/votol_ble_dualcore/wifi_handler.cpp
Data Ingress
- BLE Receiver
go_web/ble.go - USB Serial
go_web/serial.go - WiFi Receiver
go_web/wifi.go - UDP Sniffer
go_web/udp.go
Go Dashboard
- Data Normalizer
go_web/main.go - Web + APIs
go_web/main.go - Web Dashboard
go_web/dashboard.html
Firmware Updates
- BLE OTA Service
esp32/votol_ble_dualcore/votol_ota.cpp - HTTP OTA Endpoints
esp32/votol_ble_dualcore/ota_http.cpp - OTA Proxy
go_web/main.go - ESP32 Firmware Store
Other components
- Dashboard User
- Votol + BMS
Connections 25
- Votol + BMS → CAN Monitoring: sends CAN data
- CAN Monitoring → Charger Injector: charger detection
- CAN Monitoring → BLE Receiver: streams BLE data
- CAN Monitoring → USB Serial: streams serial data
- CAN Monitoring → WiFi AP + WS: provides telemetry
- WiFi AP + WS → WiFi Receiver: streams WebSocket data
- CAN Monitoring → UDP Sniffer: sends sniffer data
- Dashboard User → Web Dashboard: views dashboard
- Web Dashboard → Web + APIs: opens dashboard
- BLE Receiver → Data Normalizer: passes JSON
- USB Serial → Data Normalizer: passes JSON
- WiFi Receiver → Data Normalizer: passes JSON
- UDP Sniffer → Web + APIs: broadcasts CAN logs
- Web + APIs → Data Normalizer: serves processing
- Data Normalizer → Web + APIs: updates live state
- Web + APIs → Web Dashboard: broadcasts dashboard data
- Web Dashboard → Web + APIs: requests BLE control
- Web + APIs → BLE Receiver: pauses or resumes
- Web Dashboard → OTA Proxy: uploads firmware
- OTA Proxy → HTTP OTA Endpoints: proxies HTTP update
- HTTP OTA Endpoints → ESP32 Firmware Store: writes firmware
- HTTP OTA Endpoints → OTA Proxy: returns update status
- Dashboard User → BLE OTA Service: initiates BLE update
- BLE OTA Service → ESP32 Firmware Store: writes firmware
- Web Dashboard → WiFi AP + WS: sends WiFi commands