Real-time telemetry for RC crawlers, served wirelessly from a postage-stamp-sized ESP32.
No internet connection required. No app to install. No account needed. Connect your phone to the truck's WiFi access point, open a browser, and your full telemetry dashboard loads instantly — attitude indicator, warning system, session logging, and all.
Use VDaT Studio to Flash the firmware, read logs and more Including what to purchase to make all this happen
- Live pitch, roll, accelerometer and gyro — with independent peak tracking per direction (up/down, left/right)
- Two dashboard layouts — the Classic four-card grid, or EFIS, a full-screen artificial horizon built to be read at a glance while you're driving. Switch any time under Settings → Display; your rig remembers the choice
- Attitude indicator — artificial horizon showing pitch, roll, and heading simultaneously
- Configurable warning system — independent thresholds per axis, HUD header alerts, flashing warning state, and Web Audio API beeps at two distinct frequencies (pitch vs roll)
- Per-axis bar color thresholds — independent yellow and red zones for pitch and roll bars
- IMU zero calibration — set current orientation as 0,0 reference, saved to flash, survives reboot
- Session logging — recorded to your phone, survives refreshes and network drops, with chart, peak summary, warning count, and CSV export
- Full sensor data logging — raw accelerometer and gyro recorded alongside attitude, feeding motion, impact, and composure analysis in VDaT Studio
- VDaT Studio integration — flash firmware and read the serial monitor straight over USB, no phone required
- Add to home screen support — the dashboard can be installed like an app on your phone if you prefer that over a browser tab
- Live I2C diagnostics — a built-in bus scanner confirms your IMU is wired correctly before you go hunting for problems blind
- Full settings menu — Thresholds, Calibration, Display, Logging, Rig Name, About, Diagnostics
- Rig Name — user-configurable, displayed in the dashboard header and stamped into every log
- AP-only WiFi — no home network credentials stored in firmware
- Game Rotation Vector mode — IMU runs gyro + accelerometer fusion only, immune to motor/servo magnetic interference
| Component | Product |
|---|---|
| Microcontroller | ESP32-S3 SuperMini (HW-747), 4MB Flash |
| IMU | BNO085 9-DOF IMU breakout |
| Power | USB-C cable, data-capable |
| Wiring | 6x Dupont jumper wires (female-to-female) |
Total assembled weight: ~12 grams.
An onboard display is possible on a second I2C bus, but it isn't part of the standard build.
The IMU connects to pins clustered right next to the board's 3V3(OUT) pin, keeping the whole hookup on one side of the board with short, clean runs. No splitters, no shared bus.
ESP32-S3 SuperMini IMU (BNO085)
───────────────── ────────────
GP13 (SDA) ──── SDA
GP12 (SCL) ──── SCL
GP10 (RST) ──── RST
GP11 (INT) ──── INT
3V3 ──── VCC
GND ──── GND
IMU I2C Address: 0x4B
Power the ESP32 via USB-C. This board uses native USB — no separate USB-UART driver needed.
Version 2.x recommended.
Install via Boards Manager:
- Package:
esp32by Espressif Systems - Board selection: ESP32S3 Dev Module
Set Partition Scheme to Huge APP (3MB No OTA/1MB SPIFFS). VDaT has no OTA update path — it's an offline access point with nothing to push an update from — so this scheme trades unused OTA headroom for real code space.
Install via Library Manager:
Adafruit GFX LibraryAdafruit SSD1306SparkFun BNO080 Arduino Library
Included with the ESP32 board package (no separate install):
WiFiWebServerPreferencesWireLittleFS
All user-configurable constants live in config.h:
// WiFi Access Point
#define AP_SSID "VDATTELE" // Change this to your preferred network name
#define AP_PASSWORD "vdat1234" // Change this — do not leave default in the field
// I2C Pins (IMU)
#define SDA_PIN 13
#define SCL_PIN 12
// IMU Hardware Control
#define IMU_RST_PIN 10
#define IMU_INT_PIN 11
// IMU
#define IMU_ADDRESS 0x4BAfter flashing, the Rig Name can be changed from the dashboard without reflashing — go to Settings → Rig Name.
- Flash the firmware to your ESP32-S3 (directly via Arduino IDE, or through VDaT Studio's Install Firmware page)
- Power on the ESP
- On your phone, connect to the WiFi network configured in
config.h(default:VDATTELE, passwordvdat1234) - Open your browser and navigate to
192.168.4.1 - The dashboard loads automatically
The BNO085's readings depend on how it's physically mounted. If pitch and roll read backward, swapped, or inverted, no code changes or reflashing are needed — go to Settings → Calibration → Mounting Orientation on the dashboard and pick the option that matches your mount. Four presets cover every way a flat board can be rotated around the vertical axis; the Live Reading on that same screen updates immediately so you can confirm you picked correctly.
After mounting, use Settings → Calibration → Zero Now on a level surface to set your 0,0 reference.
If you're not sure the IMU is wired correctly at all, check Settings → Diagnostics first — it runs a live I2C bus scan and tells you plainly whether the IMU is responding at its expected address.
Every run is recorded to your phone's browser storage (IndexedDB). Sessions survive page refreshes, network switches, and closing the tab, and everything works fully offline.
Turn on Auto-Save under Settings → Logging to also drop a CSV into your Downloads folder the moment you stop recording — that's the copy you own outright, independent of the browser.
Full Sensor Data (Settings → Logging) adds raw accelerometer and gyro to the log alongside pitch and roll. It's on by default, because your phone is currently the only thing recording that data. Turn it off if you'd rather have smaller, attitude-only logs.
Rig-mounted SD card logging is in development — it will sample faster and more evenly than a phone polling over WiFi, and won't depend on your screen staying awake.
VDaT includes a standalone offline log reviewer — Docs/log-review.html. VDaT Studio's Session Analyzer covers the same ground with a fuller feature set, but this standalone tool works anywhere, no install needed.
Open it in any browser on any device (phone, PC, tablet). No internet connection required. Load any CSV exported from the dashboard to get:
- Session summary with all peak values
- Warning breakdown per axis (pitch up/down, roll right/left independently)
- Time spent in warning and longest continuous warning event
- Most aggressive moment in the session
- Warning timeline bar showing exactly when warnings occurred
- Full pitch and roll chart with warning segments highlighted in red
- Scrollable data table with per-row warning flags
- Export warnings-only CSV for sharing just the sketchy moments
The CSV file format includes a metadata header with the rig name, firmware version, and the warning thresholds that were active during the session — so the reviewer always knows exactly what rig produced the data and what it was tuned to. The date and time of the run are carried in the filename.
VDaT/
├── VDaT.ino Main sketch
├── config.h User configuration
├── globals.h / .cpp Shared variables and objects
├── imu.h / .cpp BNO085 sensor interface
├── display.h / .cpp Optional secondary-display driver (not part of the standard build)
├── boot_anim.h / .cpp Animated boot sequence (optional display only)
├── vdat_logo_bitmap.h Boot logo bitmap (optional display only)
├── web.h / .cpp WiFi AP and web server
├── riglog.h / .cpp Rig-side session logging (dormant — awaiting SD card support)
├── serial_sync.h / .cpp USB serial protocol for VDaT Studio
├── diagnostics.h / .cpp Live I2C bus scanner
├── dashboard.h Dashboard HTML assembler
├── utils.h / .cpp Utility functions
├── Web/
│ ├── HTML/ HTML sub-headers (header, cards, menu, footer)
│ ├── JS/ JavaScript modules (utils, audio, attitude, storage, etc.)
│ └── PWA/ Installable dashboard — manifest, service worker, icons
└── Docs/
├── README.md This file
├── Requirements.md Hardware and software requirements
└── log-review.html Standalone offline log reviewer
VDaT 1.1.0 © 2026 GyverX
- GitHub: https://github.com/GyverX1
- Instagram: https://www.instagram.com/gyverx/
- YouTube: https://www.youtube.com/@GyverX
Built by a maker, for makers.




