@@ -77,48 +77,41 @@ mesh::LocalIdentity radio_new_identity() {
7777
7878static INA3221 INA_3221 (TELEM_INA3221_ADDRESS, &Wire);
7979static INA219 INA_219 (TELEM_INA219_ADDRESS, &Wire);
80+ static Adafruit_AHTX0 AHTX;
8081
8182bool PromicroSensorManager::begin () {
82- if (INA_3221. begin ()) {
83- MESH_DEBUG_PRINTLN ( " Found INA3221 at address: %02X " , INA_3221. getAddress () );
84- MESH_DEBUG_PRINTLN ( " %04X %04X %04X " , INA_3221. getDieID (), INA_3221. getManufacturerID (), INA_3221. getConfiguration () );
83+ initINA3221 ();
84+ initINA219 ( );
85+ initAHTX ( );
8586
86- for (int i = 0 ; i < 3 ; i++) {
87- INA_3221.setShuntR (i, TELEM_INA3221_SHUNT_VALUE);
88- }
89- INA3221initialized = true ;
90- } else {
91- INA3221initialized = false ;
92- MESH_DEBUG_PRINTLN (" INA3221 was not found at I2C address %02X" , TELEM_INA3221_ADDRESS);
93- }
94- if (INA_219.begin ()) {
95- MESH_DEBUG_PRINTLN (" Found INA219 at address: %02X" , INA_219.getAddress ());
96- INA219_CHANNEL = INA3221initialized ? TELEM_CHANNEL_SELF + 4 : TELEM_CHANNEL_SELF + 1 ;
97- INA_219.setMaxCurrentShunt (TELEM_INA219_MAX_CURRENT, TELEM_INA219_SHUNT_VALUE);
98- INA219initialized = true ;
99- } else {
100- INA219initialized = false ;
101- MESH_DEBUG_PRINTLN (" INA219 was not found at I2C address %02X" , TELEM_INA219_ADDRESS);
102- }
10387 return true ;
10488}
10589
10690bool PromicroSensorManager::querySensors (uint8_t requester_permissions, CayenneLPP& telemetry) {
91+ int nextAvalableChannel = TELEM_CHANNEL_SELF + 1 ;
10792 if (requester_permissions & TELEM_PERM_ENVIRONMENT) {
10893 if (INA3221initialized) {
10994 for (int i = 0 ; i < 3 ; i++) {
11095 // add only enabled INA3221 channels to telemetry
11196 if (INA3221_CHANNEL_ENABLED[i]) {
112- telemetry.addVoltage (INA3221_CHANNELS[i], INA_3221.getBusVoltage (i));
113- telemetry.addCurrent (INA3221_CHANNELS[i], INA_3221.getCurrent (i));
114- telemetry.addPower (INA3221_CHANNELS[i], INA_3221.getPower (i));
97+ telemetry.addVoltage (nextAvalableChannel, INA_3221.getBusVoltage (i));
98+ telemetry.addCurrent (nextAvalableChannel, INA_3221.getCurrent (i));
99+ telemetry.addPower (nextAvalableChannel, INA_3221.getPower (i));
100+ nextAvalableChannel++;
115101 }
116102 }
117103 }
118- if (INA219initialized) {
119- telemetry.addVoltage (INA219_CHANNEL, INA_219.getBusVoltage ());
120- telemetry.addCurrent (INA219_CHANNEL, INA_219.getCurrent ());
121- telemetry.addPower (INA219_CHANNEL, INA_219.getPower ());
104+ if (INA219initialized) {
105+ telemetry.addVoltage (nextAvalableChannel, INA_219.getBusVoltage ());
106+ telemetry.addCurrent (nextAvalableChannel, INA_219.getCurrent ());
107+ telemetry.addPower (nextAvalableChannel, INA_219.getPower ());
108+ nextAvalableChannel++;
109+ }
110+ if (AHTXinitialized) {
111+ sensors_event_t humidity, temp;
112+ AHTX.getEvent (&humidity, &temp);
113+ telemetry.addTemperature (TELEM_CHANNEL_SELF, temp.temperature );
114+ telemetry.addRelativeHumidity (TELEM_CHANNEL_SELF, humidity.relative_humidity );
122115 }
123116 }
124117
@@ -162,4 +155,40 @@ bool PromicroSensorManager::setSettingValue(const char* name, const char* value)
162155 }
163156 }
164157 return false ;
165- }
158+ }
159+
160+ void PromicroSensorManager::initINA3221 () {
161+ if (INA_3221.begin ()) {
162+ MESH_DEBUG_PRINTLN (" Found INA3221 at address: %02X" , INA_3221.getAddress ());
163+ MESH_DEBUG_PRINTLN (" %04X %04X %04X" , INA_3221.getDieID (), INA_3221.getManufacturerID (), INA_3221.getConfiguration ());
164+
165+ for (int i = 0 ; i < 3 ; i++) {
166+ INA_3221.setShuntR (i, TELEM_INA3221_SHUNT_VALUE);
167+ }
168+ INA3221initialized = true ;
169+ } else {
170+ INA3221initialized = false ;
171+ MESH_DEBUG_PRINTLN (" INA3221 was not found at I2C address %02X" , TELEM_INA3221_ADDRESS);
172+ }
173+ }
174+
175+ void PromicroSensorManager::initINA219 () {
176+ if (INA_219.begin ()) {
177+ MESH_DEBUG_PRINTLN (" Found INA219 at address: %02X" , INA_219.getAddress ());
178+ INA_219.setMaxCurrentShunt (TELEM_INA219_MAX_CURRENT, TELEM_INA219_SHUNT_VALUE);
179+ INA219initialized = true ;
180+ } else {
181+ INA219initialized = false ;
182+ MESH_DEBUG_PRINTLN (" INA219 was not found at I2C address %02X" , TELEM_INA219_ADDRESS);
183+ }
184+ }
185+
186+ void PromicroSensorManager::initAHTX () {
187+ if (AHTX.begin (&Wire, 0 , TELEM_AHTX_ADDRESS)) {
188+ MESH_DEBUG_PRINTLN (" Found AHT10/AHT20 at address: %02X" , TELEM_AHTX_ADDRESS);
189+ AHTXinitialized = true ;
190+ } else {
191+ AHTXinitialized = false ;
192+ MESH_DEBUG_PRINTLN (" AHT10/AHT20 was not found at I2C address %02X" , TELEM_AHTX_ADDRESS);
193+ }
194+ }
0 commit comments