Flashing the Arduino Dock

The Arduino Dock allows the Omega and the ATmega328P microcontroller interact with each other. Having an OS with the connectivity power of the Omega communicate easily with a microcontroller can be very powerful used effectively. We can do amazing things with the Omega communicating with the ATmega328P chip such as flashing the microcontroller wirelessly.

Programming and flashing a microcontroller mean the same thing, you are taking compiled code and uploading it to a microcontroller. The terms are often used interchangeably.

We’ll first cover how to setup your computer and Omega, and then move on to cover how to actually flash your Arduino Dock.

Prerequisites

You’ll need to first make sure that your Omega has connected to internet.

Then you’ll want to ssh into the Omega’s terminal in order to install the arduino dock package.

We’ve written a guide to connecting to your Omega’s terminal via SSH in case you don’t know how!

To install this package you’ll need to use opkg. Enter the following commands on the command-line:

opkg update
opkg install arduino-dock-2

Accessing the Omega

The Omega must be accessible via its URL http://omega-ABCD.local where ABCD is your Omega’s unique code.

The requirements vary depending on your Operating System:

Operating System Actions Required
Windows Install Apple’s Bonjour Service
OS X Nothing, good to go
Linux Zeroconf services should already be installed, should be ok

Arduino IDE

This has to be done just once to enable flashing wirelessly.

Install the latest Arduino IDE from the good folks over at Arduino. We did all of our testing using Version 1.8.0.

Modification of boards.txt

The regular Arduino Uno has no way of communicating with your computer via WiFi, but the Omega provides the Arduino Dock with a means of wireless communication, so we’ll have to let the Arduino software know! This requires a one line addition to the boards.txt file in your Arduino IDE installation.

Open the boards.txt file in any text editor. The following table outlines where the boards.txt file can be found:

Operating System Location of boards.txt
OS X /Applications/Arduino.app/Contents/Java/hardware/arduino/avr/boards.txt
Windows C:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt

Once it’s open, add the following line:

uno.upload.via_ssh=true

Doesn’t matter where you add it, you can nestle it with the other uno. settings if you like.

Doing the Actual Flashing

Now we get to the fun part, flashing sketches to the ATmega chip!

There are two methods for flashing the ATmega328P chip using the Omega. You can flash it using the Arduino IDE wirelessly OR you can compile the file on your computer, copy it to the Omega, and then flash the chip from the command line.

We strongly recommend using the Arduino IDE, and only recommend flashing the ATmega328P from the command-line as a backup plan.

Wireless Flashing with the Arduino IDE

Thanks to the setup you did on your computer and the Arduino Dock, you can actually use the Arduino IDE on your computer to wirelessly flash Sketches to the Arduino Dock, so long as your computer and the Omega on your Arduino Dock are on the same WiFi network.

The process that takes place with this method:

  1. Your computer and the Arduino IDE compile the Sketch
  2. The compiled sketch is transferred to your Omega using SSH
  3. The Omega will flash the microcontroller

The Steps:

In the Arduino Tools menu, select “Arduino/Guinuino Uno” for the Board, and your Omega-ABCD hostname as the Port: Arduino IDE Tools->Port menu

If your Omega does not show up in the Port menu as a network port, restart the Arduino and wait for 30 seconds:

When your sketch is ready, hit the Upload button. Once the sketch is compiled, it will require your Omega password to upload: Arduino IDE Uploading Sketch

The IDE actually creates an SSH connection with the Omega to transfer the compiled hex file, and the Omega with then flash the ATmega microcontroller using 4 GPIOs.

Once the upload completes, the info screen will show something along the lines of: Arduino IDE Upload Done

The ATmega chip is now running your sketch, enjoy!

Note: An orange message saying ash: merge-sketch-with-bootloader.lua: not found may appear in the info screen. You can safely ignore this message, it does not affect the sketch upload.

Manually Flashing on the Command line

Like we mentioned before this method should only be used as a backup to using the Arduino IDE. This is handy if the Arduino IDE cannot detect your Omega as a Network Port due to any connection/setup issues.

First, enable verbose output during compilation in the Arduino IDE Preferences: Arduino IDE Preferences

Hit the verify button to compile the sketch, once it’s complete you will have to scroll to the right to find the path to the compiled hex file: Arduino IDE Compiled Hex file

Copy this path and then transfer the file to your Omega.

For more information on transferring files to your Omega from your computer you can check out our extensive guide to transferring files to your Omega

Now that the hex file is on your Omega, you can flash it to the ATmega chip from the Omega’s terminal:

sh /usr/bin/arduino-dock flash <hex file>

For example:

# sh /usr/bin/arduino-dock flash /root/blink2.hex
> Flashing application '/root/blink2.hex' ...
device         : /dev/i2c-0       (address: 0x29)
version        : TWIBOOTm328pv2.1??x (sig: 0x1e 0x95 0x0f => AVR Mega 32p)
flash size     : 0x7800 / 30720   (0x80 bytes/page)
eeprom size    : 0x0400 /  1024
writing flash  : [**************************************************#?] (3210)
verifying flash: [**************************************************#?] (3210)
> Done

The sketch has been flashing and is running on the Arduino Dock, enjoy!