If I get it right, you just want to send signals in two directions. Over a distance of 1/2 mile (800m).
XBee is probably the most reliable/best solution, all the xBee PRO's can send and recieve for distances longer than 1 mile, but they are relatively expensive. The Xbees take care of the encoding and everything.
https://www.sparkfun.com/pages/xbee_guide A cheaper solution is to go for 433Mhz senders and receivers, there are lots of (chinese) suppliers making them, for really nice prices (but the range is sometimes not as good as the xBee. Also the microcontroller needs to use more memory and processor capacity for handling the inputs (encoding, error reducing/error detecting)...
There are Arduino libraries for doing this all (VirtualWire, and RCswitch (works on an ESP8266) for example).
If you want to use ESP only, there is the possibility to make a MESH-wifi network, but the range/results of this are not as good as the two options above... You could also use (a) wifi network(s) to connect them together, than the distance doesn't matter (it could also be the distance between China and the US)
Both Xbees and 433Mhz receivers and senders still need a microController (such as Arduino) to do something with the messages...
Hope this helps...