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 is0x28. - 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: 50kHzCalibration
The BNO055 performs automatic calibration during operation. For best results:
- Gyroscope: Keep the sensor still for a few seconds after power-on.
- Magnetometer: Move the sensor in a figure-8 pattern to calibrate.
- 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.