BNO055 BMP280 Sensors
This module combines two sensors on a single board:
- BNO055: 9-DOF absolute orientation sensor (accelerometer, gyroscope, magnetometer) with on-board sensor fusion.
- BMP280: high-precision barometric pressure and temperature sensor.
Perfect for robotics, inertial navigation, drones, environmental monitoring and IoT projects.
Features
-
BNO055
Feature Description On-chip sensor fusion quaternions
,Euler angles
,gravity vectors
, etc.Accelerometer ranges ±2/4/8/16 g Gyroscope ranges ±125/250/500/1000/2000 °/s Magnetometer ranges ±1.3/1.9/2.5/4.0/4.7/5.6/8.1 gauss Protocol I²C
,UART
(select via PS0/PS1) -
BMP280
Feature Description Pressure range 300…1100 hPa (±10…+1 m) Temperature accuracy ±1 °C Protocol I²C
,UART
,SWD
Module Applications
Application | Description |
---|---|
📈 Portable weather station | Measures temperature, humidity, and pressure accurately. |
🪂 Altimeter / variometer | Calculates altitude based on atmospheric pressure. |
🧍 Posture tracking | Detects body tilt or rotation. |
🛰️ Inertial navigation | Tracks movement and orientation without GPS. |
🕹️ Augmented / virtual reality | Provides orientation for 3D environments. |
🚁 Flight controller | Stabilization for drones or robots. |
🤖 Gesture interface | Uses motion to control devices. |
🌐 IoT environmental logging | Collects and transmits environmental conditions. |
Example Code
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>
#include <Adafruit_BMP280.h>
#include <utility/imumaths.h>
// BNO055: orientación y movimiento
Adafruit_BNO055 bno(55, 0x28, &Wire);
// BMP280: temperatura y presión
Adafruit_BMP280 bmp;
Adafruit_Sensor* bmp_temp = bmp.getTemperatureSensor();
Adafruit_Sensor* bmp_pressure = bmp.getPressureSensor();
void setup() {
Serial.begin(115200);
while (!Serial);
// Inicializar BNO055
if (!bno.begin()) {
Serial.println("{\"error\":\"BNO055 not detected\"}");
while (1);
}
delay(1000); // Estabilizar BNO055
// Inicializar BMP280 en dirección 0x76
if (!bmp.begin(0x76)) {
Serial.println("{\"error\":\"BMP280 not detected at 0x76\"}");
while (1);
}
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,
Adafruit_BMP280::SAMPLING_X2,
Adafruit_BMP280::SAMPLING_X16,
Adafruit_BMP280::FILTER_X16,
Adafruit_BMP280::STANDBY_MS_500);
}
void loop() {
// Eventos del BNO055
sensors_event_t orientation, gyro, linearAccel, magnetometer, accel, gravity;
bno.getEvent(&orientation, Adafruit_BNO055::VECTOR_EULER);
bno.getEvent(&gyro, Adafruit_BNO055::VECTOR_GYROSCOPE);
bno.getEvent(&linearAccel, Adafruit_BNO055::VECTOR_LINEARACCEL);
bno.getEvent(&magnetometer, Adafruit_BNO055::VECTOR_MAGNETOMETER);
bno.getEvent(&accel, Adafruit_BNO055::VECTOR_ACCELEROMETER);
bno.getEvent(&gravity, Adafruit_BNO055::VECTOR_GRAVITY);
// BMP280: temperatura y presión
sensors_event_t temp_event, pressure_event;
bmp_temp->getEvent(&temp_event);
bmp_pressure->getEvent(&pressure_event);
// Calibración BNO055
int8_t temp_bno = bno.getTemp();
uint8_t sys, gyroCal, accelCal, magCal;
bno.getCalibration(&sys, &gyroCal, &accelCal, &magCal);
// JSON OUTPUT
Serial.print("{");
// BMP280
Serial.print("\"bmp280\":{\"temperature\":"); Serial.print(temp_event.temperature, 2);
Serial.print(",\"pressure\":"); Serial.print(pressure_event.pressure, 2); Serial.print("},");
// BNO055 - orientación
Serial.print("\"orientation\":{\"x\":"); Serial.print(orientation.orientation.x, 2);
Serial.print(",\"y\":"); Serial.print(orientation.orientation.y, 2);
Serial.print(",\"z\":"); Serial.print(orientation.orientation.z, 2); Serial.print("},");
// BNO055 - giroscopio
Serial.print("\"gyroscope\":{\"x\":"); Serial.print(gyro.gyro.x, 2);
Serial.print(",\"y\":"); Serial.print(gyro.gyro.y, 2);
Serial.print(",\"z\":"); Serial.print(gyro.gyro.z, 2); Serial.print("},");
// BNO055 - aceleración lineal
Serial.print("\"linear_accel\":{\"x\":"); Serial.print(linearAccel.acceleration.x, 2);
Serial.print(",\"y\":"); Serial.print(linearAccel.acceleration.y, 2);
Serial.print(",\"z\":"); Serial.print(linearAccel.acceleration.z, 2); Serial.print("},");
// BNO055 - magnetómetro
Serial.print("\"magnetometer\":{\"x\":"); Serial.print(magnetometer.magnetic.x, 2);
Serial.print(",\"y\":"); Serial.print(magnetometer.magnetic.y, 2);
Serial.print(",\"z\":"); Serial.print(magnetometer.magnetic.z, 2); Serial.print("},");
// BNO055 - aceleración total
Serial.print("\"acceleration\":{\"x\":"); Serial.print(accel.acceleration.x, 2);
Serial.print(",\"y\":"); Serial.print(accel.acceleration.y, 2);
Serial.print(",\"z\":"); Serial.print(accel.acceleration.z, 2); Serial.print("},");
// BNO055 - gravedad
Serial.print("\"gravity\":{\"x\":"); Serial.print(gravity.acceleration.x, 2);
Serial.print(",\"y\":"); Serial.print(gravity.acceleration.y, 2);
Serial.print(",\"z\":"); Serial.print(gravity.acceleration.z, 2); Serial.print("},");
// Temperatura interna y calibración
Serial.print("\"bno055_temp\":"); Serial.print(temp_bno); Serial.print(",");
Serial.print("\"calibration\":{\"sys\":"); Serial.print(sys);
Serial.print(",\"gyro\":"); Serial.print(gyroCal);
Serial.print(",\"accel\":"); Serial.print(accelCal);
Serial.print(",\"mag\":"); Serial.print(magCal); Serial.print("}");
Serial.println("}");
delay(500);
}