lsm303 - Driver for LSM303 3-axis accelerometer and magnetometer sensor

group lsm303

ESP-IDF Driver for LSM303: 3-axis accelerometer and magnetometer sensors.

Copyright (c) 2023 Jakub Turek qb4.dev@gmail.com

BSD Licensed as described in the file LICENSE

Defines

LSM303_ADDR_ACC

Default I2C address.

LSM303_ADDR_MAG

Enums

enum lsm303_acc_mode_t

Accelerometer modes.

Values:

enumerator LSM303_ACC_MODE_NORMAL

Normal measurement mode; 10-bit.

enumerator LSM303_ACC_MODE_HIGH_RESOLUTION

High resolution mode; 12-bit.

enumerator LSM303_ACC_MODE_LOW_POWER

Low power mode; 8-bit.

enum lsm303_acc_rate_t

Accelerometer data rates.

Values:

enumerator LSM303_ODR_POWER_DOWN

Power-down mode.

enumerator LSM303_ODR_1_HZ

Normal / low-power mode (1 Hz)

enumerator LSM303_ODR_10_HZ

Normal / low-power mode (10 Hz)

enumerator LSM303_ODR_25_HZ

Normal / low-power mode (25 Hz)

enumerator LSM303_ODR_50_HZ

Normal / low-power mode (50 Hz)

enumerator LSM303_ODR_100_HZ

Normal / low-power mode (100 Hz)

enumerator LSM303_ODR_200_HZ

Normal / low-power mode (200 Hz)

enumerator LSM303_ODR_400_HZ

Normal / low-power mode (400 Hz)

enumerator LSM303_ODR_1620_HZ

Low-power mode (1.620 kHz)

enumerator LSM303_ODR_5376_HZ

Normal (1.344 kHz) / low-power mode (5.376 KHz)

enum lsm303_acc_scale_t

Accelerometer scales.

Values:

enumerator LSM303_ACC_SCALE_2G

1 mg/LSB, +- 2G

enumerator LSM303_ACC_SCALE_4G

2 mg/LSB, +- 4G

enumerator LSM303_ACC_SCALE_8G

4 mg/LSB, +- 8G

enumerator LSM303_ACC_SCALE_16G

12 mg/LSB, +- 16G

enum lsm303_mag_mode_t

Magnetometer modes.

Values:

enumerator LSM303_MAG_MODE_CONT

Continuous-conversion mode.

enumerator LSM303_MAG_MODE_SINGLE

Single-conversion mode.

enumerator LSM303_MAG_MODE_SLEEP1

Sleep-mode.

Device is placed in sleep-mode

enumerator LSM303_MAG_MODE_SLEEP2

Sleep-mode.

Device is placed in sleep-mode

enum lsm303_mag_rate_t

Magnetometer rates.

Values:

enumerator LSM303_MAG_RATE_0_75

0.75 Hz

enumerator LSM303_MAG_RATE_1_5

1.5 Hz

enumerator LSM303_MAG_RATE_3_0

3.0 Hz

enumerator LSM303_MAG_RATE_7_5

7.5 Hz

enumerator LSM303_MAG_RATE_15

15 Hz

enumerator LSM303_MAG_RATE_30

30 Hz

enumerator LSM303_MAG_RATE_75

75 Hz

enumerator LSM303_MAG_RATE_220

220 Hz

enum lsm303_mag_gain_t

Magnetometer gains.

Values:

enumerator LSM303_MAG_GAIN_1_3

+/- 1.3

enumerator LSM303_MAG_GAIN_1_9

+/- 1.9

enumerator LSM303_MAG_GAIN_2_5

+/- 2.5

enumerator LSM303_MAG_GAIN_4_0

+/- 4.0

enumerator LSM303_MAG_GAIN_4_7

+/- 4.7

enumerator LSM303_MAG_GAIN_5_6

+/- 5.6

enumerator LSM303_MAG_GAIN_8_1

+/- 8.1

Functions

esp_err_t lsm303_init_desc(lsm303_t *dev, uint8_t acc_addr, uint8_t mag_addr, i2c_port_t port, gpio_num_t sda_gpio, gpio_num_t scl_gpio)

Initialize device descriptor.

Parameters:
  • dev – Device descriptor

  • port – I2C port number

  • acc_addr – I2C accelerometer address

  • mag_addr – I2C magnetometer address

  • sda_gpio – SDA GPIO

  • scl_gpio – SCL GPIO

Returns:

ESP_OK on success

esp_err_t lsm303_free_desc(lsm303_t *dev)

Free device descriptor.

Parameters:

dev – Device descriptor

Returns:

ESP_OK on success

esp_err_t lsm303_init(lsm303_t *dev)

