Overview

The BNO055 is a 9-degree-of-freedom (9-DOF) System in Package (SiP) orientation sensor manufactured by Bosch Sensortec. It integrates a 3-axis 14-bit accelerometer, a 3-axis 16-bit gyroscope, a 3-axis geomagnetic sensor, and an internal 32-bit ARM Cortex-M0+ microcontroller running Bosch's BSX3.0 FusionLib sensor fusion software.

Unlike traditional raw IMUs (such as MPU6050) that require complex external Kalman filtering software on the host MCU, the BNO055 processes raw sensor signals onboard and outputs absolute orientation directly in Quaternions, Euler angles (Heading, Roll, Pitch), or Rotation Matrices.

Quick reference

Module VCC3.3 V to 5.0 V DC (onboard LDO)
Chip VDD / VDDIO2.4 V to 3.6 V DC
Degrees of Freedom (DOF)9-DOF (3-axis Accel + 3-axis Gyro + 3-axis Magnetometer)
Onboard Coprocessor32-bit ARM Cortex-M0+ running BSX3.0 sensor fusion algorithm
Direct Output DataQuaternions, Euler Angles, Rotation Matrix, Gravity Vector, Linear Accel
Communication interfacesI2C (default 0x28 or 0x29, up to 400 kHz), UART
Active current draw12.5 mA (Fusion Mode), 40 µA (Suspend Mode)

Pinout

Standard BNO055 Breakout Header

PinNameTypeDescription
1VINPowerSupply voltage (+3.3 V to +5.0 V DC)
23VOPower OutputRegulated +3.3 V output from onboard LDO
3GNDPowerGround (0 V)
4SDADigital I/OI2C Serial Data line
5SCLDigital InputI2C Serial Clock line (Requires I2C Clock Stretching!)
6RSTDigital InputActive-LOW Hardware Reset pin
7ADRDigital InputI2C Address select (LOW = 0x28, HIGH = 0x29)
8INTDigital OutputInterrupt output pin
9PS0Digital InputProtocol Select pin 0 (LOW for I2C)
10PS1Digital InputProtocol Select pin 1 (LOW for I2C)

Specifications

ParameterSymbolMinTypMaxUnitConditions
Supply VoltageVDDV_{DD}2.43.03.6VDC
Operating Current (NDOF)IDDI_{DD}12.515.0mAFull 9-DOF sensor fusion mode
Suspend CurrentIsuspI_{susp}4050µASuspend mode
Accel RangeFSaccFS_{acc}±2\pm 2±16\pm 16gProgrammable
Gyro RangeFSgyroFS_{gyro}±125\pm 125±2000\pm 2000°/sProgrammable
Mag Field RangeFSmagFS_{mag}±1300\pm 1300µTMicrotesla
Euler Angle ResolutionRESeulerRES_{euler}0.0625°1/16 degree per LSB1/16\text{ degree per LSB}
Quaternion ResolutionRESquatRES_{quat}1/16384LSBUnit quaternion

Operating modes & Register map

Key Operating Modes (OPR_MODE Register 0x3D)

Mode HexMode NameDescription
0x00CONFIGMODEConfiguration Mode (Required to modify sensor settings)
0x08IMU6-DOF fusion (Accel + Gyro; relative orientation, fast)
0x0BNDOF_FMC_OFF9-DOF fusion without Fast Magnetometer Calibration
0x0CNDOFFull 9-DOF absolute orientation fusion (Euler / Quaternion)

Key Output Registers (Page 0)

AddressRegisterDescription
0x00CHIP_IDReads 0xA0 (BNO055 identification byte)
0x1A..0x1FEUL_HEADING / ROLL / PITCHRead Euler angles (1 LSB=1/161\text{ LSB} = 1/16^\circ)
0x20..0x27QUA_DATA_W..ZRead 16-bit Quaternion vector (w,x,y,zw, x, y, z)
0x35GRV_DATAGravity Vector output (1 LSB=1 m/s21\text{ LSB} = 1\text{ m/s}^2)
0x39SYS_STATUSSystem status code
0x35CALIB_STATCalibration status byte (Bits [7:6] Sys, [5:4] Gyro, [3:2] Accel, [1:0] Mag)

Wiring

BNO055 Breakout PinMicrocontroller (Arduino Uno / ESP32)
VIN5V (or 3.3V)
GNDGND
SDASDA (A4 on Uno, GPIO21 on ESP32)
SCLSCL (A5 on Uno, GPIO22 on ESP32)
ADRGND (for default I2C address 0x28)
Warning

Requires I2C Clock Stretching Support: The BNO055 internal Cortex-M0+ processor uses I2C Clock Stretching while processing sensor fusion calculations. Some microcontrollers (such as ESP8266 or early Raspberry Pi hardware I2C drivers) do not handle clock stretching properly. Use software I2C (bit-banging) or adjust clock speeds if I2C read timeouts occur.

Common mistakes

  • Not waiting for sensor calibration: On cold boot, the internal fusion engine reports calibration status 0 for system, gyro, accel, and mag. Perform a "figure-8" movement in air to calibrate the magnetometer and achieve CALIB_STAT = 0xFF (3/3 calibration across all sensors).
  • Modifying registers while in NDOF fusion mode: Register changes (like changing units or axis mapping) are IGNORED unless the chip is first placed into CONFIGMODE (0x00).
  • Ignoring I2C Clock Stretching: If the host MCU forces I2C clock cycles without monitoring SCL stretching, data bytes will be corrupted.

Notes

  • Euler angles suffer from Gimbal Lock at ±90\pm 90^\circ pitch. For 3D orientation in 360° space, always use 4-element Quaternions (QUA_DATA).

Assets & downloads