ESPHome 2026.8.0-dev
Loading...
Searching...
No Matches
qmi8658.h
Go to the documentation of this file.
1#pragma once
2
7
8namespace esphome::qmi8658 {
9
10// Register map
11static constexpr uint8_t QMI8658_REG_WHO_AM_I = 0x00;
12static constexpr uint8_t QMI8658_REG_REVISION = 0x01;
13static constexpr uint8_t QMI8658_REG_CTRL1 = 0x02; // serial interface / auto-increment
14static constexpr uint8_t QMI8658_REG_CTRL2 = 0x03; // accelerometer ODR / range
15static constexpr uint8_t QMI8658_REG_CTRL3 = 0x04; // gyroscope ODR / range
16static constexpr uint8_t QMI8658_REG_CTRL5 = 0x06; // low-pass filter
17static constexpr uint8_t QMI8658_REG_CTRL7 = 0x08; // sensor enable
18static constexpr uint8_t QMI8658_REG_STATUS0 = 0x2E;
19static constexpr uint8_t QMI8658_REG_TEMP_BASE = 0x33; // start of the data block
20static constexpr uint8_t QMI8658_REG_TEMP_L = 0x33; // Low byte of temperature
21static constexpr uint8_t QMI8658_REG_AX_L = 0x35;
22static constexpr uint8_t QMI8658_REG_GX_L = 0x3B;
23static constexpr uint8_t QMI8658_REG_RESET = 0x60;
24
25// One contiguous read covers temperature (2) + accel (6) + gyro (6) starting at TEMP_L.
26static constexpr uint8_t REG_READ_LEN = QMI8658_REG_GX_L + 6 - QMI8658_REG_TEMP_BASE; // 0x41 - 0x33 = 14
27static constexpr uint8_t TEMP_OFFS = QMI8658_REG_TEMP_L - QMI8658_REG_TEMP_BASE; // 0
28static constexpr uint8_t ACC_OFFS = QMI8658_REG_AX_L - QMI8658_REG_TEMP_BASE; // 2
29static constexpr uint8_t GYR_OFFS = QMI8658_REG_GX_L - QMI8658_REG_TEMP_BASE; // 8
30
31static constexpr uint8_t QMI8658_WHO_AM_I_VALUE = 0x05;
32static constexpr uint8_t QMI8658_RESET_CMD = 0xB0;
33// CTRL1: bit6 ADDR_AI (register address auto-increment); little-endian, 4-wire SPI
34static constexpr uint8_t QMI8658_CTRL1_VALUE = 0x40;
35// CTRL7: aEN (bit0) | gEN (bit1)
36static constexpr uint8_t QMI8658_CTRL7_ACC_EN = 0x01;
37static constexpr uint8_t QMI8658_CTRL7_GYR_EN = 0x02;
38
39// Accelerometer range options (CTRL2 bits 6:4)
46
47// Accelerometer ODR options (CTRL2 bits 3:0)
59
60// Gyroscope range options (CTRL3 bits 6:4)
71
72// Gyroscope ODR options (CTRL3 bits 3:0)
84
85// Main component class
87 public:
88 // Lifecycle
89 void setup() override;
90 void dump_config() override;
91 float get_setup_priority() const override { return setup_priority::DATA; }
92
93 // Configuration setters
97 void set_gyro_odr(QMI8658GyroODR o) { this->gyro_odr_ = o; }
98 template<typename F> void add_temperature_listener(F &&cb) { this->temperature_callback_.add(std::forward<F>(cb)); }
99
100 protected:
101 bool update_data(motion::MotionData &data) override;
102
103 // Config
108
110};
111
112} // namespace esphome::qmi8658
This Class provides the methods to read/write bytes from/to an i2c device.
Definition i2c.h:132
void set_gyro_odr(QMI8658GyroODR o)
Definition qmi8658.h:97
void set_accel_odr(QMI8658AccelODR o)
Definition qmi8658.h:95
void set_accel_range(QMI8658AccelRange r)
Definition qmi8658.h:94
QMI8658AccelRange accel_range_
Definition qmi8658.h:104
float get_setup_priority() const override
Definition qmi8658.h:91
void add_temperature_listener(F &&cb)
Definition qmi8658.h:98
void set_gyro_range(QMI8658GyroRange r)
Definition qmi8658.h:96
bool update_data(motion::MotionData &data) override
Definition qmi8658.cpp:98
LazyCallbackManager< void(float)> temperature_callback_
Definition qmi8658.h:109
@ QMI8658_GYRO_RANGE_256
Definition qmi8658.h:66
@ QMI8658_GYRO_RANGE_2048
Definition qmi8658.h:69
@ QMI8658_GYRO_RANGE_32
Definition qmi8658.h:63
@ QMI8658_GYRO_RANGE_16
Definition qmi8658.h:62
@ QMI8658_GYRO_RANGE_1024
Definition qmi8658.h:68
@ QMI8658_GYRO_RANGE_512
Definition qmi8658.h:67
@ QMI8658_GYRO_RANGE_64
Definition qmi8658.h:64
@ QMI8658_GYRO_RANGE_128
Definition qmi8658.h:65
@ QMI8658_ACCEL_ODR_31_25
Definition qmi8658.h:57
@ QMI8658_ACCEL_ODR_4000
Definition qmi8658.h:50
@ QMI8658_ACCEL_ODR_250
Definition qmi8658.h:54
@ QMI8658_ACCEL_ODR_2000
Definition qmi8658.h:51
@ QMI8658_ACCEL_ODR_125
Definition qmi8658.h:55
@ QMI8658_ACCEL_ODR_8000
Definition qmi8658.h:49
@ QMI8658_ACCEL_ODR_500
Definition qmi8658.h:53
@ QMI8658_ACCEL_ODR_1000
Definition qmi8658.h:52
@ QMI8658_ACCEL_ODR_62_5
Definition qmi8658.h:56
@ QMI8658_ACCEL_RANGE_16G
Definition qmi8658.h:44
@ QMI8658_ACCEL_RANGE_8G
Definition qmi8658.h:43
@ QMI8658_ACCEL_RANGE_4G
Definition qmi8658.h:42
@ QMI8658_ACCEL_RANGE_2G
Definition qmi8658.h:41
@ QMI8658_GYRO_ODR_2000
Definition qmi8658.h:76
@ QMI8658_GYRO_ODR_62_5
Definition qmi8658.h:81
@ QMI8658_GYRO_ODR_1000
Definition qmi8658.h:77
@ QMI8658_GYRO_ODR_8000
Definition qmi8658.h:74
@ QMI8658_GYRO_ODR_31_25
Definition qmi8658.h:82
@ QMI8658_GYRO_ODR_4000
Definition qmi8658.h:75
constexpr float DATA
For components that import data from directly connected sensors like DHT.
Definition component.h:45