Go Down

Topic: Arduino Network causing severe battery drain on WiFi connected devices. (Read 3 times) previous topic - next topic


So I have a weather station that uploads weather data to COSM every 10 seconds. This works fine.

However, I noticed that when my Weather Station is running, the battery life on all of the mobile devices that are connected to the network via WiFi (i.e. several mobile phones, couple of tablets, various brands/types) is terrible. To put this difference in perspective, with the Weather Station on, the battery life on my phone is about 4 hours. With the Weather Station off it's 2 days. This is repeatable every time.

I can see from some diagnostics on my phone that 98% of the battery use is due to WiFi RX Wakelocks. In other words, it's receiving stuff on WiFi and having to wake up deal with it.

Wireshark tells us what the problem is. Every time the Weather Station uploads its data to the internet it sends an ARP broadcast:

ARP Who has  Tell is the IP of the Weather Station, and is the gateway.

So what it's doing is trying to get the MAC address for the router from its IP address so that it can communicate with it. This is absolutely normal... ONCE (it should store the MAC address in its ARP table), but it does this every time it tries to connect. The rest of my devices only send such ARP broadcasts once after a reboot.

Does anybody have any suggestions on how to fix or work around this?



Interesting. I see the same thing happening with my arduino ethernet: every time it wants to talk to its target web server, there is an ARP request. Mind you, there's a bunch more ARP requests going on that don't make sense either - some of them generated by the router, and my Mac and XP box seemingly can't remember each others MAC address. I suspect that the same thing is going on with my wifi shield too but I can't see that traffic with wireshark.


Put a cheap router between them and have two subnets (such as 198.168.0.* and 198.168.1.*), or if your gear is capable, change the routing in it to implement this.  The ARPs will not find their way off the arduino's subnet to the other one where your phones and tablets are connected.

I'll hedge a bit and say I'm pretty sure that will solve the problem, but not 100%.  ARP is OSI L1 and therefore does not pass through the router.


Thanks for the replies so far. To answer everyone...

I'm using an Arduino Ethernet, not a WiFi one: http://arduino.cc/en/Main/ArduinoBoardEthernet

I tried putting it on another subnet ( as opposed to, but the requests still appear on every device on the LAN. I'm guessing this is because they're sent to a MAC of FF:FF:FF:FF:FF:FF. I didn't try putting another router between the device as I don't have a spare. Really though, I don't want yet another device plugged in with even more cabling, when this seems like a an issue that could be fixed in the library or code.

Go Up