SparkFun 9DoF IMU Breakout - ICM-20948 (Qwiic)

The SparkFun 9DoF IMU Breakout incorporates all the amazing features of Invensense's ICM-20948 into a Qwiic-enabled breakout board complete with a logic shifter and broken out GPIO pins for all your motion sensing needs. The ICM-20948 itself is an extremely low powered, I2C and SPI enabled 9-axis motion tracking device that is ideally suited for smartphones, tablets, wearable sensors, and IoT applications. Utilizing our handy Qwiic system, no soldering is required to connect it to the rest of your system. However, we still have broken out 0.1"-spaced pins in case you prefer to use a breadboard.

In addition to the 3-Axis Gyroscope with four selectable ranges, 3-Axis Accelerometer, again with four selectable ranges, and 3-axis magnetometer with an FSR to ±4900µT, the ICM-20948 also includes a Digital Motion Processor that offloads the computation of motion sensing algorithms from the detectors, allowing optimal performance of the sensors. We've also broken out all the ICM-20948 pin functionality to GPIO and labeled them I2C on the front, SPI on the back for ease of identification.

Note: The I2C address of the ICM-20948 is 0x69 and is jumper selectable to 0x68. A multiplexer/Mux is required to communicate to multiple ICM-20948 sensors on a single bus. If you need to use more than one ICM-20948 sensor consider using the Qwiic Mux Breakout.

The SparkFun Qwiic Connect System is an ecosystem of I2C sensors, actuators, shields and cables that make prototyping faster and less prone to error. All Qwiic-enabled boards use a common 1mm pitch, 4-pin JST connector. This reduces the amount of required PCB space, and polarized connections mean you can’t hook it up wrong.

Need a custom board? This component can be found in SparkFun's À La Carte board builder. You can have a custom design fabricated with this component - and your choice of hundreds of other sensors, actuators and wireless devices - delivered to you in just a few weeks.

  • 1.95 V to 3.6 V supply voltage
  • Triple-axis MEMS gyroscope with user-programmable full-scale range of ±250 dps, ±500 dps, ±1000 dps, and ±2000 dps
  • Triple-axis MEMS accelerometer with programmable full scale range of ±2g, ±4g, ±8g, and ±16g
  • Triple-axis silicon monolithic Hall-effect magnetic sensor with full scale measurement range to ±4900 µT
  • I2C at up to 100 kHz (standard-mode) or up to 400 kHz (fast-mode) or SPI at up to 7 MHz for communication with registers
  • On-board digital motion processor (DMP)
  • Digital-output temperature sensor
  • 2x Qwiic Connection Ports
  • I2C Address: 0x69 (0x68 with Jumper)

SparkFun 9DoF IMU Breakout - ICM-20948 (Qwiic) Product Help and Resources

SparkFun 9DoF IMU (ICM-20948) Breakout Hookup Guide

June 27, 2019

How to use the SparkFun 9DoF ICM-20948 breakout board for your motion sensing projects. This breakout is ideal for wearable sensors and IoT applications.

Qwiic SHIM Kit for Raspberry Pi Hookup Guide

February 16, 2021

Get started with the Serial LCD with RGB backlight and 9DoF IMU (ICM-20948) via I2C using the Qwiic system and Python on a Raspberry Pi! Take sensor readings and display them in the serial terminal or SerLCD.

Core Skill: Programming

If a board needs code or communicates somehow, you're going to need to know how to program or interface with it. The programming skill is all about communication and code.

2 Programming

Skill Level: Rookie - You will need a better fundamental understand of what code is, and how it works. You will be using beginner-level software and development tools like Arduino. You will be dealing directly with code, but numerous examples and libraries are available. Sensors or shields will communicate with serial or TTL.
See all skill levels

Core Skill: Electrical Prototyping

If it requires power, you need to know how much, what all the pins do, and how to hook it up. You may need to reference datasheets, schematics, and know the ins and outs of electronics.

2 Electrical Prototyping

Skill Level: Rookie - You may be required to know a bit more about the component, such as orientation, or how to hook it up, in addition to power requirements. You will need to understand polarized components.
See all skill levels


Looking for answers to technical questions?

