Go Down

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


Feb 05, 2013, 12:41 pm Last Edit: Feb 05, 2013, 12:47 pm by SurferTim Reason: 1
My bad. I downloaded the wrong manual. I have the correct one now. I would go into the router settings and check your LAN settings. What ip/subnet does it show? It should be

I would also check the dhcp server settings for your LAN. Avoid using any (add: static) ips in that range.

edit: Try dhcp on the ethernet shield. Does it pick up an ip?


I'm using (but that's OK obviously). DHCP is off (I prefer static IPs). There's no way to specify independent IP ranges for the LAN and WLAN in the settings.

However, this isn't a WLAN / LAN / IP / Subnet type issue - it's an ARP Broadcast issue. It wouldn't matter what IP or subnet I was using because the broadcasts are sent to FF:FF:FF:FF:FF:FF, so they hit every device on the same network segment. As I only have one router the entire LAN/WLAN is the same segment. The only thing my router is blocking broadcasts from/to is the WAN.

The only way to prevent broadcasts spreading too far is to add a segment to the network by adding another router as routers don't normally allow broadcasts to pass through. I could, for example, add another WiFi Access Point router and put all my mobile devices on that. But again that's additional hardware that I'd like to avoid.


Feb 05, 2013, 01:13 pm Last Edit: Feb 05, 2013, 01:22 pm by SurferTim Reason: 1
That is odd. I haven't checked my network for that. When I get a chance, I will. Mine might be doing that, but I do not see any noticeable indication yet.

edit: I probably wouldn't see anything on my wireless network. My wireless and ethernet are separate networks, so I wouldn't see the effect on my mobile devices.


You can see broadcasts on Wireshark if you want to look for it. Just download it, install it, run it, and set a filter for "eth.dst == ff:ff:ff:ff:ff:ff".

It's normal for every device on the network to send out the ARP "Who has <ip>" requests the first time they try to communicate with that IP. It's a bit like the way DNS works, in that when you enter "google.com" as an address, a DNS server will look up that IP address for that domain name and you'll use the IP address. A MAC is looked up by IP address by asking every device on the network "Who has <ip>". The device that has that IP will respond with its MAC address and then the two devices can then communicate.

For example, if you reboot your PC, the first time it tries to connect to the internet it will send out a "Who has" broadcast (assuming is your gateway's IP and you have that IP set as the default gateway on your PC). Whichever device has that IP address will respond back with its MAC address. Then your PC will know what MAC address to send stuff to when communicating with your gateway.

What is meant to happen, however, is that the MAC address for a given IP address is meant to be stored in the device's ARP table. You can see the ARP table on Windows by opening a command prompt and doing "arp -a". This table prevents the need to ask all the devices on your network who has a given IP address every time you want to talk to that IP because the device already knows that information and has remembered it. You can also add MAC addresses manually and permanently (until you manually delete them) with something like "arp -s 00-aa-bb-cc-dd-ee".

So the problem with the Arduino Ethernet is that these ARP entries are not being cached and it's asking the entire network who has the gateway's IP address every time it sends stuff. Ideally it should cache the IP to MAC address entries, but I'm guessing with limited memory on the Ethernet card this isn't possible. Also it would be nice if you could tell it in code what the MAC address of an IP is(i.e. the same as "arp -s"), as it's not very often my router changes MAC addresses.


Feb 05, 2013, 01:40 pm Last Edit: Feb 05, 2013, 02:19 pm by SurferTim Reason: 1
Thanks, but I think I have that part down.  ;)

I just have never checked the ARP broadcast before. Like I said, my wireless and ethernet ports are separate networks. I can bridge them, but I don't. When I do my send every 30 seconds, I am not likely to notice one extra pre-send ARP broadcast unless I was looking.

I do use the DNS thing with the w5100 tho. Instead of using a domain for each send, which does a dns lookup for every send, I do one dns request, then use that ip for a while. That really speeds up things.

edit: I think I see what you are saying now. You think that extra ARP broadcast is causing the mobile device "wake-on-lan" to activate?

Go Up