ESPHome 2026.6.0-dev
Loading...
Searching...
No Matches
qmp6988.h
Go to the documentation of this file.
1#pragma once
2
6#include "esphome/core/hal.h"
8#include "esphome/core/log.h"
9
10namespace esphome::qmp6988 {
11
12/* oversampling */
23
24/* filter */
33
34using qmp6988_cali_data_t = struct Qmp6988CaliData {
35 int32_t COE_a0;
36 int16_t COE_a1;
37 int16_t COE_a2;
38 int32_t COE_b00;
39 int16_t COE_bt1;
40 int16_t COE_bt2;
41 int16_t COE_bp1;
42 int16_t COE_b11;
43 int16_t COE_bp2;
44 int16_t COE_b12;
45 int16_t COE_b21;
46 int16_t COE_bp3;
47};
48
49using qmp6988_fk_data_t = struct Qmp6988FkData {
50 float a0, b00;
51 float a1, a2, bt1, bt2, bp1, b11, bp2, b12, b21, bp3;
52};
53
54using qmp6988_ik_data_t = struct Qmp6988IkData {
55 int32_t a0, b00;
56 int32_t a1, a2;
57 int64_t bt1, bt2, bp1, b11, bp2, b12, b21, bp3;
58};
59
60using qmp6988_data_t = struct Qmp6988Data {
61 uint8_t chip_id;
62 uint8_t power_mode;
63 float temperature;
64 float pressure;
65 float altitude;
66 qmp6988_cali_data_t qmp6988_cali;
68};
69
71 public:
72 void set_temperature_sensor(sensor::Sensor *temperature_sensor) { this->temperature_sensor_ = temperature_sensor; }
73 void set_pressure_sensor(sensor::Sensor *pressure_sensor) { this->pressure_sensor_ = pressure_sensor; }
74
75 void setup() override;
76 void dump_config() override;
77 void update() override;
78
79 void set_iir_filter(QMP6988IIRFilter iirfilter) { this->iir_filter_ = iirfilter; }
81 this->temperature_oversampling_ = oversampling_t;
82 }
83 void set_pressure_oversampling(QMP6988Oversampling oversampling_p) { this->pressure_oversampling_ = oversampling_p; }
84
85 protected:
89
93
94 void software_reset_();
96 bool device_check_();
97 void set_power_mode_(uint8_t power_mode);
100 void write_filter_(QMP6988IIRFilter filter);
101 bool calculate_pressure_();
102 void calculate_altitude_(float pressure, float temp);
103
104 int32_t get_compensated_pressure_(qmp6988_ik_data_t *ik, int32_t dp, int16_t tx);
105 int16_t get_compensated_temperature_(qmp6988_ik_data_t *ik, int32_t dt);
106};
107
108} // namespace esphome::qmp6988
This class simplifies creating components that periodically check a state.
Definition component.h:585
This Class provides the methods to read/write bytes from/to an i2c device.
Definition i2c.h:132
void write_filter_(QMP6988IIRFilter filter)
Definition qmp6988.cpp:249
sensor::Sensor * temperature_sensor_
Definition qmp6988.h:87
void calculate_altitude_(float pressure, float temp)
Definition qmp6988.cpp:277
int32_t get_compensated_pressure_(qmp6988_ik_data_t *ik, int32_t dp, int16_t tx)
Definition qmp6988.cpp:179
void set_temperature_sensor(sensor::Sensor *temperature_sensor)
Definition qmp6988.h:72
QMP6988Oversampling pressure_oversampling_
Definition qmp6988.h:91
void write_oversampling_pressure_(QMP6988Oversampling oversampling_p)
Definition qmp6988.cpp:257
sensor::Sensor * pressure_sensor_
Definition qmp6988.h:88
QMP6988Oversampling temperature_oversampling_
Definition qmp6988.h:90
void set_iir_filter(QMP6988IIRFilter iirfilter)
Definition qmp6988.h:79
void set_temperature_oversampling(QMP6988Oversampling oversampling_t)
Definition qmp6988.h:80
int16_t get_compensated_temperature_(qmp6988_ik_data_t *ik, int32_t dt)
Definition qmp6988.cpp:166
void set_power_mode_(uint8_t power_mode)
Definition qmp6988.cpp:227
void set_pressure_sensor(sensor::Sensor *pressure_sensor)
Definition qmp6988.h:73
void set_pressure_oversampling(QMP6988Oversampling oversampling_p)
Definition qmp6988.h:83
void write_oversampling_temperature_(QMP6988Oversampling oversampling_t)
Definition qmp6988.cpp:267
Base-class for all sensors.
Definition sensor.h:47
PowerMode power_mode
Definition msa3xx.h:3
struct Qmp6988IkData { int32_t a0, b00; int32_t a1, a2; int64_t bt1, bt2, bp1, b11, bp2, b12, b21, bp3;} qmp6988_ik_data_t
Definition qmp6988.h:54
struct Qmp6988FkData { float a0, b00; float a1, a2, bt1, bt2, bp1, b11, bp2, b12, b21, bp3;} qmp6988_fk_data_t
Definition qmp6988.h:49
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:60
@ QMP6988_OVERSAMPLING_8X
Definition qmp6988.h:18
@ QMP6988_OVERSAMPLING_SKIPPED
Definition qmp6988.h:14
@ QMP6988_OVERSAMPLING_16X
Definition qmp6988.h:19
@ QMP6988_OVERSAMPLING_32X
Definition qmp6988.h:20
@ QMP6988_OVERSAMPLING_2X
Definition qmp6988.h:16
@ QMP6988_OVERSAMPLING_64X
Definition qmp6988.h:21
@ QMP6988_OVERSAMPLING_1X
Definition qmp6988.h:15
@ QMP6988_OVERSAMPLING_4X
Definition qmp6988.h:17
@ QMP6988_IIR_FILTER_2X
Definition qmp6988.h:27
@ QMP6988_IIR_FILTER_4X
Definition qmp6988.h:28
@ QMP6988_IIR_FILTER_16X
Definition qmp6988.h:30
@ QMP6988_IIR_FILTER_8X
Definition qmp6988.h:29
@ QMP6988_IIR_FILTER_32X
Definition qmp6988.h:31
@ QMP6988_IIR_FILTER_OFF
Definition qmp6988.h:26
struct Qmp6988CaliData { int32_t COE_a0; int16_t COE_a1; int16_t COE_a2; int32_t COE_b00; int16_t COE_bt1; int16_t COE_bt2; int16_t COE_bp1; int16_t COE_b11; int16_t COE_bp2; int16_t COE_b12; int16_t COE_b21; int16_t COE_bp3;} qmp6988_cali_data_t
Definition qmp6988.h:34
uint16_t temperature
Definition sun_gtil2.cpp:12
uint8_t pressure
Definition tt21100.cpp:7