# high accuracy wireless clock coordination + data transfer

I'm working on a robotics project that requires what is probably a somewhat strange data exchange requirement. I was hoping someone would have ideas on what technologies would be best to implement it. The problem is as follows:

I have many separate embedded systems (nodes) that need to maintain an extremely accurate, coordinated clock. Absolute accuracy doesn't matter, but they must agree with each other to at least 10us (hopefully better). They also need to send and receive data to/from a central computer. The data requirement is very small. Something like a couple of bytes at around 100Hz. So a total of ~1KB/s per node.

I was thinking I would be able to do this by using the laptop to send clock coordination packets, and a small WiFi microprocessor (like the esp8266) on each node to receive the packets. Lets say every 10ms, the laptop broadcasts a UDP packet. If I configure all the nodes to have the same IP address, they will receive the packet at essentially the same time. The only uncertainty in the clock coordination ping arriving at the nodes at the same time will be the uncertainty in the amount of time it takes for the esp8266 to process the packet. However, I also need the esp8266 to send data back to the laptop. But my understanding is that this is problematic if all the devices have the same IP address...

Other thoughts:

• Ideally I would be able do this all directly from the nodes to the laptop (ad-hoc network). If I have to I can use a wireless AP connected to the laptop.

• I know there are clock coordination schemes out there that use TCP/IP. I just don't think any of them are good enough to get the kind of clock accuracy I want. I could be wrong about this (ok technically there is something called Wi-Fi TimeSync but it doesn't seem to be commercially available yet).

• Although it wouldn't be very elegant, I could live with having 2 esp8266 modules on each embedded system. 1 could share the same IP address with all other nodes and use the UDP packet coordination scheme discussed above. The 2nd would use TCP/IP with a unique address to communicate with the laptop.

• There are 433mhz and 900mhz modules like this: http://wiki.seeed.cc/433Mhz_RF_Link_Kit/ that would be very simple and fast. Just put a clock on the data line of the transmitter and read the clock off the receiver on all nodes. However, I don't think this is legal under FCC regulations: http://www.edn.com/electronics-blogs/eye-on-iot-/4437311/Using-433-MHz-for-wireless-connectivity-in-the-Internet-of-Things

edit:

Thanks all for the comments. GPS is actually a great solution. I wasn't aware that they had PPS clocks that are so accurate. I think I will use that in addition to the esp8266. @analogsystemsrf, you are correct. This is for an ultrasonic positioning system.

• Please write specific questions relating to the problems you want solved, instead of "any thoughts/ideas appreciated". Clear communication will get you better answers. – Voltage Spike Jun 21 '17 at 15:51
• 10us is a pretty long time. But you better describe what you are trying to do to avoid XY-problems. – Eugene Sh. Jun 21 '17 at 15:54
• Are you attempting ultra-sound positioning? – analogsystemsrf Jun 21 '17 at 16:04
• A GPS module will give you sub us timing on 1PPS – sstobbe Jun 21 '17 at 16:06
• Is your question essentially, "On a bi-directional link, I want to synchronize/coordinate data streams between several separate nodes on a wireless network and a central computer to at least 10 $\mu s$"? It's not entirely clear what you want in an answer. – Vladislav Martin Jun 21 '17 at 16:48