We welcome your comments and suggestions below. However, if you are looking for solutions to technical questions please see our Technical Assistance page.

  • jremington / about 3 years ago / 2

    Mahony 3D fusion code for Arduino has been posted at complete with calibration code and example data. Works well, and does NOT use the poorly documented DMP (uses raw sensor data only). Careful calibration is required!

    Happy to entertain questions or hear about bugs!

  • Col.Angus / about 3 years ago / 2

    Has anyone actually successfully used the device? The DMP example (Example7_DMP_Quat6_EulerAngles) will slowly wander off in roll, pitch and yaw without touching the sensor. Is there an update?

  • Member #1608799 / about 3 years ago / 1

    Is there any plan to make more example code for Python just like Arduino version?

  • Member #1668228 / about 3 years ago / 1

    Hi there. Can you tell me why you shift down to 1.8V? Is it to make it compatible with 5V devices?

  • Member #1538778 / about 4 years ago / 1

    Does this contain unfiltered Acclerometer and Magnetometer data?

    • Liquid Soulder / about 4 years ago / 1

      Yes, you can access the raw readings from the device with or without filtering depending on how you configure the sensor.

  • Rojabuma / about 4 years ago / 1

    How could this be used to control a computer mouse, or for gesture based input commands?

    • santaimpersonator / about 4 years ago / 1

      You can also check out this blog post. It uses a different microcontroller and IMU, but the principle is the same.

    • Liquid Soulder / about 4 years ago / 1

      To control a mouse I would recommend using the ICM with a Teensy - they have a good HID USB library that includes mouse examples. Then you can use the ICM data to informt he mouse movements

      Depending on what you want from gesture commands and how much effort you want to put into this you might be able to adapt the 'magic wand' example from TensorFlow for your own platform and to use data from the ICM.

  • jalbob / about 4 years ago / 1

    Not sure if this was a conscious decision or not, but it looks like you guys have routed a couple of traces underneath the ICM-20948 package on this breakout board. The manufacturing recommendations posted by Invensense advise against putting any traces our vias directly underneath the die package for this chip. I'm guessing it affects the calibration of the magnetometers.

    • santaimpersonator / about 4 years ago / 1

      I am gonna guess it was because of how compact the board had to be.

  • Member #850545 / about 5 years ago / 1

    Is it possible to collect the quaternions or euler angles from the device? Or will the sensor values have to be fused after collecting the data? The example code only appears to only output calibrated and non-calibrated sensor accel, gyro, and mag data.

    • Liquid Soulder / about 5 years ago / 1

      It should be possible to get pre-computed quaternions (and perhaps euler angles but I haven't seen as much reference to this) using the Digital Motion Processor feature of the ICM-20948. Unfortunately the license agreement for Invensense software is strict enough that we cannot share DMP code or derivative works. What you may do, however, is to agree to the license yourself and use sample code available at the Invensense Developer's Corner. There you will find a lot more example code that may be of use.

  • Member #328398 / about 5 years ago / 1

    Does the board need to be calibrated? Does it have less drift than less sophisticated gyros? The example code is useful but doesn't really touch on these practical aspects.

Customer Reviews

4.2 out of 5

Based on 6 ratings:

Currently viewing all customer reviews.

1 of 1 found this helpful:

Works Well

I bought two of these and they both work really well. I'm using the gyroscope to control a mouse and am impressed with the accuracy from the chip. I did had an issue combining this board with another I2C device when using the basic example. Switching to the advanced example (which included additional configuration) resolved this issue. The qwiic connect ports make this an easy device to prototype with.

1 of 1 found this helpful:

Great breakout board of a great IMU

I bought three of these for a project and they all perform nicely. The datasheet provides information for basic operation; initializing, calibration and settings, reading sensor data etc. Wasn't able to get the DMP working, however. InvenSense doesn't provide information on the DMP to just anyone I guess. Very capable little device and easy to hook up with the Qwiic connectors. Thanks!

1 of 1 found this helpful:

best imu

The connectors are wonderful. The update rate of the imu is fast and with the library I read euler angles pretty fast. It will work very well on my diy quadcopter.

2 of 6 found this helpful:

Absolutely Worthless

This works worse than the Ebay 6050 Gyroscope for $5. The x,y,z data have massive spikes even though the unit is at rest. I researched this and Sprkfun has no solution. Ill try to return it but do yourself a favor and do not purchase this.

Sorry to hear you're having trouble! Please contact our technical assistance team for help resolving your issue.

1 of 3 found this helpful:

Networked Control Computer Architect & Engineer

Just starting to use part. The software documentation is pretty poor. The base interface is in C but it seems to be primarily oriented toward Arduino CPP. Since I need just C, it was a chore digging out the C interfaces needed. Each C function should have a description and good comments as to what the sub-function are doing. The interface to the IMC-20948 is complicated, but the interface software should make it simple so that the details for setting up the modes do not need to be seen or understood bu the application programmer. All I really wanted to do was initialize the thing and get magnetometer readings from it. Interfacing to the software should be as simple as interfacing to the hardware unit.

Awsome Fun Learning

I like these things because I like to try to make them work with my own programs. I use Python3, not using the canned SPI software, which is difficult for me to understand. Making it yourself takes digging deep into the docs, but the satisfaction at the end is well worth the trouble. Since I cannot create my own circuit boards, I love it the SparkFun makes these for me. Thanks SparkFun. Keep it up. If any of you would like my small, simple Python script to make this work, drop me a line at