Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion variants/promicro/platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ build_flags =
lib_deps = ${Faketec.lib_deps}
adafruit/RTClib @ ^2.1.3
robtillaart/INA3221 @ ^0.4.1

robtillaart/INA219 @ ^0.4.1

[env:Faketec_room_server]
extends = Faketec
build_src_filter = ${Faketec.build_src_filter}
Expand All @@ -53,6 +54,8 @@ build_flags = ${Faketec.build_flags}
; -D MESH_DEBUG=1
lib_deps = ${Faketec.lib_deps}
adafruit/RTClib @ ^2.1.3
robtillaart/INA3221 @ ^0.4.1
robtillaart/INA219 @ ^0.4.1

[env:Faketec_terminal_chat]
extends = Faketec
Expand All @@ -66,6 +69,8 @@ build_src_filter = ${Faketec.build_src_filter}
lib_deps = ${Faketec.lib_deps}
densaugeo/base64 @ ~1.4.0
adafruit/RTClib @ ^2.1.3
robtillaart/INA3221 @ ^0.4.1
robtillaart/INA219 @ ^0.4.1

[env:Faketec_companion_radio_usb]
extends = Faketec
Expand All @@ -80,6 +85,8 @@ build_src_filter = ${Faketec.build_src_filter}
lib_deps = ${Faketec.lib_deps}
adafruit/RTClib @ ^2.1.3
densaugeo/base64 @ ~1.4.0
robtillaart/INA3221 @ ^0.4.1
robtillaart/INA219 @ ^0.4.1

[env:Faketec_companion_radio_ble]
extends = Faketec
Expand All @@ -100,6 +107,8 @@ build_src_filter = ${Faketec.build_src_filter}
lib_deps = ${Faketec.lib_deps}
adafruit/RTClib @ ^2.1.3
densaugeo/base64 @ ~1.4.0
robtillaart/INA3221 @ ^0.4.1
robtillaart/INA219 @ ^0.4.1

[ProMicroLLCC68]
extends = nrf52840_base
Expand Down Expand Up @@ -129,6 +138,8 @@ build_flags = ${ProMicroLLCC68.build_flags}
; -D MESH_DEBUG=1
lib_deps = ${ProMicroLLCC68.lib_deps}
adafruit/RTClib @ ^2.1.3
robtillaart/INA3221 @ ^0.4.1
robtillaart/INA219 @ ^0.4.1

[env:ProMicroLLCC68_room_server]
extends = ProMicroLLCC68
Expand All @@ -142,6 +153,8 @@ build_flags = ${ProMicroLLCC68.build_flags}
; -D MESH_DEBUG=1
lib_deps = ${ProMicroLLCC68.lib_deps}
adafruit/RTClib @ ^2.1.3
robtillaart/INA3221 @ ^0.4.1
robtillaart/INA219 @ ^0.4.1

[env:ProMicroLLCC68_terminal_chat]
extends = ProMicroLLCC68
Expand All @@ -155,6 +168,8 @@ build_src_filter = ${ProMicroLLCC68.build_src_filter}
lib_deps = ${ProMicroLLCC68.lib_deps}
densaugeo/base64 @ ~1.4.0
adafruit/RTClib @ ^2.1.3
robtillaart/INA3221 @ ^0.4.1
robtillaart/INA219 @ ^0.4.1

[env:ProMicroLLCC68_companion_radio_usb]
extends = ProMicroLLCC68
Expand All @@ -168,6 +183,8 @@ build_src_filter = ${ProMicroLLCC68.build_src_filter}
lib_deps = ${ProMicroLLCC68.lib_deps}
adafruit/RTClib @ ^2.1.3
densaugeo/base64 @ ~1.4.0
robtillaart/INA3221 @ ^0.4.1
robtillaart/INA219 @ ^0.4.1

[env:ProMicroLLCC68_companion_radio_ble]
extends = ProMicroLLCC68
Expand All @@ -187,3 +204,5 @@ build_src_filter = ${ProMicroLLCC68.build_src_filter}
lib_deps = ${ProMicroLLCC68.lib_deps}
adafruit/RTClib @ ^2.1.3
densaugeo/base64 @ ~1.4.0
robtillaart/INA3221 @ ^0.4.1
robtillaart/INA219 @ ^0.4.1
17 changes: 16 additions & 1 deletion variants/promicro/target.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,10 @@ mesh::LocalIdentity radio_new_identity() {
}

