If you have an Arduino project where the dev board is stuck inside a machine, or attached to the rafters or is inaccessable in some other way, a wireless programming/debugging link will save you tons of time. This tutorial is an extension on Rob's version. In this tutorial, no extra firmware or hardware (other than a capacitor) is necessary. Just use the default bootloader. I use a 'classic' Arduino but of course this can be easily adapted to any version or clone.
You will need 2 XBee adapter kits, 2 matching-protocol XBee modules, an FTDI cable (or other FTDI breakout board, if you can wire it up correctly) and a 0.1uF capacitor (although sometimes a 1.0uF capacitor worked better)

Check out this diagram, can you tell I spent 5 minutes on it?
One XBee will act as the 'reset transmitter', it will be attached to the computer via an FTDI cable and wireless send programming commands to the receiver. Lets set this one up first
Connect up the transmitter adapter with XBee modem to your computer using the FTDI cable
And start X-CTU, just like on the configure page.

Once you've connected/tested that you can communicate with the modem, go to the configure tab and read in the current setup
Then set the following:
The PAN ID should be some 4 digit hex number that will only be used by these two modems - to prevent confusion

Set the baud rate to 19200

Set pin D3 to be a digital input

And set the Digital IO change detect to FF. Technically I think you can set it to 0x08, which is the mask to listen for only D3 but this certainly works fine.

Now the transmitter is set up to send the current status of pin D3 to any listening modems.
Now solder in a tiny jumper between the RTS pin and D3. This will tie the status of D3 to the status of the RTS pin which is can be configured to be used as the 'arduino reset pin'
Finally setup the FTDI cable so that the RTS pin will reset the Arduino. For Mac/Linux it will already be done but if you're using Windows you'll need to make a slight change to the driver preferences. In the Device Manager, select the USB COM port

Then right click and select Properties

Click on the Port Settings tab, and click on Advanced...

Make sure Set RTS On Close is selected. Click OK.
Now we will set up the other XBee so that it will listen to changes on pin D3. Connect it to the FTDI cable and read in the current configuration just like the first one.
The PAN ID should match the transmitter's

Set the baud rate to 19200 again

Set pin D3 to be a digital output, default high.

Set the I/O Output to Disabled. This will prevent the receiver from displaying the status update in the serial line and instead just toggle the matching pin.

Finally, set I/O line passing input address to FFFF. If you set up unique addresses for the receiver and transmitter xbees, of course you should change this to match but FFFF will match all addresses.


Now write the changes to the receiver XBee.
The transmitter XBee connects directly to the FTDI cable/computer and the receiver is wired to the target Arduino. Here I use a half-sized breadboard and rubber band since not much space is necessary. Solder a wire from pin D3 on the receiver XBee adapter, so that you can plug it into the breadboard. This is the mirrored reset line from the transmitter Xbee.
Put a 0.1uF to 1.0uF capacitor in series and connect the other side to the Reset pin.Connect the 5V and Ground lines to matching pins. Connect the RX line from the XBee to the TX line on the Arduino and vice versa. Click below for a high-res photo if necessary.
Now power the Arduino either through the USB cable or from a DC supply. That's it! Now you can reprogram it and also watch the serial monitor from more than 100 feet away




