-
Notifications
You must be signed in to change notification settings - Fork 28
Expand file tree
/
Copy pathPlotToSerial.cpp
More file actions
153 lines (137 loc) · 4.04 KB
/
PlotToSerial.cpp
File metadata and controls
153 lines (137 loc) · 4.04 KB
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*
* SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
*
* SPDX-License-Identifier: MIT
*/
/*
Example using M5UnitUnified for UnitENVIII
*/
#include <M5Unified.h>
#include <M5UnitUnified.h>
#include <M5UnitUnifiedENV.h>
// #define USING_M5HAL // When using M5HAL
// Using single shot measurement If defined
// #define USING_SINGLE_SHOT
// Using combined unit if defined
#define USING_ENV3
namespace {
auto& lcd = M5.Display;
m5::unit::UnitUnified Units;
#if defined(USING_ENV3)
#pragma message "Using combined unit(ENV3)"
m5::unit::UnitENV3 unitENV3;
#else
#pragma message "Using each unit"
m5::unit::UnitSHT30 unitSHT30;
m5::unit::UnitQMP6988 unitQMP6988;
#endif
#if defined(USING_ENV3)
auto& sht30 = unitENV3.sht30;
auto& qmp6988 = unitENV3.qmp6988;
#else
auto& sht30 = unitSHT30;
auto& qmp6988 = unitQMP6988;
#endif
} // namespace
void setup()
{
M5.begin();
auto pin_num_sda = M5.getPin(m5::pin_name_t::port_a_sda);
auto pin_num_scl = M5.getPin(m5::pin_name_t::port_a_scl);
M5_LOGI("getPin: SDA:%u SCL:%u", pin_num_sda, pin_num_scl);
#if defined(USING_SINGLE_SHOT)
{
auto cfg = sht30.config();
cfg.start_periodic = false;
sht30.config(cfg);
}
{
auto cfg = qmp6988.config();
cfg.start_periodic = false;
qmp6988.config(cfg);
}
#endif
#if defined(USING_ENV3)
#if defined(USING_M5HAL)
#pragma message "Using M5HAL"
m5::hal::bus::I2CBusConfig i2c_cfg;
i2c_cfg.pin_sda = m5::hal::gpio::getPin(pin_num_sda);
i2c_cfg.pin_scl = m5::hal::gpio::getPin(pin_num_scl);
auto i2c_bus = m5::hal::bus::i2c::getBus(i2c_cfg);
if (!Units.add(unitENV3, i2c_bus ? i2c_bus.value() : nullptr) || !Units.begin()) {
M5_LOGE("Failed to begin");
lcd.clear(TFT_RED);
while (true) {
m5::utility::delay(10000);
}
}
#else
#pragma message "Using Wire"
Wire.end();
Wire.begin(pin_num_sda, pin_num_scl, 400000U);
if (!Units.add(unitENV3, Wire) || !Units.begin()) {
M5_LOGE("Failed to begin");
lcd.clear(TFT_RED);
while (true) {
m5::utility::delay(10000);
}
}
#endif
#else
#if defined(USING_M5HAL)
#pragma message "Using M5HAL"
m5::hal::bus::I2CBusConfig i2c_cfg;
i2c_cfg.pin_sda = m5::hal::gpio::getPin(pin_num_sda);
i2c_cfg.pin_scl = m5::hal::gpio::getPin(pin_num_scl);
auto i2c_bus = m5::hal::bus::i2c::getBus(i2c_cfg);
if (!Units.add(unitSHT30, i2c_bus ? i2c_bus.value() : nullptr) ||
!Units.add(unitQMP6988, i2c_bus ? i2c_bus.value() : nullptr) || !Units.begin()) {
M5_LOGE("Failed to begin");
lcd.clear(TFT_RED);
while (true) {
m5::utility::delay(10000);
}
}
#else
#pragma message "Using Wire"
Wire.begin(pin_num_sda, pin_num_scl, 400000U);
if (!Units.add(unitSHT30, Wire) || !Units.add(unitQMP6988, Wire) || !Units.begin()) {
M5_LOGE("Failed to begin");
lcd.clear(TFT_RED);
while (true) {
m5::utility::delay(10000);
}
}
#endif
#endif
M5_LOGI("M5UnitUnified has been begun");
M5_LOGI("%s", Units.debugInfo().c_str());
#if defined(USING_SINGLE_SHOT)
M5_LOGI("\n>>> Click BtnA to single shot measurement");
#endif
lcd.clear(TFT_DARKGREEN);
}
void loop()
{
M5.update();
Units.update();
#if defined(USING_SINGLE_SHOT)
if (M5.BtnA.wasClicked()) {
m5::unit::sht30::Data ds{};
if (sht30.measureSingleshot(ds)) {
M5.Log.printf(">SHT30Temp:%2.2f\n>Humidity:%2.2f\n", ds.temperature(), ds.humidity());
}
m5::unit::qmp6988::Data dq{};
if (qmp6988.measureSingleshot(dq)) {
M5.Log.printf(">QMP6988Temp:%2.2f\n>Pressure:%.2f\n", dq.temperature(), dq.pressure() * 0.01f);
}
}
#else
if (sht30.updated()) {
M5.Log.printf(">SHT30Temp:%2.2f\n>Humidity:%2.2f\n", sht30.temperature(), sht30.humidity());
}
if (qmp6988.updated()) {
M5.Log.printf(">QMP6988Temp:%2.2f\n>Pressure:%.2f\n", qmp6988.temperature(), qmp6988.pressure() * 0.01f);
}
#endif
}