Sensor
| Name | — |
| Address | — |
| Firmware | — |
| Battery | — |
| Sensors | — |
| Calibration | — |
| Wi-Fi | — |
Protected settings—
Connect a sensor first.
Wi-Fi—
Connect the sensor first.
Settings—
"On the sensor" is what the sensor reports now. Change a value in "New value" (the row turns yellow), then press Save.
Settings marked restart take effect after a restart; protected ones need unlocking once a password is set.
Find board pins—
The vendor never documented which ESP32 pins the LEDs, WKUP button and battery are on. These tools find them on the sensor itself and save them to the Board pins settings.
Pins are only driven for a few seconds, gently.
Calibrate—
The same calibration as the NDSA calibration tool. Do them in this order, then press Check calibration.
For the full tool with live graphs and backups of the calibration, open NDSA calibration.
Gyroscope—
Accelerometer—
Magnetometer—
Test the settingsIdle
Reads every setting again and confirms the sensor kept what was saved.
Lay the sensor still for a still-test, or move it to check the ranges.
—Frames / s
—Timestamp step ms
—|Accel| g
—|Gyro| °/s
—|Quaternion|
—|Magnetometer|
XYZaccelerometer, g
LED:
Wi-Fi (firmware 4):
Restart and reset (firmware 4)
Restart applies restart settings. The factory reset keeps the calibration.
Hardware check
Checks every part of the board we know about. Chip IDs and the RST button use the USB cable. The WKUP button, LED and drift test use Bluetooth. When you're done, save the results file and drag it into the Claude chat.
| Part | Asked | Expected | Got | Result |
|---|
All parts on the board (vendor TOP/BOTTOM drawings 0441225001NDSA_251000 + V1.0 source)
| Label | Part | How sure |
|---|---|---|
| M1 | ESP32 module (ESP32-D0WD-V3, 8 MB flash) | Confirmed |
| D4 | LSM6DSOX accelerometer + gyroscope, I2C 0x6A (SDA 19, SCL 18, data-ready 26) | Confirmed in code |
| D5 | LIS2MDL magnetometer, 0x1E, read through the LSM6DSOX sensor hub | Confirmed in code |
| D3 | CP2102N USB-to-serial (28-pin QFN, USB ID 10C4/EA60) | Likely (footprint) |
| HL1 | RGB LED: green 27, red 22, blue 25 (on when low) | Confirmed in code |
| S2 WKUP | Wake button, GPIO 35 (pressed = low) | Confirmed in code |
| S1 RST | Reset button (ESP32 EN) | Label |
| BAT / X1 | Battery: voltage on GPIO 36 (×2 divider), measure enable GPIO 21; 4.2 V = 100%, below 3.2 V = 0% | Confirmed in code |
| USBX2 | USB connector | Label |
| D2 + L1 | Battery charger or regulator | Guess |
| D1 | USB protection or second power chip | Guess |
| VT1–VT6 / VD1–VD6 | Transistors / diodes (auto-reset, battery switch, power path) | Guess |
| G1 | Unknown 3-pad part | Unknown |
| X3 | 10-pin test header: GND, 3V3, TXD, RXD, CLK, MOSI, MISO, CS_N | Silkscreen |
What the vendor told us (firmware V1.0, 2026-10-21)
- Unlock: most commands are ignored until the sensor is enrolled once (0xF1 + SHA-256 of "ndof_key" and the Bluetooth address). The vendor app does it; this page tries it automatically.
- Two streams: 0x01 Measurement sends calibrated magnetometer, accelerometer, gyroscope, then the quaternion. 0x04 Real-time sends the quaternion first, then raw values. Same 56-byte length, no type byte: always check which command the sensor confirmed before reading frames.
- Quaternion: Q0, Q1, Q2, Q3 = W, X, Y, Z. Its length must be close to 1. Reset orientation (0x0B) sets it back to zero rotation.
- Calibration: magnetometer = figure-8 (ellipse fit); accelerometer = 6 faces or 9 points (ellipse fit); gyroscope = automatic in the background while the sensor is still. Results are stored on the sensor.
- Name: stored on the sensor; 9 characters on V1.0 (the vendor says a later firmware allows 14). Renaming doesn't change the services, pairing or updates.
- LED colours: green 1, red 2, blue 4; add them for yellow 3, cyan 5, purple 6, white 7.
- USB cable: 115200 baud text commands only: AT+VER?, AT+RCALI=0|1|2, AT+WCALI=n&…, AT+SCALE?, AT+SCALE=xl&gy, AT+STATE=n. No live data over USB.
- Known drift problem (from the V1.0 source): the "still" check needs gravity within 0.125% of 1 g and gyro under 0.1 °/s, so it almost never turns on and gyro error adds up. An uncalibrated magnetometer is ignored, so heading drifts most.