SlimeVR_BMI270

1. What is SlimeVR?
SlimeVR is a set of open hardware sensors and open-source software that facilitates full-body tracking (FBT) in virtual reality.
Official documentation
: l0ud/SlimeVR-Tracker-ESP-BMI270 branch
2. Introduction
This project consists of an ESP-12F + IP5306-CK + BMI270, with a CH340K for automatic downloading, an LDO for step-down, and a 3.3V power supply.
The official website describes the BMI270 as follows: The BMI270 is a relatively new experimental IMU for DIY SlimeVR. Its performance appears to be significantly better than the BMI160, while being more affordable.
The casing uses the Fusion360 design

. 3. Firmware:
The main branch of the SlimeVR firmware does not yet support this BMI270, therefore this project uses the l0ud/SlimeVR-Tracker-ESP-BMI270 branch.
3.1 Building SlimeVR Firmware
: Install the CH340 driver
and VSCode. Install the PlatformIO IDE extension.
Clone the l0ud/SlimeVR-Tracker-ESP-BMI270 branch and open it through VSCode (VSCode will automatically configure the environment during this process; please ensure a stable network connection).
In platformio.ini, set DWIFI_CREDS_SSID and DWIFI_CREDS_PASSWD.
Replace src/defines.h with
: #define IMU IMU_BMI270
#define SECOND_IMU IMU
#define BOARD BOARD_CUSTOM
#define IMU_ROTATION DEG_90
#define SECOND_IMU_ROTATION DEG_0
#define PRIMARY_IMU_OPTIONAL true
#define SECONDARY_IMU_OPTIONAL true
#define MAX_IMU_COUNT 1
#ifndef IMU_DESC_LIST
#define IMU_DESC_LIST
IMU_DESC_ENTRY(IMU, PRIMARY_IMU_ADDRESS_ONE, IMU_ROTATION, PIN_IMU_SCL, PIN_IMU_SDA, PRIMARY_IMU_OPTIONAL, PIN_IMU_INT)
#endif
#define BATTERY_MONITOR BAT_EXTERNAL
#define BATTERY_SHIELD_RESISTANCE 180
#define PIN_IMU_SDA D2
#define PIN_IMU_SCL D1
#define PIN_IMU_INT D0
#define PIN_IMU_INT_2 D5
#define PIN_BATTERY_LEVEL A0
3.2 1. Upload firmware
using a data cable connection.
Click PlatformIO:Upload and wait for the flashing to complete.
2.
Open the SlimeVR server and follow the prompts
. 3. The I2C address for other
BMI270s is 0x68 (when SDO pin is grounded) / 0x69 (when SDO pin is pulled high). In the SlimeVR source code, the default I2C address for the MPU9250/BMI160/MPU6500/ICM20948/ICM42688 as the main sensor is 0x68. In my first version, I pulled the SDO pin high, so I replaced 0x68 and 0x69 in the src/sensors/sensoraddresses.h file. No need to pay attention to modified versions.
4. Thanks to
SlimeVR_BNO085 for the main circuit reference, and
to zhangwenchao1992/SlimeVR_DeftTracker for the housing and base design reference.