BNO085 / BNO08x 9-axis orientation sensor with ESP32

Supply 3.3-5 V Bus I2C I2C address 0x4A / 0x4B Measures orientation, acceleration, rotation, magnetic field
VIN3VOGNDSCLSDAINTRSTCSDIP0P1BT

Pins and ESP32 wiring

PinRoleESP32 pinNotes
VINPower3V3Adafruit-style pin order. Other BNO08x boards differ: check the silkscreen
3VONot wired to the ESP32—Output of the on-board 3.3 V regulator. Leave unconnected
GNDGroundGND
SCLI2C clock (SCL)D22
SDAI2C data (SDA)D21
INTInterruptD35LOW when the sensor has data. Recommended
RSTInput (the ESP32 drives it)D25Reset, active LOW. Recommended
CSNot wired to the ESP32—SPI chip select. Leave unconnected or HIGH for I2C
DINot wired to the ESP32—SPI data in / address select in I2C mode. Leave unconnected for 0x4A
P0Not wired to the ESP32—Protocol select. Leave LOW for I2C
P1Not wired to the ESP32—Protocol select. Leave LOW for I2C
BTNot wired to the ESP32—Boot pin. Leave unconnected

Suggested wiring for the 30-pin ESP32 DevKit, avoiding flash, input-only and strapping pins. BoardPilot checks it for you as you wire.

Starter code (Arduino)

#include <Wire.h>

void setup() {
  Serial.begin(115200);
  Wire.begin(21, 22);  // SDA = GPIO 21, SCL = GPIO 22
  Wire.beginTransmission(0x4A);
  bool found = Wire.endTransmission() == 0;
  Serial.println(found ? "BNO085 / BNO08x 9-axis orientation sensor found at 0x4A" : "Not found: check power, GND and SDA/SCL");
}

void loop() {}

Sources

Try it in 3D in BoardPilot

BoardPilot Part data (JSON)

Related parts

Part data: CC BY 4.0, free to reuse with credit to BoardPilot.