Initialize device.

Parameters:

dev – Device descriptor

Returns:

ESP_OK on success

esp_err_t lsm303_acc_set_config(lsm303_t *dev, lsm303_acc_mode_t mode, lsm303_acc_rate_t rate, lsm303_acc_scale_t scale)

Set accelerometer configuration.

Parameters:
  • dev – Device descriptor

  • mode – Power mode

  • rate – Output data rate

  • scale – Full scale selection

Returns:

ESP_OK on success

esp_err_t lsm303_acc_get_config(lsm303_t *dev, lsm303_acc_mode_t *mode, lsm303_acc_rate_t *rate, lsm303_acc_scale_t *scale)

Get accelerometer configuration.

Parameters:
  • dev – Device descriptor

  • mode[out] Power mode

  • rate[out] Output data rate

  • scale[out] Full scale selection

Returns:

ESP_OK on success

esp_err_t lsm303_acc_data_ready(lsm303_t *dev, bool *ready)

Get accelerometer data state.

Parameters:
  • dev – Device descriptor

  • ready[out] Accelerometer data ready to read if true

Returns:

ESP_OK on success

esp_err_t lsm303_acc_get_raw_data(lsm303_t *dev, lsm303_acc_raw_data_t *raw)

Get raw accelerometer data.

Parameters:
  • dev – Device descriptor

  • raw[out] Accelerometer data

Returns:

ESP_OK on success

esp_err_t lsm303_acc_raw_to_g(lsm303_t *dev, lsm303_acc_raw_data_t *raw, lsm303_acc_data_t *data)

Convert raw accelerometer data to g.

Parameters:
  • dev – Device descriptor

  • raw – Raw accelerometer data

  • data[out] accelerometer data in g

Returns:

ESP_OK on success

esp_err_t lsm303_acc_get_data(lsm303_t *dev, lsm303_acc_data_t *data)

Read accelerometer data in g.

Parameters:
  • dev – Device descriptor

  • data[out] accelerometer data in g

Returns:

ESP_OK on success

esp_err_t lsm303_mag_set_config(lsm303_t *dev, lsm303_mag_mode_t mode, lsm303_mag_rate_t rate, lsm303_mag_gain_t gain)

Set magnetometer configuration.

Parameters:
  • dev – Device descriptor

  • mode – Power mode

  • rate – Output data rate

  • gain – Gain configuration

Returns:

ESP_OK on success

esp_err_t lsm303_mag_get_config(lsm303_t *dev, lsm303_mag_mode_t *mode, lsm303_mag_rate_t *rate, lsm303_mag_gain_t *gain)

Get magnetometer configuration.

Parameters:
  • dev – Device descriptor

  • mode[out] Power mode

  • rate[out] Output data rate

  • gain[out] Gain configuration

Returns:

ESP_OK on success

esp_err_t lsm303_mag_data_ready(lsm303_t *dev, bool *ready)

Get magnetometer data state.

Parameters:
  • dev – Device descriptor

  • ready[out] Magnetometer data ready to read if true

Returns:

ESP_OK on success

esp_err_t lsm303_mag_get_raw_data(lsm303_t *dev, lsm303_mag_raw_data_t *raw)

Get raw magnetometer data.

Parameters:
  • dev – Device descriptor

  • raw[out] Magnetometer data

Returns:

ESP_OK on success

esp_err_t lsm303_mag_raw_to_uT(lsm303_t *dev, lsm303_mag_raw_data_t *raw, lsm303_mag_data_t *data)

Convert raw magnetometer data to uT.

Parameters:
  • dev – Device descriptor

  • raw – Raw magnetometer data

  • data[out] magnetometer data in uT

Returns:

ESP_OK on success

esp_err_t lsm303_mag_get_data(lsm303_t *dev, lsm303_mag_data_t *data)

Read magnetometer data in uT.

Parameters:
  • dev – Device descriptor

  • data[out] magnetometer data in uT

Returns:

ESP_OK on success

esp_err_t lsm303_mag_get_temp(lsm303_t *dev, float *temp)

Read chip temperature.

Parameters:
  • dev – Device descriptor

  • temp[out] Chip temperature

Returns:

ESP_OK on success

struct lsm303_acc_raw_data_t
#include <lsm303.h>

Raw acceleration measurement result.

struct lsm303_mag_raw_data_t
#include <lsm303.h>

Raw magnetometer measurement result.

struct lsm303_acc_data_t
#include <lsm303.h>

Linear acceleration measurement result: g.

struct lsm303_mag_data_t
#include <lsm303.h>

Magnetic field measurement result: uT.

struct lsm303_t
#include <lsm303.h>

Device descriptor.