BNO055 9-DOF Absolute Orientation Sensor

The bno055 sensor platform allows you to use your BNO055 9-DOF Absolute Orientation Sensor (datasheet, Adafruit) with ESPHome. The I2C Bus is required to be set up in your configuration for this sensor to work.

The BNO055 is unique in that it features an onboard ARM Cortex-M0 processor that performs sensor fusion, combining data from the accelerometer, gyroscope, and magnetometer to provide absolute orientation outputs including Euler angles and quaternions. This removes the complexity of implementing sensor fusion algorithms on the microcontroller.

# Minimal configuration entry
sensor:
  - platform: bno055
    euler_heading:
      name: "BNO055 Heading"
    euler_roll:
      name: "BNO055 Roll"
    euler_pitch:
      name: "BNO055 Pitch"
# Full configuration entry with all sensors
sensor:
  - platform: bno055
    address: 0x29
    update_interval: 1s
    # Euler angles (absolute orientation)
    euler_heading:
      name: "BNO055 Heading"
    euler_roll:
      name: "BNO055 Roll"
    euler_pitch:
      name: "BNO055 Pitch"
    # Quaternion (absolute orientation)
    quaternion_w:
      name: "BNO055 Quaternion W"
    quaternion_x:
      name: "BNO055 Quaternion X"
    quaternion_y:
      name: "BNO055 Quaternion Y"
    quaternion_z:
      name: "BNO055 Quaternion Z"
    # Linear acceleration (without gravity)
    linear_accel_x:
      name: "BNO055 Linear Accel X"
    linear_accel_y:
      name: "BNO055 Linear Accel Y"
    linear_accel_z:
      name: "BNO055 Linear Accel Z"
    # Gravity vector
    gravity_x:
      name: "BNO055 Gravity X"
    gravity_y:
      name: "BNO055 Gravity Y"
    gravity_z:
      name: "BNO055 Gravity Z"
    # Raw accelerometer
    accel_x:
      name: "BNO055 Accel X"
    accel_y:
      name: "BNO055 Accel Y"
    accel_z:
      name: "BNO055 Accel Z"
    # Gyroscope
    gyro_x:
      name: "BNO055 Gyro X"
    gyro_y:
      name: "BNO055 Gyro Y"
    gyro_z:
      name: "BNO055 Gyro Z"
    # Magnetometer
    mag_x:
      name: "BNO055 Mag X"
    mag_y:
      name: "BNO055 Mag Y"
    mag_z:
      name: "BNO055 Mag Z"
    # Temperature
    temperature:
      name: "BNO055 Temperature"

Configuration variables

Euler Angles (Absolute Orientation)

  • euler_heading (Optional): Heading angle in degrees (0-360). All options from Sensor.
  • euler_roll (Optional): Roll angle in degrees. All options from Sensor.
  • euler_pitch (Optional): Pitch angle in degrees. All options from Sensor.

Quaternion (Absolute Orientation)

  • quaternion_w (Optional): Quaternion W component. All options from Sensor.
  • quaternion_x (Optional): Quaternion X component. All options from Sensor.
  • quaternion_y (Optional): Quaternion Y component. All options from Sensor.
  • quaternion_z (Optional): Quaternion Z component. All options from Sensor.

Linear Acceleration (Gravity Removed)

  • linear_accel_x (Optional): Linear acceleration X-axis in m/s². All options from Sensor.
  • linear_accel_y (Optional): Linear acceleration Y-axis in m/s². All options from Sensor.
  • linear_accel_z (Optional): Linear acceleration Z-axis in m/s². All options from Sensor.

Gravity Vector

  • gravity_x (Optional): Gravity vector X-axis in m/s². All options from Sensor.
  • gravity_y (Optional): Gravity vector Y-axis in m/s². All options from Sensor.
  • gravity_z (Optional): Gravity vector Z-axis in m/s². All options from Sensor.

Raw Accelerometer

  • accel_x (Optional): Raw acceleration X-axis in m/s². All options from Sensor.
  • accel_y (Optional): Raw acceleration Y-axis in m/s². All options from Sensor.
  • accel_z (Optional): Raw acceleration Z-axis in m/s². All options from Sensor.

Gyroscope

  • gyro_x (Optional): Angular velocity X-axis in degrees/s. All options from Sensor.
  • gyro_y (Optional): Angular velocity Y-axis in degrees/s. All options from Sensor.
  • gyro_z (Optional): Angular velocity Z-axis in degrees/s. All options from Sensor.

Magnetometer

  • mag_x (Optional): Magnetic field X-axis in microtesla (µT). All options from Sensor.
  • mag_y (Optional): Magnetic field Y-axis in microtesla (µT). All options from Sensor.
  • mag_z (Optional): Magnetic field Z-axis in microtesla (µT). All options from Sensor.

Other

  • temperature (Optional): Internal temperature of the sensor in Celsius. All options from Sensor.
  • address (Optional, int): Manually specify the I2C address of the sensor. Defaults to 0x29. The alternative address is 0x28.
  • update_interval (Optional, Time): The interval to check the sensor. Defaults to 1s.
  • id (Optional, ID): Manually specify the ID used for code generation.

ESP32 I2C Considerations

The BNO055 uses I2C clock stretching, which can cause issues on some ESP32 variants. If you experience communication problems, try reducing the I2C frequency to 50kHz:

i2c:
  sda: GPIO21
  scl: GPIO22
  frequency: 50kHz

Calibration

The BNO055 performs automatic calibration during operation. For best results:

  1. Gyroscope: Keep the sensor still for a few seconds after power-on.
  2. Magnetometer: Move the sensor in a figure-8 pattern to calibrate.
  3. Accelerometer: Place the sensor in multiple orientations (e.g., all 6 faces of a cube).

The sensor fusion algorithm (NDOF mode) requires all three sensors to be calibrated for optimal absolute orientation output.

See Also