Main Content


Connect to MPU-9250 sensor on Raspberry Pi hardware I2C bus

Since R2021a


The mpu9250 object reads linear acceleration, angular velocity, and magnetic field along the X, Y, and Z axes using the InvenSense I2C-based MPU-9250 inertial measurement unit (IMU) sensor interfaced with the Raspberry Pi® hardware. This object represents a connection from MATLAB® to the MPU-9250 sensor connected on the Raspberry Pi hardware board I2C pins I2C1_SDA (GPIO 2) and I2C1_SCL (GPIO 3). Before you use the mpu9250 object, ensure that the I2C interface is enabled on your Raspberry Pi kernel. You can then create a connection to the Raspberry Pi board using the raspi object and set its properties. For more information, see enableI2C and raspi.




sensor = mpu9250(mypi) creates a MPU-9250 sensor object with default property values. The object represents a connection to the sensor on the Raspberry Pi hardware mypi.


sensor = mpu9250(mypi,Name,Value) creates a MPU-9250 sensor object with properties using one or more Name,Value arguments.

Input Arguments

expand all

Raspberry Pi hardware board connection specified as a raspi object.

Example: sensor = mpu9250(mypi) creates a connection to the MPU-9250 sensor on the Raspberry Pi object mypi.

Name-Value Arguments

Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Before R2021a, use commas to separate each name and value, and enclose Name in quotes.

I2C bus address of the Raspberry Pi hardware board.

Example: sensor = mpu9250(mypi, 'Bus', 'i2c-0') creates the sensor object on the 'i2c-0' bus of the Raspberry Pi board.

Data Types: char

I2C address of the MPU-9250 sensor. This is the address of the sensor when multiple sensors are connected to the same hardware board. MPU-9250 sensor has two peripheral addresses that depend on the logic level of pin AD0 of the sensor. For example, if the logic level of AD0 is low, the I2C address is {'0x68','0x0C'} and if the logic level of AD0 is high, the I2C address is {'0x69','0x0C'}.

You can specify the I2C address in hexadecimal, decimal, or binary format.

Example: sensor = mpu9250(mypi,'I2CAddress',{'0x69','0x0C'}), where '0x69' is the I2C address of the accelerometer and gyroscope of the MPU-9250 sensor and '0x0C' is the I2C address of the magnetometer of the MPU-9250 sensor.

Data Types: numeric array | string array | cell array

Object Functions

readAccelerationRead one acceleration data sample from MPU-9250 sensor
readAngularVelocityRead one angular velocity data sample from MPU-9250 sensor
readMagneticFieldRead one magnetic field data sample from MPU-9250 sensor


collapse all

Ensure that the I2C interface on the Raspberry Pi kernel is enabled and then create an mpu9250 sensor object. Follow these steps to enable the I2C interface in the Raspberry Pi hardware kernel.

Open the Raspberry Pi Linux® terminal.

Open the Raspberry Pi Software Configuration Tool dialog box.

sudo raspi-config

Select Interfacing Options > I2C.

Raspberry Pi Kernel I2C Interfacing options selection on Linux terminal

Select Yes when prompted to enable the I2C interface.

Raspberry Pi Kernel I2C Interfacing enabling options

Select Yes when prompted to automatically load the I2C kernel module.

Select Finish.

Select Yes when prompted to reboot.


You can also enable the I2C interface using the Raspberry Pi Resource Monitor App.

Create a connection from MATLAB to the Raspberry Pi hardware board.

mypi = raspi;
mypi = 

  Raspi with Properties:

           DeviceAddress: 'raspberrypi-hysdu8X38o'
                    Port: 18734
               BoardName: 'Raspberry Pi 3 Model B+'
           AvailableLEDs: {'led0'}
    AvailableDigitalPins: [4,5,6,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]
    AvailableSPIChannels: {‘CE0’,’CE1’}
       AvailableI2CBuses: {'i2c-1'}
             I2CBusSpeed: 100000
        AvailabelWebCams: mmal service 16.1 (platform:bcm2835-v4l2)

GPIO header pins I2C_SDA (GPIO 2) and I2C_SCL (GPIO 3) are used for I2C functionality. Display pin mapping of the Raspberry Pi hardware board.

Raspberry Pi 3 Model B+ GPIO Pin Map diagram

Get the addresses of the MPU-9250 sensor connected to the I2C bus 'i2c-1'.

sensor = scanI2CBus(mypi,'i2c-1');
ans =

  1×2 cell array

    {'0x69'}    {'0xC'}

Create an mpu9250 sensor object on the I2C bus 'i2c-1' on addresses '0x69' and '0x0C'.

sensor = mpu9250(mypi,'Bus','i2c-1','I2CAddress',{'0x69','0x0C'});
sensor = 

  mpu9250 with properties:

                         I2CAddress: 105 ("0x69")
                                   : 12 ("0xC")
                                Bus: i2c-1

Extended Capabilities

Version History

Introduced in R2021a