BMM150 3-Axis Magnetometer Sensor
| ||
Overview
Introduction
The BMM150 serves as a 3-axis magnetometer sensor featuring ultra-small form factor, less power consumption and lower noise. Ideal for a variety of altitude-tracking applications, this high-performance sensor also supports I2C/SPI interfaces, and is compatible with 3.3V/5V. It can be easily integrated into projects such as GPS modules, wearables devices, audible devices, and drones, and is suitable for applications such as accurate altimeters, environment monitoring, and IoT projects.
Feature
- Support I2C/SPI interface communication, I2C interface by default.
- Onboard voltage translator, compatible with 3.3V/5V operating voltage.
- Provide online user manuals and resources (Raspberry/Arduino/pico demo and manual).
Parameters
- Operating voltage: 5V/3.3V
- Communication interface: I2C/SPI
- Resolution: 0.3μT
- Linearity: <1%FS
- Gain error: ±2%
- Temperature drift sensitivity: ±0.01%/K
- Zero point drift: ±40μT (25℃)
- Measuring range: ±1300μT (x,y-axis), ±2500μT (z-axis)
- Data output rate: 10Hz (normal mode: Regular preset)
- Operating temperature: -40~85℃
- Dimensions: 29mm × 20mm
Interface Description
Pin | Description |
VCC | Power input |
GND | GND |
SDA | I2C data |
SCL | I2C clock |
INT | Interrupt output, can be connected to I/O |
SDO | SPI data, can be connected to the host MISO |
SDI | SPI data, can be connected to the host MOSI |
CS | Chip selection, can be connected to I/O |
DRY | Data sending/receiving ready state, can be connected to I/O |
Working with Raspberry Pi
Function Library Installation
- Install wiringPi:
sudo apt-get install wiringpi #For the Raspberry Pi 4B it may be necessary to upgrade: wget https://project-downloads.drogon.net/wiringpi-latest.deb sudo dpkg -i wiringpi-latest.deb gpio -v # Run gpio -v and version 2.52 will appear, if it does not appear, it means there is an installation error
Preparation
Run the commands below to configure the Raspberry Pi:
sudo raspi-config
Choose Interfacing Options -> I2C -> Yes to enable the I2C kernel driver.
Choose Interfacing Options -> SPI -> Yes to enable the SPI kernel driver.
Save and then exit, reboot the Raspberry Pi:
sudo reboot
After rebooting, check whether SPI can be normally enabled:
ls /dev/spi*
WiringPi Demo
Download the example demo and unzip:
sudo apt-get update sudo apt-get unzip wget https://files.waveshare.com/upload/6/67/BMM150_3-Axis_Magnetometer_Sensor_code.zip unzip BMM150_3-Axis_Magnetometer_Sensor_code.zip
I2C
Module | Raspberry Pi |
VCC | 3.3V/5V |
GND | GND |
SDA | SDA |
SCL | SCL |
INT | NC |
- Check the connection:
i2cdetect -y 1
The I2C address of the module is 0x13 and can be modified by changing the level of A0/SD0 and A1/CS. Then you can modify it in the corresponding bmm150_common.c
code.
/*! @name I2C ADDRESS */ #define BMM150_DEFAULT_I2C_ADDRESS UINT8_C(0x10) #define BMM150_I2C_ADDRESS_CSB_LOW_SDO_HIGH UINT8_C(0x11) #define BMM150_I2C_ADDRESS_CSB_HIGH_SDO_LOW UINT8_C(0x12) #define BMM150_I2C_ADDRESS_CSB_HIGH_SDO_HIGH UINT8_C(0x13)
- Enter the I2C directory, compile, and then run the demo:
cd cd BMM150_3-Axis_Magnetometer_Sensor_code/RaspberryPi/I2C
- Run the demo:
make clean make sudo ./bmm150
- The data is displayed as shown below:
Wait for a while to get stable data. From left to right, the magnetic inductance measured by BMM150 in X, Y, and Z axes is shown.
SPI
The module is in I2C mode by default and you can change to SPI mode in the left upper corner when selecting the pad.
Module | Raspberry Pi |
VCC | 3.3V |
GND | GND |
SDO | MISO |
SDI | MOSI |
SCK | SCLK |
CS | 27 (wiringPi code) |
- Enter the SPI directory to compile and run the demo:
cd cd BMM150_3-Axis_Magnetometer_Sensor_code/RaspberryPi/SPI
- Run the demo:
make clean make sudo ./bmm150
- The data is displayed below:
After waiting for a minute, you can get stable data. From left to right, the magnetic inductance measured by the BMM150 in the X, Y, and Z axes is shown.
Python
Module | Raspberry Pi |
VCC | 3.3V/5V |
GND | GND |
SDA | SDA |
SCL | SCL |
INT | NC |
- Check the connection:
i2cdetect -y 1
Enter the Python demo file and run it:
cd RaspberryPi/python sudo python get_geomagnetic_data.py
And then you can get the data:
Wait for a while to get stable data. The module displays the measured magnetic induction intensity of the three axes in sequence.
Working with Arduino
I2C
- Connect the module to the Arduino development board as shown below:
Module | Arduino |
VCC | 5V |
GND | GND |
SDA | SDA |
SCL | SCL |
INT | NC |
- After correctly connecting and checking the communication way and device address, you can compile and download to Arduino.
- Open Tool -> SSCOM, choose the baud rate as 115200, and you can get the following information:
Wait for a while to get stable data. From left to right, the magnetic inductance measured by BMM150 in X, Y, and Z axes are shown.
If the data is not displayed successfully, or if the data is not displayed properly, please check the connection, communication method, and device address for errors.
SPI
The module defaults to I2C mode and can be switched to SPI mode by modifying the mode selection pads in the upper left corner.
Module | Arduino |
VCC | 3.3V |
GND | GND |
SDO | 12 |
SDI | 11 |
SCK | 13 |
CS | 10 |
- After wiring the device correctly and determining the communication method and the device address, open the corresponding demo for Arduino, make sure the macro definition USE_I2C is 0 in the program, compile it, and download it to the Arduino development board.
- Open Tools -> Serial Monitor, and select baud rate 115200, you can get the following information.
Wait for a while to get stable data. From left to right, the magnetic inductance measured by BMM150 in X, Y, and Z axes is shown.
If the data is not displayed successfully, or if the data is not displayed properly, please check the connection, communication method, and device address for errors.
ESP32
ESP32-S3-DEV-KIT-N8R8 development board is used in this demo.
I2C
- Connect the module to the ESP32 development board as shown below:
Module | ESP32 |
VCC | 5V |
GND | GND |
SDA | 13 |
SCL | 14 |
INT | NC |
- After ensuring correct wiring, select the communication method, and the device address, open the corresponding demo for ESP32. Confirm that the macro definition "USE_I2C" is set to 1, compile it, and download it to Arduino.
- Open Tools -> Serial Monitor, and select baud rate as 115200, you can get the following information.
Wait for a while to get stable data. From left to right, the magnetic inductance measured by BMM150 in X, Y, and Z axes is shown.
If the data is not displayed successfully, or if the data is not displayed properly, please check the connection, communication method, and device address for errors.
SPI
The module defaults to I2C mode, and you can switch to SPI mode by modifying the solder pads at the upper-left corner.
Module | ESP32-S3 |
VCC | 5V |
GND | GND |
SDO | 10 |
SDI | 11 |
SCK | 9 |
CS | 12 |
- Wire the devices correctly, select the communication method and the device address. Then, open the corresponding demo of ESP32, make sure the macro definition USE_I2C is 0, compile, and download it to ESP32.
- Open Tools -> Serial Monitor, select baud rate as 115200, and you can get the following information:
Wait for a while, the data will stably output. From left to right, the magnetic inductance measured by BMM150 in X, Y, and Z axes is shown.
If the data is not displayed successfully, or if the data is not displayed properly, please check the connection, communication method, and device address for errors.
Working with Raspberry Pi Pico
Software Preparation
Install Thonny
Program MicroPython Firmware
- Online installation: the newest Thonny version can automatically download the firmware.
- First, you need to press and hold the boot button on the Pico while connecting the Pico to the PC using the USB cable.
- After that, open Thonny and click Tool -> Options... -> Interpretere -> Install or update MicroPython.
- In the pop-up window, select the corresponding development board and MicorPython version, and click Install, then wait for the installation to finish.
If the software installation MicroPython window keeps prompting downloading variants info... and there is no change for a long time, you can choose to use a proxy or use the following offline installation method instead.
- Off-line installation method:
- Download the firmware and get a .uf2 file.
- Press the boot button on the Pico, connect the Pico to the PC with a USB cable, and then a USB storage device appears on the computer.
- Open the device folder, and drag the ".uf2" file directly into the folder. After that, the storage device automatically popped up, and the development board reboots, at this time the installation is finished. You can open Thonny to see whether Pico's micro python environment is successfully recognized. For more details, please refer to Pico's website.
Hardware Connection
Module | Pico |
VCC | 5V |
GND | GND |
SDA | GP2 |
SCL | GP3 |
INT | NC |
Demo Use
As shown in the picture:
- Check the MicroPython firmware is written and connected to the Raspberry Pi Pico.
- Open the unzipped sample demo folder in the upper left corner of the file screen and open the Pico folder.
- Select the two .py files, right-click on them and click on Upload.
- Open the example demo "get_geomagnetic_data.py" by double-clicking on the Raspberry Pi Pico file at the bottom left after uploading.
- Click the above button to run.
Resource
Document
Demo
Software
Related File
Support
Technical Support
If you need technical support or have any feedback/review, please click the Submit Now button to submit a ticket, Our support team will check and reply to you within 1 to 2 working days. Please be patient as we make every effort to help you to resolve the issue.
Working Time: 9 AM - 6 PM GMT+8 (Monday to Friday)