52 ina219_state->Battery.fake = (ina219_b_dev.i2c_dev.addr == 0) ? true:false; |
52 ina219_state->Battery.fake = (ina219_b_dev.i2c_dev.addr == 0) ? true:false; |
53 ina219_state->Battery.address = ina219_b_dev.i2c_dev.addr; |
53 ina219_state->Battery.address = ina219_b_dev.i2c_dev.addr; |
54 ina219_state->Battery.error = INA219_ERR_NONE; |
54 ina219_state->Battery.error = INA219_ERR_NONE; |
55 if (ina219_b_dev.i2c_dev.addr) { |
55 if (ina219_b_dev.i2c_dev.addr) { |
56 ESP_LOGI(TAG, "Configuring INA219 Battery"); |
56 ESP_LOGI(TAG, "Configuring INA219 Battery"); |
57 ESP_ERROR_CHECK(ina219_configure(&ina219_b_dev, INA219_BUS_RANGE_16V, INA219_GAIN_0_125, |
57 ESP_ERROR_CHECK(ina219_configure(&ina219_b_dev, INA219_BUS_RANGE_32V, INA219_GAIN_0_125, |
58 INA219_RES_12BIT_1S, INA219_RES_12BIT_1S, INA219_MODE_CONT_SHUNT_BUS)); |
58 INA219_RES_12BIT_1S, INA219_RES_12BIT_1S, INA219_MODE_CONT_SHUNT_BUS)); |
59 ESP_LOGI(TAG, "Calibrating INA219 Battery"); |
59 ESP_LOGI(TAG, "Calibrating INA219 Battery"); |
60 ESP_ERROR_CHECK(ina219_calibrate(&ina219_b_dev, (float)I_MAX_CURRENT, (float)I_SHUNT_RESISTOR_MILLI_OHM / 1000.0f)); |
60 ESP_ERROR_CHECK(ina219_calibrate(&ina219_b_dev, (float)I_MAX_CURRENT, (float)I_SHUNT_RESISTOR_MILLI_OHM / 1000.0f)); |
61 } |
61 } |
62 |
62 |
64 ina219_state->Solar.fake = (ina219_s_dev.i2c_dev.addr == 0) ? true:false; |
64 ina219_state->Solar.fake = (ina219_s_dev.i2c_dev.addr == 0) ? true:false; |
65 ina219_state->Solar.address = ina219_s_dev.i2c_dev.addr; |
65 ina219_state->Solar.address = ina219_s_dev.i2c_dev.addr; |
66 ina219_state->Solar.error = INA219_ERR_NONE; |
66 ina219_state->Solar.error = INA219_ERR_NONE; |
67 if (ina219_s_dev.i2c_dev.addr) { |
67 if (ina219_s_dev.i2c_dev.addr) { |
68 ESP_LOGI(TAG, "Configuring INA219 Solar"); |
68 ESP_LOGI(TAG, "Configuring INA219 Solar"); |
69 ESP_ERROR_CHECK(ina219_configure(&ina219_s_dev, INA219_BUS_RANGE_16V, INA219_GAIN_0_125, |
69 ESP_ERROR_CHECK(ina219_configure(&ina219_s_dev, INA219_BUS_RANGE_32V, INA219_GAIN_0_125, |
70 INA219_RES_12BIT_1S, INA219_RES_12BIT_1S, INA219_MODE_CONT_SHUNT_BUS)); |
70 INA219_RES_12BIT_1S, INA219_RES_12BIT_1S, INA219_MODE_CONT_SHUNT_BUS)); |
71 ESP_LOGI(TAG, "Calibrating INA219 Solar"); |
71 ESP_LOGI(TAG, "Calibrating INA219 Solar"); |
72 ESP_ERROR_CHECK(ina219_calibrate(&ina219_s_dev, (float)I_MAX_CURRENT, (float)I_SHUNT_RESISTOR_MILLI_OHM / 1000.0f)); |
72 ESP_ERROR_CHECK(ina219_calibrate(&ina219_s_dev, (float)I_MAX_CURRENT, (float)I_SHUNT_RESISTOR_MILLI_OHM / 1000.0f)); |
73 } |
73 } |
74 |
74 |
94 * the solar chip as if it is charging. |
94 * the solar chip as if it is charging. |
95 * 3. Only solar sensor. Use scenario 4, but show measured values. |
95 * 3. Only solar sensor. Use scenario 4, but show measured values. |
96 * 4. Fake everything. |
96 * 4. Fake everything. |
97 */ |
97 */ |
98 if (! ina219_state->Battery.fake) { |
98 if (! ina219_state->Battery.fake) { |
|
99 /* |
|
100 * Note, on Arduino power down and resume works, but not on esp-idf. |
|
101 * This could save only 0.5 mA per device. |
|
102 */ |
|
103 // ESP_ERROR_CHECK(ina219_configure(&ina219_b_dev, INA219_BUS_RANGE_32V, INA219_GAIN_0_125, |
|
104 // INA219_RES_12BIT_1S, INA219_RES_12BIT_1S, INA219_MODE_CONT_SHUNT_BUS)); |
99 ESP_ERROR_CHECK(ina219_get_bus_voltage(&ina219_b_dev, &bus_voltage)); |
105 ESP_ERROR_CHECK(ina219_get_bus_voltage(&ina219_b_dev, &bus_voltage)); |
100 ESP_ERROR_CHECK(ina219_get_shunt_voltage(&ina219_b_dev, &shunt_voltage)); |
106 ESP_ERROR_CHECK(ina219_get_shunt_voltage(&ina219_b_dev, &shunt_voltage)); |
101 ESP_ERROR_CHECK(ina219_get_current(&ina219_b_dev, ¤t)); |
107 ESP_ERROR_CHECK(ina219_get_current(&ina219_b_dev, ¤t)); |
102 ESP_ERROR_CHECK(ina219_get_power(&ina219_b_dev, &power)); |
108 ESP_ERROR_CHECK(ina219_get_power(&ina219_b_dev, &power)); |
|
109 // ESP_ERROR_CHECK(ina219_configure(&ina219_b_dev, INA219_BUS_RANGE_32V, INA219_GAIN_0_125, |
|
110 // INA219_RES_12BIT_1S, INA219_RES_12BIT_1S, INA219_MODE_POWER_DOWN)); |
103 ESP_LOGI(TAG, "Battery VBUS: %.04f V, VSHUNT: %.04f mV, IBUS: %.04f mA, PBUS: %.04f mW", |
111 ESP_LOGI(TAG, "Battery VBUS: %.04f V, VSHUNT: %.04f mV, IBUS: %.04f mA, PBUS: %.04f mW", |
104 bus_voltage, shunt_voltage * 1000, current * 1000, power * 1000); |
112 bus_voltage, shunt_voltage * 1000, current * 1000, power * 1000); |
105 } |
113 } |
106 if (xSemaphoreTake(xSemaphoreINA219, 25) == pdTRUE) { |
114 if (xSemaphoreTake(xSemaphoreINA219, 25) == pdTRUE) { |
107 if (ina219_state->Battery.fake) { |
115 if (ina219_state->Battery.fake) { |
121 ina219_state->Battery.valid = true; |
129 ina219_state->Battery.valid = true; |
122 xSemaphoreGive(xSemaphoreINA219); |
130 xSemaphoreGive(xSemaphoreINA219); |
123 } |
131 } |
124 |
132 |
125 if (! ina219_state->Solar.fake) { |
133 if (! ina219_state->Solar.fake) { |
|
134 // ESP_ERROR_CHECK(ina219_configure(&ina219_s_dev, INA219_BUS_RANGE_32V, INA219_GAIN_0_125, |
|
135 // INA219_RES_12BIT_1S, INA219_RES_12BIT_1S, INA219_MODE_CONT_SHUNT_BUS)); |
126 ESP_ERROR_CHECK(ina219_get_bus_voltage(&ina219_s_dev, &bus_voltage)); |
136 ESP_ERROR_CHECK(ina219_get_bus_voltage(&ina219_s_dev, &bus_voltage)); |
127 ESP_ERROR_CHECK(ina219_get_shunt_voltage(&ina219_s_dev, &shunt_voltage)); |
137 ESP_ERROR_CHECK(ina219_get_shunt_voltage(&ina219_s_dev, &shunt_voltage)); |
128 ESP_ERROR_CHECK(ina219_get_current(&ina219_s_dev, ¤t)); |
138 ESP_ERROR_CHECK(ina219_get_current(&ina219_s_dev, ¤t)); |
129 ESP_ERROR_CHECK(ina219_get_power(&ina219_s_dev, &power)); |
139 ESP_ERROR_CHECK(ina219_get_power(&ina219_s_dev, &power)); |
|
140 // ESP_ERROR_CHECK(ina219_configure(&ina219_s_dev, INA219_BUS_RANGE_32V, INA219_GAIN_0_125, |
|
141 // INA219_RES_12BIT_1S, INA219_RES_12BIT_1S, INA219_MODE_POWER_DOWN)); |
130 ESP_LOGI(TAG, " Solar VBUS: %.04f V, VSHUNT: %.04f mV, IBUS: %.04f mA, PBUS: %.04f mW", |
142 ESP_LOGI(TAG, " Solar VBUS: %.04f V, VSHUNT: %.04f mV, IBUS: %.04f mA, PBUS: %.04f mW", |
131 bus_voltage, shunt_voltage * 1000, current * 1000, power * 1000); |
143 bus_voltage, shunt_voltage * 1000, current * 1000, power * 1000); |
132 } |
144 } |
133 if (xSemaphoreTake(xSemaphoreINA219, 25) == pdTRUE) { |
145 if (xSemaphoreTake(xSemaphoreINA219, 25) == pdTRUE) { |
134 if (! ina219_state->Solar.fake && ! ina219_state->Battery.fake) { |
146 if (! ina219_state->Solar.fake && ! ina219_state->Battery.fake) { |