Files
trikkeSensors/README.md
T

2.3 KiB

Trikke Motion Telemetry Logger

Prototype v0 firmware for a Seeed Studio XIAO ESP32-C3 with an ADXL345 accelerometer and L3G4200D gyroscope on a shared I2C bus.

This milestone does four things:

  1. Detects and verifies both sensors by their identification registers.
  2. Configures each sensor for 100 Hz raw acquisition.
  3. Emits timestamped, sensor-native raw readings over the XIAO USB connection.
  4. Maps both sensors into a shared enclosure coordinate frame for validation.

BLE transport and phone-side storage come after the wired sensor path is proven.

Wiring

Signal XIAO pin ESP32-C3 GPIO
SDA D4 GPIO6
SCL D5 GPIO7
Sensor power 3V3
Sensor ground GND

Both breakouts share SDA, SCL, 3V3, and GND. The firmware checks both possible 7-bit I2C addresses for each device:

  • ADXL345: 0x53 or 0x1D; expected DEVID is 0xE5.
  • L3G4200D: 0x69 or 0x68; expected WHO_AM_I is 0xD3.

Sensor configuration

  • ADXL345: 100 Hz output rate, full-resolution mode, +/-8 g. Nominal scale is 3.9 mg/LSB.
  • L3G4200D: 100 Hz output rate, 25 Hz bandwidth, +/-500 dps. Nominal scale is 17.5 mdps/LSB.

The enclosure coordinate frame is:

  • +X points right in the reference photograph.
  • +Y points toward the top of the enclosure.
  • +Z points out of the board toward the enclosure cover.

The L3G4200D already matches that frame. The ADXL345 mapping is:

enclosure X =  native Y
enclosure Y = -native X
enclosure Z =  native Z

No calibration, filtering, or sensor fusion is performed yet.

Build and flash

ESP-IDF 6.0.2 is installed at:

/Users/jay/.espressif/v6.0.2/esp-idf

For each new terminal:

source /Users/jay/.espressif/v6.0.2/esp-idf/export.sh
idf.py build
idf.py -p /dev/cu.usbmodem1134101 flash monitor

Exit the serial monitor with Ctrl-].

USB output

After startup metadata, records use CSV:

sequence,timestamp_us,accel_x_raw,accel_y_raw,accel_z_raw,gyro_x_raw,gyro_y_raw,gyro_z_raw,accel_native_x_raw,accel_native_y_raw,accel_native_z_raw,gyro_native_x_raw,gyro_native_y_raw,gyro_native_z_raw

timestamp_us is the ESP32-C3 monotonic microsecond timer since boot. The axes in the first six sample columns use the enclosure frame above. The appended native columns are temporary diagnostics for the coordinated orientation test.