The wireless sensor modules I built for my smart home are doing fine in terms of battery life without much effort. Typical life is 1-1.5 years for AAA powered and more than double that for AA powered nodes. So I thought I would have a better look at ESP-NOW. That’s because an ideea popped up during discussion with a friend: can he build a simple sensor network, quick and easy, with off the shelf components and little electronics knowledge while still getting decent battery life?
ESP-NOW is a way for wireless modules like the EPS32 and ESP8266 to communicate with each other while using less energy than through normal WiFi. The protocol is simplified and it does not require a connection to be established and maintained. So it opens up the possibility of actually using the for future sensor nodes if it can be low power enough. My goal still remains: at least 1 year of battery life with common batteries like AA(A) and sufficiently frequent updates, typically once a minute.
Packet transmission current measurement
Thankfully there are plenty of guides around and i used this one to get started. I used a few ESP32 D1 modules (Affiliate link) and was up and running in no time. I used these modules because they are compact and have low current consumption regulators on them, compared to most boards which have high current consumption regulators. The ESP32 is better than the ESP8266 because it has a wider variety of wake up modes that are useful for building sensor nodes like motion sensors and door sensors.
One of the nodes, the transmitter sleeps and wakes up periodically to send a packet. Here is the current measurement during a packet transmission:
The ESP32 RTC powers the module and it starts executing the code. First it goes through the boot and calibration process and then it goes to the user code which finally transmits the packet, during the las spike. It all takes around 320ms, which is quite a bit of time.
Averaging all this and assuming 1 packet transmitted every minute comes up to 326uA, on average for the active transmission. A simple temperature sensor with ESP-NOW will end up spending 20X more energy transmitting compared to my sensor nodes (typ. 10uA for transmitting in same conditions).
And there is one more thing: the ESP32 needs at least 2.3V input to operate, which when coupled with the high peak current during the transmission means you can only use about 40-50% of the capacity in 2 AA batterries, or 1.3Ah. With 3 AA batteries and an LDO you can probably squeeze closer to 80-90% of the batteries.
So for the simple application – a wireless temperature sensor, the ESP-NOW would be able to transmit about 30X less packets than RFM69 based sensor nodes. So I can make a wireless temperature sensor that updates every minute and lasts 15 years on a pair of AAs. In comparison, an ESP8266 module could squeeze 1 year of battery life with a slower update, maybe every 2-3 minutes. This could be useful, depending on context.
I though this would be easy, but no. First I removed the LED from the ESP32 D1 modules, which is always on. I was expecting to get pretty good values, but no, the current was around 750uA. Quick inventory:
- CP2104 sleep current is 100uA typ, 200 max.
- Regulator XC6204 should be 70ua
- esp 32 deep sleep should be 10uA
Where the rest from? – 500uA not accounted for. After some digging it appears that the CPI2104 needs another pull resistor to be put in proper sleep modes, which is hard to achieve with the ready built module. But even with that fixed, we are looking at 200-300uA of sleep current for the board, which is too much.
So the best way is to use a bare ESP-WROOM32 module and use some USB-UART adapter during programming only. And, in case you are wondering, plenty of so called low power boards have the same issues. I tried it too on one i own. So there is no off the shelf board for low sleep current at the moment, just have to use the base ESP-WROOM32.
Conclusion: is it feasible?
This brings me to the question from the beginning: is it feasible to use off the shelf ESP32 modules to build a wireless, battery powered sensor modules with easy to find off the shelf modules? The simple answer is NO.
The long answer is that it might be doable if certain conditions are met:
- We need to use just the ESP32 chip or ESP-WROOM-32 module (Affiliate link) and not boards that contain the usual USB-UART adapter. This means no easily available boards work, we need custom PCB or lots of tiny wiring.
- Even rather larger AA batteries will still be limited to at most 1 packet every 3-4 minutes to get 1 year of battery life.
So yes, ESP-NOW has potential to make a sensor network. But getting a decent battery life still needs quite a bit of work, maybe custom boards. Off the shelf components does not get you there.