Simple test¶
Ensure your device works with this simple test.
examples/lis3mdl_simpletest.py¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
""" Display magnetometer data once per second """
import time
import board
import adafruit_lis3mdl
i2c = board.I2C() # uses board.SCL and board.SDA
sensor = adafruit_lis3mdl.LIS3MDL(i2c)
while True:
mag_x, mag_y, mag_z = sensor.magnetic
print("X:{0:10.2f}, Y:{1:10.2f}, Z:{2:10.2f} uT".format(mag_x, mag_y, mag_z))
print("")
time.sleep(1.0)
|
Compass Example¶
Use the magnetometer to calculate compass headings.
examples/lis3mdl_compass.py¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
""" Display compass heading data five times per second """
import time
from math import atan2, degrees
import board
import adafruit_lis3mdl
i2c = board.I2C() # uses board.SCL and board.SDA
sensor = adafruit_lis3mdl.LIS3MDL(i2c)
def vector_2_degrees(x, y):
angle = degrees(atan2(y, x))
if angle < 0:
angle += 360
return angle
def get_heading(_sensor):
magnet_x, magnet_y, _ = _sensor.magnetic
return vector_2_degrees(magnet_x, magnet_y)
while True:
print("heading: {:.2f} degrees".format(get_heading(sensor)))
time.sleep(0.2)
|
Data Rate Example¶
Test each data rate
examples/lis3mdl_data_rate_test.py¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
""" Test Each Data Rate """
# pylint: disable=no-member
import time
import board
from adafruit_lis3mdl import LIS3MDL, Rate, PerformanceMode
i2c = board.I2C() # uses board.SCL and board.SDA
sensor = LIS3MDL(i2c)
current_rate = Rate.RATE_155_HZ
sensor.data_rate = current_rate
start_time = time.monotonic()
print("data_rate is", Rate.string[sensor.data_rate], "HZ")
print("performance_mode is", PerformanceMode.string[sensor.performance_mode])
while True:
mag_x, mag_y, mag_z = sensor.magnetic
print("X:{0:10.2f}, Y:{1:10.2f}, Z:{2:10.2f} uT".format(mag_x, mag_y, mag_z))
# sleep for enough time so that we'll read the value twice per measurement
sleep_time = 1 / (Rate.string[current_rate] * 2)
time.sleep(sleep_time)
# exit loop after a second to prevent hard to stop loops with short delays
if (time.monotonic() - start_time) > 1:
break
|
LSM6DS Test¶
Test the LSM6DS device
examples/lis3mdl_lsm6ds_test.py¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
import time
import board
from adafruit_lsm6ds.lsm6dsox import LSM6DSOX as LSM6DS
# To use LSM6DS33, comment out the LSM6DSOX import line
# and uncomment the next line
# from adafruit_lsm6ds.lsm6ds33 import LSM6DS33 as LSM6DS
# To use ISM330DHCX, comment out the LSM6DSOX import line
# and uncomment the next line
# from adafruit_lsm6ds.lsm330dhcx import ISM330DHCX as LSM6DS
from adafruit_lis3mdl import LIS3MDL
i2c = board.I2C() # uses board.SCL and board.SDA
accel_gyro = LSM6DS(i2c)
mag = LIS3MDL(i2c)
while True:
acceleration = accel_gyro.acceleration
gyro = accel_gyro.gyro
magnetic = mag.magnetic
print(
"Acceleration: X:{0:7.2f}, Y:{1:7.2f}, Z:{2:7.2f} m/s^2".format(*acceleration)
)
print("Gyro X:{0:7.2f}, Y:{1:7.2f}, Z:{2:7.2f} rad/s".format(*gyro))
print("Magnetic X:{0:7.2f}, Y:{1:7.2f}, Z:{2:7.2f} uT".format(*magnetic))
print("")
time.sleep(0.5)
|
Range Test¶
Test each range
examples/lis3mdl_range_test.py¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
""" Test Each range """
# pylint: disable=no-member
import time
import board
from adafruit_lis3mdl import LIS3MDL, Range
i2c = board.I2C() # uses board.SCL and board.SDA
sensor = LIS3MDL(i2c)
while True:
for mag_range in [
Range.RANGE_4_GAUSS,
Range.RANGE_8_GAUSS,
Range.RANGE_12_GAUSS,
Range.RANGE_16_GAUSS,
]:
sensor.range = mag_range
print("Range: %d Gauss" % Range.string[sensor.range])
mag_x, mag_y, mag_z = sensor.magnetic
print("X:{0:10.2f}, Y:{1:10.2f}, Z:{2:10.2f} uT".format(mag_x, mag_y, mag_z))
print("")
time.sleep(0.3)
|