If you don't need WiFi or BLE, any version of the ESP32 will be a waste of hardware. They're SOCs specifically designed for wireless.
A Feather M0 Express would probably be the simplest alternative with equivalent processing power and CircuitPython support. It has the same LiPo charging/changeover features, and its nominal operint current is 11mA (3mA of whch is the power LED).
https://www.adafruit.com/product/3403
billtubbs wrote:Presumably, the WiFi and Bluetooth increase power consumption quite a bit.
Yes.
billtubbs wrote:is there a way to completely disable them so they don't add to power consumption when the ESP is on?
No. All versions of the ESP8266 and ESP32 have a ROM operating system that keeps the radios running and happy.
billtubbs wrote:Will using CircuitPython increase power consumption? E.g. by increasing processing work during wake-from-sleep and sleep, or by increasing the duration of the data capture process?
CircuitPython doesn't change the current consumption, but as a rule of thumb you can expect any interpreted language to run about 1/10th as fast as compiled code. That will only have an effect on long-term battery life if you put the microcontroller to sleep between readings, and will be negligible compared to the cost of running the XBee's radio (120mA while transmitting).
billtubbs wrote:Is there any information or would you be able to hazard a guess as to whether both of these feathers would operate overnight doing intermittent sampling (e.g. once a minute) on a single battery charge? (allowing for some power consumption by the sensors and XBee transmitter).
It depends on the amount of energy stored in your battery.
If both boards run continuously (11mA for the Feather and 1mA for an XBee's quiescent current) the combined energy load is 12mAh per hour. If the XBee spends 1 second per minute transmitting, that amortizes down to 120mAs * 60s * 1h/3600s = 2mAh per hour. Adding a bit of safety margin,we can call the overall load 15mAh per hour. Running that for 12 hours would have a total energy cost of 180mAh.
That means a 250mAh LiPo should be able to keep the system running at least 12 hours from a full charge:
https://www.adafruit.com/product/328
If you step up to a 2200mAh 18650 LiPo, you should be able to get about 10 days from a full charge:
https://www.adafruit.com/product/1781
Since you mentioned periodic sampling, you might also want to look a the TPL5110 low-power timer:
https://www.adafruit.com/product/3435
It controls power to a circuit, and uses less than 100nA if you cut the trace to the power LED. With the trace uncut, leakage through the LED is about 20uA.
The TPL5110 wakes up at regular intervals (which you can set from 100ms to about 2 hours), and on its own will stay awake until 50ms before the next counting period. It has a DONE pin though, so a microcontroller can shut off its own power any time it wants. The TPL5100 will drop back to low-power mode until the next counting period.
If we assume it takes 4 seconds for the Feather M0 and XBee to wake up, take a measurement, and transmit the reading, the amortized 2mAh per hour for the XBee remains the same, but the quiescent load for the Feather and XBee drops from 15mAh per hour to 1mAh per hour. The total energy load would be around 3mAh per hour, and the 250mAh LiPo linked above should keep it running for about 9 weeks.
And frankly, that's a pessimistic estimate. It only takes ~100 microseconds for a Feather to wake up and start running code, and you can do a lot in a few tenths of a second. An XBee only needs about 250ms to wake up and make a radio connection to its network, so you could probably do the whole measure-and-transmit process in less than 1 second.