

The GY-BNO08X is an advanced Inertial Measurement Unit (IMU) that integrates a 3-axis accelerometer, 3-axis gyroscope, and 3-axis magnetometer. It features a built-in sensor fusion algorithm, enabling it to provide highly accurate orientation, heading, and motion data. This makes it an ideal choice for applications requiring precise motion tracking and spatial awareness.








The GY-BNO08X is a versatile IMU with the following key specifications:
| Parameter | Value |
|---|---|
| Operating Voltage | 3.3V - 5V |
| Communication Protocols | I2C, SPI, UART |
| Accelerometer Range | ±2g, ±4g, ±8g, ±16g |
| Gyroscope Range | ±125°/s, ±250°/s, ±500°/s, ±1000°/s, ±2000°/s |
| Magnetometer Range | ±4900 µT |
| Orientation Output | Quaternion, Euler angles |
| Operating Temperature | -40°C to +85°C |
| Dimensions | 15mm x 15mm |
The GY-BNO08X module has the following pinout:
| Pin | Name | Description |
|---|---|---|
| 1 | VIN | Power input (3.3V - 5V) |
| 2 | GND | Ground |
| 3 | SDA | I2C data line |
| 4 | SCL | I2C clock line |
| 5 | INT | Interrupt pin (optional, for data-ready signal) |
| 6 | PS0 | Protocol selection (connect to GND for I2C) |
| 7 | PS1 | Protocol selection (connect to GND for I2C) |
| 8 | RST | Reset pin (active low) |
To use the GY-BNO08X with an Arduino UNO, follow these steps:
Below is an example Arduino sketch to read orientation data from the GY-BNO08X using I2C:
#include <Wire.h>
#include <Adafruit_BNO08x.h>
// Create an instance of the BNO08X sensor
Adafruit_BNO08x bno08x;
// Define the I2C address of the GY-BNO08X
#define BNO08X_I2C_ADDRESS 0x4A
void setup() {
Serial.begin(115200); // Initialize serial communication for debugging
Wire.begin(); // Initialize I2C communication
// Initialize the BNO08X sensor
if (!bno08x.begin_I2C(BNO08X_I2C_ADDRESS)) {
Serial.println("Failed to initialize BNO08X! Check connections.");
while (1); // Halt execution if initialization fails
}
Serial.println("BNO08X initialized successfully!");
// Enable orientation reporting
if (!bno08x.enableReport(SH2_ARVR_STABILIZED_RV)) {
Serial.println("Failed to enable orientation reporting!");
while (1); // Halt execution if enabling fails
}
}
void loop() {
// Check if new orientation data is available
if (bno08x.getEvent()) {
// Retrieve quaternion data
sh2_SensorValue_t sensorValue = bno08x.getSensorValue();
float qw = sensorValue.un.arvrStabilizedRV.real;
float qx = sensorValue.un.arvrStabilizedRV.i;
float qy = sensorValue.un.arvrStabilizedRV.j;
float qz = sensorValue.un.arvrStabilizedRV.k;
// Print quaternion data to the serial monitor
Serial.print("Quaternion: ");
Serial.print("qw = "); Serial.print(qw, 4);
Serial.print(", qx = "); Serial.print(qx, 4);
Serial.print(", qy = "); Serial.print(qy, 4);
Serial.print(", qz = "); Serial.println(qz, 4);
}
delay(100); // Delay to reduce output frequency
}
The sensor is not detected on the I2C bus.
Orientation data is inaccurate or unstable.
The Arduino sketch fails to initialize the sensor.
0x4A.Adafruit_BNO08x) is installed and included.