static INA3221 INA_3221(TELEM_INA3221_ADDRESS, &Wire);
static INA219 INA_219(TELEM_INA219_ADDRESS, &Wire);

bool PromicroSensorManager::begin() {
if (INA_3221.begin() ) {
if (INA_3221.begin()) {
MESH_DEBUG_PRINTLN("Found INA3221 at address: %02X", INA_3221.getAddress());
MESH_DEBUG_PRINTLN("%04X %04X %04X", INA_3221.getDieID(), INA_3221.getManufacturerID(), INA_3221.getConfiguration());

Expand All @@ -90,6 +91,15 @@ bool PromicroSensorManager::begin() {
INA3221initialized = false;
MESH_DEBUG_PRINTLN("INA3221 was not found at I2C address %02X", TELEM_INA3221_ADDRESS);
}
if (INA_219.begin()) {
MESH_DEBUG_PRINTLN("Found INA219 at address: %02X", INA_219.getAddress());
INA219_CHANNEL = INA3221initialized ? TELEM_CHANNEL_SELF + 4 : TELEM_CHANNEL_SELF + 1;
INA_219.setMaxCurrentShunt(TELEM_INA219_MAX_CURRENT, TELEM_INA219_SHUNT_VALUE);
INA219initialized = true;
} else {
INA219initialized = false;
MESH_DEBUG_PRINTLN("INA219 was not found at I2C address %02X", TELEM_INA219_ADDRESS);
}
return true;
}

Expand All @@ -105,6 +115,11 @@ bool PromicroSensorManager::querySensors(uint8_t requester_permissions, CayenneL
}
}
}
if(INA219initialized) {
telemetry.addVoltage(INA219_CHANNEL, INA_219.getBusVoltage());
telemetry.addCurrent(INA219_CHANNEL, INA_219.getCurrent());
telemetry.addPower(INA219_CHANNEL, INA_219.getPower());
}
}

return true;
Expand Down
10 changes: 9 additions & 1 deletion variants/promicro/target.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <helpers/AutoDiscoverRTCClock.h>
#include <helpers/SensorManager.h>
#include <INA3221.h>
#include <INA219.h>

#define NUM_SENSOR_SETTINGS 3

Expand All @@ -23,20 +24,27 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr);
void radio_set_tx_power(uint8_t dbm);
mesh::LocalIdentity radio_new_identity();

#define TELEM_INA3221_ADDRESS 0x42 // INA3221 3 channel current, voltage, power sensor I2C address
#define TELEM_INA3221_ADDRESS 0x42 // INA3221 3 channel current sensor I2C address
#define TELEM_INA219_ADDRESS 0x40 // INA219 single channel current sensor I2C address

#define TELEM_INA3221_SHUNT_VALUE 0.100 // most variants will have a 0.1 ohm shunts
#define TELEM_INA3221_SETTING_CH1 "INA3221-1"
#define TELEM_INA3221_SETTING_CH2 "INA3221-2"
#define TELEM_INA3221_SETTING_CH3 "INA3221-3"

#define TELEM_INA219_SHUNT_VALUE 0.100 // shunt value in ohms (may differ between manufacturers)
#define TELEM_INA219_MAX_CURRENT 5

class PromicroSensorManager: public SensorManager {
bool INA3221initialized = false;
bool INA219initialized = false;

// INA3221 channels in telemetry
int INA3221_CHANNELS[NUM_SENSOR_SETTINGS] = {TELEM_CHANNEL_SELF + 1, TELEM_CHANNEL_SELF + 2, TELEM_CHANNEL_SELF+ 3};
const char * INA3221_CHANNEL_NAMES[NUM_SENSOR_SETTINGS] = { TELEM_INA3221_SETTING_CH1, TELEM_INA3221_SETTING_CH2, TELEM_INA3221_SETTING_CH3};
bool INA3221_CHANNEL_ENABLED[NUM_SENSOR_SETTINGS] = {true, true, true};

int INA219_CHANNEL;
public:
PromicroSensorManager(){};
bool begin() override;
Expand Down