ESPHome 2025.5.0
Loading...
Searching...
No Matches
qmp6988.h
Go to the documentation of this file.
1#pragma once
2
3#include "esphome/core/log.h"
5#include "esphome/core/hal.h"
9
10namespace esphome {
11namespace qmp6988 {
12
13#define QMP6988_U16_t unsigned short
14#define QMP6988_S16_t short
15#define QMP6988_U32_t unsigned int
16#define QMP6988_S32_t int
17#define QMP6988_U64_t unsigned long long
18#define QMP6988_S64_t long long
19
20/* oversampling */
31
32/* filter */
41
42using qmp6988_cali_data_t = struct Qmp6988CaliData {
43 QMP6988_S32_t COE_a0;
44 QMP6988_S16_t COE_a1;
45 QMP6988_S16_t COE_a2;
46 QMP6988_S32_t COE_b00;
47 QMP6988_S16_t COE_bt1;
48 QMP6988_S16_t COE_bt2;
49 QMP6988_S16_t COE_bp1;
50 QMP6988_S16_t COE_b11;
51 QMP6988_S16_t COE_bp2;
52 QMP6988_S16_t COE_b12;
53 QMP6988_S16_t COE_b21;
54 QMP6988_S16_t COE_bp3;
55};
56
57using qmp6988_fk_data_t = struct Qmp6988FkData {
58 float a0, b00;
59 float a1, a2, bt1, bt2, bp1, b11, bp2, b12, b21, bp3;
60};
61
62using qmp6988_ik_data_t = struct Qmp6988IkData {
63 QMP6988_S32_t a0, b00;
64 QMP6988_S32_t a1, a2;
65 QMP6988_S64_t bt1, bt2, bp1, b11, bp2, b12, b21, bp3;
66};
67
68using qmp6988_data_t = struct Qmp6988Data {
69 uint8_t chip_id;
70 uint8_t power_mode;
71 float temperature;
72 float pressure;
73 float altitude;
74 qmp6988_cali_data_t qmp6988_cali;
76};
77
79 public:
80 void set_temperature_sensor(sensor::Sensor *temperature_sensor) { temperature_sensor_ = temperature_sensor; }
81 void set_pressure_sensor(sensor::Sensor *pressure_sensor) { pressure_sensor_ = pressure_sensor; }
82
83 void setup() override;
84 void dump_config() override;
85 float get_setup_priority() const override;
86 void update() override;
87
88 void set_iir_filter(QMP6988IIRFilter iirfilter);
91
92 protected:
96
100
101 void software_reset_();
103 bool device_check_();
104 void set_power_mode_(uint8_t power_mode);
105 void write_oversampling_temperature_(unsigned char oversampling_t);
106 void write_oversampling_pressure_(unsigned char oversampling_p);
107 void write_filter_(unsigned char filter);
108 void calculate_pressure_();
109 void calculate_altitude_(float pressure, float temp);
110
111 QMP6988_S32_t get_compensated_pressure_(qmp6988_ik_data_t *ik, QMP6988_S32_t dp, QMP6988_S16_t tx);
112 QMP6988_S16_t get_compensated_temperature_(qmp6988_ik_data_t *ik, QMP6988_S32_t dt);
113};
114
115} // namespace qmp6988
116} // namespace esphome
This class simplifies creating components that periodically check a state.
Definition component.h:301
This Class provides the methods to read/write bytes from/to an i2c device.
Definition i2c.h:133
sensor::Sensor * temperature_sensor_
Definition qmp6988.h:94
QMP6988_S32_t get_compensated_pressure_(qmp6988_ik_data_t *ik, QMP6988_S32_t dp, QMP6988_S16_t tx)
Definition qmp6988.cpp:204
void calculate_altitude_(float pressure, float temp)
Definition qmp6988.cpp:315
float get_setup_priority() const override
Definition qmp6988.cpp:382
void set_temperature_sensor(sensor::Sensor *temperature_sensor)
Definition qmp6988.h:80
QMP6988Oversampling pressure_oversampling_
Definition qmp6988.h:98
sensor::Sensor * pressure_sensor_
Definition qmp6988.h:95
QMP6988Oversampling temperature_oversampling_
Definition qmp6988.h:97
void set_iir_filter(QMP6988IIRFilter iirfilter)
Definition qmp6988.cpp:313
void set_temperature_oversampling(QMP6988Oversampling oversampling_t)
Definition qmp6988.cpp:305
QMP6988_S16_t get_compensated_temperature_(qmp6988_ik_data_t *ik, QMP6988_S32_t dt)
Definition qmp6988.cpp:191
void set_power_mode_(uint8_t power_mode)
Definition qmp6988.cpp:255
void write_filter_(unsigned char filter)
Definition qmp6988.cpp:277
void write_oversampling_temperature_(unsigned char oversampling_t)
Definition qmp6988.cpp:295
void write_oversampling_pressure_(unsigned char oversampling_p)
Definition qmp6988.cpp:285
void set_pressure_sensor(sensor::Sensor *pressure_sensor)
Definition qmp6988.h:81
void set_pressure_oversampling(QMP6988Oversampling oversampling_p)
Definition qmp6988.cpp:309
Base-class for all sensors.
Definition sensor.h:57
PowerMode power_mode
Definition msa3xx.h:3
@ QMP6988_IIR_FILTER_2X
Definition qmp6988.h:35
@ QMP6988_IIR_FILTER_4X
Definition qmp6988.h:36
@ QMP6988_IIR_FILTER_16X
Definition qmp6988.h:38
@ QMP6988_IIR_FILTER_8X
Definition qmp6988.h:37
@ QMP6988_IIR_FILTER_32X
Definition qmp6988.h:39
@ QMP6988_IIR_FILTER_OFF
Definition qmp6988.h:34
struct Qmp6988FkData { float a0, b00; float a1, a2, bt1, bt2, bp1, b11, bp2, b12, b21, bp3;} qmp6988_fk_data_t
Definition qmp6988.h:57
@ QMP6988_OVERSAMPLING_8X
Definition qmp6988.h:26
@ QMP6988_OVERSAMPLING_SKIPPED
Definition qmp6988.h:22
@ QMP6988_OVERSAMPLING_16X
Definition qmp6988.h:27
@ QMP6988_OVERSAMPLING_32X
Definition qmp6988.h:28
@ QMP6988_OVERSAMPLING_2X
Definition qmp6988.h:24
@ QMP6988_OVERSAMPLING_64X
Definition qmp6988.h:29
@ QMP6988_OVERSAMPLING_1X
Definition qmp6988.h:23
@ QMP6988_OVERSAMPLING_4X
Definition qmp6988.h:25
struct Qmp6988CaliData { QMP6988_S32_t COE_a0; QMP6988_S16_t COE_a1; QMP6988_S16_t COE_a2; QMP6988_S32_t COE_b00; QMP6988_S16_t COE_bt1; QMP6988_S16_t COE_bt2; QMP6988_S16_t COE_bp1; QMP6988_S16_t COE_b11; QMP6988_S16_t COE_bp2; QMP6988_S16_t COE_b12; QMP6988_S16_t COE_b21; QMP6988_S16_t COE_bp3;} qmp6988_cali_data_t
Definition qmp6988.h:42
struct Qmp6988Data { uint8_t chip_id; uint8_t power_mode; float temperature; float pressure; float altitude; qmp6988_cali_data_t qmp6988_cali; qmp6988_ik_data_t ik;} qmp6988_data_t
Definition qmp6988.h:68
struct Qmp6988IkData { QMP6988_S32_t a0, b00; QMP6988_S32_t a1, a2; QMP6988_S64_t bt1, bt2, bp1, b11, bp2, b12, b21, bp3;} qmp6988_ik_data_t
Definition qmp6988.h:62
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
uint16_t temperature
Definition sun_gtil2.cpp:12
uint8_t pressure
Definition tt21100.cpp:7