MPU-9250 9-Axis IMU Sensor
Overview
A 9-axis IMU sensor that integrates a 3-axis gyroscope, 3-axis accelerometer, 3-axis magnetometer, and digital motion processor. This low-cost, high-performance sensor is used for motion control in various devices such as smartphones and drones. It uses an I2C interface.

Specifications
- Operating voltage :3 – 5V
- Three 16-bit analog-to-digital converters (ADCs) for digitizing the gyroscope outputs
- Three 16-bit ADCs for digitizing the accelerometer outputs
- Three 16-bit ADCs for digitizing the magnetometer outputs
- Gyroscope full-scale range of ±250, ±500, ±1000, and ±2000°/sec (dps)
- Accelerometer full-scale range of ±2g, ±4g, ±8g, and ±16g
- Magnetometer full-scale range of ±4800μT
- Internal Digital Motion Processing engine supports advanced MotionProcessing and low power functions such as gesture recognition using programmable interrupts
Supported GPIO
- Raspberry Pi 0~4
- Raspberry Pi 5
- BeagleBone Black/Green
- Jetson Nano
- FT232H, FT2232H, FT4232H
- MCP2221
Commands
[SETUP]
Configures the module.
Item | Type | Description |
---|---|---|
Accel Full Scale | WRITE | Selects the accelerometer’s measurement range (Full Scale). (±2g, ±4g, ±8g, ±16g) |
Gyro Full Scale | WRITE | Selects the gyroscope’s measurement range (Full Scale). (±250dps, ±500dps, ±1000dps, ±2000dps) |
Mag Output | WRITE | Selects the magnetometer’s output resolution. (14bits, 16bits) |
FIFO Sample Rate | WRITE | Selects the sampling rate per second. (1000Hz, 500Hz, 333Hz, 250Hz, 200Hz, 167Hz, 143Hz, 125Hz) |
Gyro DLPF_CFG | WRITE | Selects the bandwidth of the gyroscope’s Digital Low Pass Filter. Lower values reduce noise but slow response time, while higher values increase response speed but add noise. (250Hz, 184Hz, 92Hz, 41Hz, 20Hz, 10Hz, 5Hz, 3600Hz) |
Accel DLPF_CFG | WRITE | Selects the bandwidth of the accelerometer’s Digital Low Pass Filter. Lower values reduce noise but slow response time, while higher values increase response speed but add noise. (218Hz_0, 218Hz_1, 99Hz, 45Hz, 21Hz, 10Hz, 5Hz, 420Hz) |
Mag Declination (°) * | WRITE | Enter the magnetic declination for the current location in degrees (°). Magnetic declination varies with location and time. |
Select Filter | WRITE | Selects the Quaternion filter. (none, Madgwick, Mahony) |
Set Filter Iteration | WRITE | Sets the number of iterations for the Quaternion filter. |
[GET_RAW_DATA]
Reads the measured values from accelerometer, gyroscope, and magnetometer.
Item | Type | Description |
---|---|---|
Accel X (g) | READ | Accelerometer X-axis |
Accel Y (g) | READ | Accelerometer Y-axis |
Accel Z (g) | READ | Accelerometer Z-axis |
Gyro X (deg/s) | READ | Gyroscope X-axis |
Gyro Y (deg/s) | READ | Gyroscope Y-axis |
Gyro Z (deg/s) | READ | Gyroscope Z-axis |
Mag X (mG) | READ | Magnetometer X-axis |
Mag Y (mG) | READ | Magnetometer Y-axis |
Mag Z (mG) | READ | Magnetometer Z-axis |
[GET_YAW_PITCH_ROLL]
Calculates Yaw, Pitch, and Roll.

Item | Type | Description |
---|---|---|
Yaw (º) | READ | Yaw angle |
Pitch (º) | READ | Pitch angle |
Roll (º) | READ | Roll angle |
Example: Set the execution cycle of the [Logic] containing the [Action] that executes this command to 10ms.
[SET_BIAS]
Sets the calibration bias values.
Item | Type | Description |
---|---|---|
Accel Bias X (g) | WRITE | Accelerometer X-axis bias |
Accel Bias Y (g) | WRITE | Accelerometer Y-axis bias |
Accel Bias Z (g) | WRITE | Accelerometer Z-axis bias |
Gyro Bias X (deg/s) | WRITE | Gyroscope X-axis bias |
Gyro Bias Y (deg/s) | WRITE | Gyroscope Y-axis bias |
Gyro Bias Z (deg/s) | WRITE | Gyroscope Z-axis bias |
Mag Bias X (mG) | WRITE | Magnetometer X-axis bias |
Mag Bias Y (mG) | WRITE | Magnetometer Y-axis bias |
Mag Bias Z (mG) | WRITE | Magnetometer Z-axis bias |
Mag Scale X | WRITE | Magnetometer X-axis scale |
Mag Scale Y | WRITE | Magnetometer Y-axis scale |
Mag Scale Z | WRITE | Magnetometer Z-axis scale |
[CALIB_ACCEL_GYRO]
Calibrates the accelerometer and gyroscope sensors. Place the module on a flat surface facing upward before executing the command. Ensure the module does not move until calibration is complete.
[CALIB_MAG]
Calibrates the magnetometer sensor. Execute the command and continuously move the module in an ∞ (infinity) pattern until calibration is complete.
[GET_BIAS]
Reads the calibration bias values.
Item | Type | Description |
---|---|---|
Accel Bias X (g) | READ | Accelerometer X-axis bias |
Accel Bias Y (g) | READ | Accelerometer Y-axis bias |
Accel Bias Z (g) | READ | Accelerometer Z-axis bias |
Gyro Bias X (deg/s) | READ | Gyroscope X-axis bias |
Gyro Bias Y (deg/s) | READ | Gyroscope Y-axis bias |
Gyro Bias Z (deg/s) | READ | Gyroscope Z-axis bias |
Mag Bias X (mG) | READ | Magnetometer X-axis bias |
Mag Bias Y (mG) | READ | Magnetometer Y-axis bias |
Mag Bias Z (mG) | READ | Magnetometer Z-axis bias |
Mag Scale X | READ | Magnetometer X-axis scale |
Mag Scale Y | READ | Magnetometer Y-axis scale |
Mag Scale Z | READ | Magnetometer Z-axis scale |
Example
Objective
Display the sensor’s Yaw, Pitch, and Roll values on dashboard widgets.
Parts
Part | Quantity |
---|---|
Raspberry Pi 4 * | 1 |
MPU9250 | 1 |
Wiring
Connect each component to the corresponding connection as listed in each row below.
MPU9250 | GPIO |
---|---|
VIN | 3.3V |
GND | GND |
SCL | 3 (I2C1 SCL) |
SDA | 2 (I2C1 SDA) |
AD0 * | Not Connected |

Project Link
Calibration
- Execute CALIB_ACCEL_GYRO and CALIB_MAG commands (only once initially)
- Execute GET_BIAS command to read bias values (only once initially)
- Add SET_BIAS to the module’s initialization commands and enter the obtained bias values
- From the next execution onward, calibration is applied based on the bias values entered in SET_BIAS