I'd like to be able to upgrade software on an arduino without physically touching the device or stringing a cable. Can it be done?

Will pick wireless protocol that makes that easiest.

  • Have a look at Moteino.
    – Gerben
    Commented Nov 1, 2014 at 13:39
  • Looking very nice. Commented Nov 3, 2014 at 5:07
  • I have ordered a couple of Moteinos, and hopefully will get around to trying out upgrades in the next few days. Commented Nov 11, 2014 at 4:12

6 Answers 6


The best and easiest solution I've found is to use the Bluefruit EZ-Link from Adafruit. They have a module you plug into the Serial/Power/reset pins (link here) or a shield for the uno (link here). They've also got a great description and how-to guide (link here) that is pretty good. It basically appears as a serial bluetooth link in the arduino IDE and you program it like normal. It has the added benefit of being of use not only for programming, but also for sending and receiving data.


We have implemented remote updates on a Arduino Pro Mini (ATMega328P) by putting a "boot" command into the normal firmware. How it works is:

  • The host sends the command "boot" to the remote Arduino.
  • The Arduino jumps to the boot loader (program address 0x3C00 for the Pro Mini)
  • The host sends the new firmware over the link using avrdude (AVR109 protocol)

This doesn't require a new boot loader or hardware. It is not a good solution for commercial devices though, as if the uploaded firmware is corrupted the board will not be able to be put into boot loader mode without a hard reset.

Some wireless comms devices, such as XBees, have GPIO that can be toggled remotely. Connecting this to the Arduino reset pin will allow the board to be reset into the boot loader instead.


The Arduino Yun can be remotely reflashed (either via wifi or network cable): you'll have to select its IP address under the "Tools > Boards" menu of the Arduino IDE and then press the upload button as usual.


It's possible to write a bootloader running in RAM (or even in Flash, maybe in a special boot block - depends on the microcontroller).
This bootloader has to be able to establish the wireless communication, understand the protocol and to erase/write Flash memory.
There are basically two approaches for software upgrading:

  1. The bootloader looks at startup for a "software upgrade" command. If it is received, it waits for the programming sequence. If it is not received, it starts the application.
  2. The application is able to receive such a command and gives control to the bootloader then.

What protocol you choose is almost irrelevant. Just make sure that there are enough resources for keeping it in RAM/Flash. On an Arduino Due - for instance - there are more than enough resources for any such implementation.

  • Ah! Would you happen to know of some freely available code that implemented that kind of thing somewhere? Commented Nov 1, 2014 at 5:54

Yes, it can be done. Lowpowerlab.com has Moteino which can be programmed OTA.


Spark.io boards are also very nice for OTA programmable Arduino-like devices. I have one and have found it to be fairly easy to work with.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.