float _sensor_battery_saveMode = ENERGY_SAVE_MODE_DISABLED; uint16_t energySavingIterations = 0; // Copied from https://arduinodiy.wordpress.com/2016/12/25/monitoring-lipo-battery-voltage-with-wemos-d1-minibattery-shield-and-thingspeak/ #ifdef SENSOR_BATTERY float battery_voltage() { // ESP8266 ADC pin input voltage range ist 0V .. 1V // The Wemos D1 mini does already contain a voltage divider circuit: A0(Wemos PCB) -- [220kOhm] -- ADC (ESP8266)-- [100kOhm] -- GND // The (+) pole of the battery is connected to the A0 pin of the Wemos board through a additional 100kOhm resistance. // The battery voltage of 4.2V max is measured as 1.0V on ESP8266 ADC pin. uint16_t raw = analogRead(A0); float volt = raw / 1023.0; return volt * 4.2; } float battery_charging() { //debug("charging pin=" + String(digitalRead(BAT_CHARGING_PIN))); //debug("charged pin=" + String(digitalRead(BAT_CHARGED_PIN))); if (LOW == digitalRead(BAT_CHARGING_PIN)) { return BAT_CHARGE_STATE_CHARGING; } else if (LOW == digitalRead(BAT_CHARGED_PIN)) { return BAT_CHARGE_STATE_CHARGED; } return BAT_CHARGE_STATE_NOTCHARGING; } int energySavingMode() { // Give the solar panel some time to load the cell to prevent // flapping. if (energySavingIterations > 0) { energySavingIterations--; _sensor_battery_saveMode = ENERGY_SAVE_MODE_ENABLED; return 1; } // Is the battery low? if (currentSensorData[SENSOR_BAT_VOLTAGE] <= BAT_LOW_VOLTAGE) { // Entering energy saving energySavingIterations = ENERGY_SAVING_ITERATIONS; _sensor_battery_saveMode = ENERGY_SAVE_MODE_ENABLED; return 1; } _sensor_battery_saveMode = ENERGY_SAVE_MODE_DISABLED; return 0; } float isEnergySavingMode() { return _sensor_battery_saveMode; } #endif #ifdef SENSOR_USB_VOLTAGE float usb_voltage() { // ESP8266 ADC pin input voltage range ist 0V .. 1V // The Wemos D1 mini does already contain a voltage divider circuit: A0(Wemos PCB) -- [220kOhm] -- ADC (ESP8266)-- [100kOhm] -- GND // The (+) pole of the battery is connected to the A0 pin of the Wemos board through a additional 300kOhm resistance. // The USB voltage of 5V max is measured as 1.0V on ESP8266 ADC pin. uint16_t raw = analogRead(A0); float volt = raw / 1023.0; return volt * 6.2; } #endif