An RPC-like binary protocol, resident firmware, and popular language bindings for remote programmatic access to AVRs and Arduinos. You program in your favorite native language on your local host and when you execute your local code, it runs remotely on your remote AVR via COM port, USB, or TCP/IP socket.

Project Description

An AVR/Arduino runs the farther firmware that listens on an interface like the USART, virtual COM port, etc and executes code programmed on a remote host.

BaseBoard * board = new Arduino();

if (board->init())
    // Loop here or do whatever
    board->SetHigh(PinIODir.Out, PinIO.digital1);
    board->SetLow(PinIODir.Out, PinIO.digital1);

delete board;

auto myavr = new Arduino();

    myavr.digitalPin(PinIOPole.High, PinIODir.Out, PinIO.One);


This project consists of three primary components:
  1. AVR firmware that is loaded onto an AVR or Arduino
  2. Language bindings that you use on the remote host to control the AVR
  3. The protocol used between the language host and the AVR

The idea is that you have an AVR/Arduino running the farther firmware that listens for protocol packets on some interface, such as the USART, virtual COM port, or TCP/IP connection. On the remote host, you write a program in one of the supported languages for which there is a binding (see below for currently supported language bindings), and then execute your code and view the results on your AVR/Arduino remote system. The remote AVR-based system might be a wireless sensor, PC-connected arduino with LEDs, intelligent home automation 'ware' (a la Open Housewares http://www.openhousewares.com), a remote servo-supported robotic project, or anything you can imagine that you want to control remotely and programmatically.


AVR: ATmega, ATtiny
Host: Linux, Windows, OS X
Connection: USART, virtual COM port, TCP/IP socket, pipe, shared memory, USB
Compiling: msgpack, avr-gcc

Note: If you would like support for the XMEGA or another language binding please let us know your interest at the contact email below or by leaving a post on the forums, also listed below.

Language Bindings

Currently, there is support for bindings in AVR asm, C/C++, C#, D, and JavaScript.


Home Page: http://farther.avr-firmware.net/ <still under construction>
Wiki Pages: http://wiki.opendesignstrategies.org:8040/display/FARTHER
JIRA Issues and Feature Requests: http://jira.opendesignstrategies.org:8080/browse/FARTHER
Community Forums: http://www.avr-firmware.net or use these http://farther.codeplex.com/discussions


Farther Development Team: farther-dev (at) avr-firmware (dot) net

farther-antipix-custom.png d-embedded.png js-embedded.png oshw-logo-antipixel.png linux.png

Last edited Apr 28, 2013 at 5:12 AM by DroidEngineer, version 11