MetaWear CPro boards have a BMM150 geomagnetic sensor for sensing magnetic fields. Functions communicating with the magnetometer are defined in the magnetometer_bmm150.h.

Power Modes

The BMM150 magnetometer has 4 recommended power modes:

Setting ODR Average Current Noise
LOW_POWER 10Hz 170µA 1.0µT (xy axis), 1.4µT (z axis)
REGULAR 10Hz 0.5mA 0.6µT
HIGH_ACCURACY 20Hz 4.9mA 0.3µT

Constants identifying these power modes are defined by the MblMwMagBmm150PowerPreset enum. For most use cases, MWL_MW_MAG_BMM_150_PP_LOW_POWER is the recommended power mode.

#include "metawear/sensor/magnetometer_bmm150.h"

void setup_magnetometer(MblMwMetaWearBoard* board) {
    // Use low power mode
    mbl_mw_mag_bmm150_set_power_preset(board, MWL_MW_MAG_BMM_150_PP_LOW_POWER);

B Field Sampling

B field sampling measures the magnetic field strength for the XYZ directions. To enable B field sampling, call mbl_mw_mag_bmm150_enable_b_field_sampling before starting the magnetometer.

Field strength is represented by the MblMwCartesianFloat struct and is in units of micro Teslas (µT). The x, y, and z fields contain the B field strength in that direction.

#include "metawear/core/datasignal.h"
#include "metawear/core/types.h"

#include "metawear/sensor/magnetometer_bmm150.h"

void bfield_stream(MblMwMetaWearBoard* board) {
    static auto data_handler = [](const MblMwData* data) -> void {
        // Cast value to MblMwCartesianFloat*
        auto bfield = (MblMwCartesianFloat*) data->value;
        printf("(%.3f, %.3f, %.3f)uT\n", bfield ->x, bfield->y, bfield->z);

    auto bfield_signal = mbl_mw_mag_bmm150_get_b_field_data_signal(board);
    mbl_mw_datasignal_subscribe(bfield_signal, data_handler);