0

I'm powering a NodeMCU with 4 x AA batteries (6v, ~9,600mAh). I am running ESP.deepSleep([milliseconds]) to minimize power consumption. Even with deepSleep I am seeing a precipitous drop off in battery voltage. I've gone from 6.00v to 5.62 in 28 hours. Does this make sense? I was expecting the board to consume SIGNIFICANTLY less power and I'm at a loss.

I have the reset/wakeup pins (D0, D3, and D4) set connected to 3.3v with resistors and I've jumped the reset pin to D0 to make the wakeup call. Nothing else is connected! Does this power draw make any sense??

As far as the operation goes, it's waking up and posting data just fine.

I've researched various power saving techniques and the best description I've found is here. I really don't want to start hacking up ESPs though. That is time consuming and presents a real opportunity (ahem...guarantee) for me to destroy a lot of boards!

My questions:
1.) Are there other SW-based methods for improving power use on the NodeMCU 12E?
2.) Where do I probe a 12E to read current draw with a multimeter
3.) Are there "dumber" ESP8266 modules that have a reset pin, a few? GIPOs and a VIN capable of handling a 6v input with either a 5v and/or 3.3v output? Product recommendation...I know...I'm hard up though and need some guidance.

I'll make these separate questions if necessary.

I am going to by an in-line current reader. I need to stick with a multimeter for now.

  • 1
    have you seen this? ... losant.com/blog/making-the-esp8266-low-powered-with-deep-sleep – jsotola Aug 26 '18 at 3:09
  • I've not but a cursory read of the demo seems to be exactly what I've done...except that the entire thing seems to run in setup(). I'll re-read the summary tomorrow after some sleep and with some coffee. Thank you!! – acpilot Aug 26 '18 at 3:21
  • perhaps it's the voltage regulator and the USB interface and all the other circuitry on the nodemcu board that still consumes power, despite the ESP module being in deep sleep - searching nodemcu power consumption deep sleep in your search engine of choice will show many documented examples of this behaviour – Jaromanda X Aug 26 '18 at 4:03
  • That's what I'm thinking based on all of the other stuff I've read. – acpilot Aug 26 '18 at 13:17
1

If you can't do anything about the hardware you're using (lower powered USB interface, etc) then the top thing you can do is run the wifi radio as little as possible. The radio uses a lot of power, so the less time it's on for and the less network traffic you send, the less power you'll use.

When the board comes out of deep sleep and reconnects on wifi again, it performs a DHCP exchange to find out its IP address. Configuring a static IP address, network mask and router address will avoid this and let the radio stay on for less time.

The ESP8266 SDK also automatically saves wifi credentials to flash every time you call WiFi.begin(). This is probably not what you want. Disabling this will also help save power.

The new wifi connect code would look something like this:

IPAddress ip( 192, 168, 0, 1 );
IPAddress gateway( 192, 168, 0, 254 );
IPAddress subnet( 255, 255, 255, 0 );

WiFi.forceSleepWake();
delay( 1 );
WiFi.persistent( false );
WiFi.mode( WIFI_STA );
WiFi.config( ip, gateway, subnet );
WiFi.begin( WLAN_SSID, WLAN_PASSWD );

You'd need to replace the specific IP address, gateway (router) address and subnet mask with ones that work for your network. And you'll need to allocate a static IP address either from a range that your router sets aside, or you'll need to configure your router to permanently allocate the address - how you do this totally depends on the router you're using.

The other way to save wifi-related power is to use as lightweight a protocol as possible and do as little work while wifi is on as possible.

For instance, suppose you need to compute a complicated piece of data that you're transmitting over wifi. Maybe it's a chunk of XML or a JSON string. Or you need to read a slow sensor. Do all that work before you enable wifi, and have the data ready to transmit.

Or if you're receiving data, if at all possible, finish receiving the data and turn off wifi before you do any work with the data.

If you have any choice in the matter, use as simple a protocol to transmit the data as possible. UDP is ideal - you can transmit a single packet (but you won't know if it's been received). TCP requires several packets of handshake at connection startup and shutdown. If you use a secure (SSL) connection over TCP that's even more data and computation.

If your very top priority is battery life, UDP is ideal though it's not reliable and not secure.

There's a great series of articles on power saving at

https://www.bakke.online/index.php/2017/05/21/reducing-wifi-power-consumption-on-esp8266-part-1/

https://www.bakke.online/index.php/2017/05/21/reducing-wifi-power-consumption-on-esp8266-part-2/

https://www.bakke.online/index.php/2017/05/22/reducing-wifi-power-consumption-on-esp8266-part-3/

Part 1 is about measuring power use; part 2 is about switching the wifi radio on and off and part 3 gets partly into the stuff I talked about above.

  • HW is the issue (as Jaromanda X pointed out as well). This is good advice and I'll have to find ways to optimize. Bummer, but doable. Do you know of other ESP HW that has integrated WiFi or is the 12E pretty much it? – acpilot Aug 26 '18 at 15:14
  • @acpilot All ESP8266s have integrated Wifi. It's part of the CPU - it's not an ESP8266 without it. There are quite a few ESP8266 boards without USB ports, or just using USB for power, not data (like the Sparkfun Thing). ESP8266 boards that can be programmed with just a regular USB cable have an integrated USB adapter; boards that need an FTDI cable to program them don't and may avoid the USB/serial adapter power drain. (FTDI is a USB to serial converter that's commonly used with ESP8266s and Arduinos) – John Romkey Aug 28 '18 at 1:57

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.