free hardware

Free software has made software ever more accessible on many levels, from cost to ability to learn an modify. Software must run on hardware, yet there is no free hardware platform in existance.

I am currently working on a standard firmware for the Arduino platform which allows users to just plug in the Arduino and control it from their host software. This means that the user would not have to learn how to program the Arduino in order to get sensor data, control lights and motors, etc. Instead everything would be set up and controlled from the host software that is already familiar to the user.

protocol design

I considered a number of protocols during the design and implementation of the Firmata firmware for Arduino

USB HID
Arduino could not be a proper USB HID device because it uses USB-serial. But it still could use the HID protocol. I opted not to use it because it is a very complicated and obfuscated protocol, which is a perfect example of design-by-committee. In the long run, it would probably be best to use it though...
ASCII-based protocols
There are a number of simple, ASCII-based protocols out there which are generally pretty easy to implement and understand. The problem is that they are very verbose, and the Arduino is limited to serial rates, so a maximum of 115,200 bits/second. One example is the Simple Message System for Arduino. It needs 4 bytes to set one digital pin, 56 bytes to set all digital pins. Firmata needs 3 bytes to set one digital pin or all digital pins.


$Id: hardware.html,v 1.1 2008-02-13 18:52:35 hans Exp $