What is Arduino?
Arduino is an open-source electronics prototyping platform based on flexible, easy-to-use hardware and software. It's intended for artists, designers, hobbyists, and anyone interested in creating interactive objects or environments.
Create "sketches" (combo of C/C++) in a Java based IDE and uploaded to Arduino via serial port.
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
This example code is in the public domain.
*/
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
What is firmata?
Firmata is a generic protocol for communicating with microcontrollers from software on a host computer. It is intended to work with any host computer software package.
This firmata protocol uses the MIDI message format but does not use the whole protocol.
Make sure you use version 2.2. There are known issues with 2.3.
- Rick Waldron for johnny-five and his NodeConf presentation
- Chris Williams for his NodeBots - The Rise of JS Robotics post and node-serialport
- Julian Gautier for his firmata implementation in JS
- Emily Rose for her Security system NodeConf 2012 presentation
- NodeUp 27 - a robotics deep dive show
-
Not fully implemented or currently active.
-
A full IDE aimed at replacing the Arduino IDE.
-
Implements own command wrappers in a custom sketch.
-
Port of pyFirmata. No longer active.
-
LED blink with firmata
-
Based on Node.js EventEmitter
-
LED blink with wall-e
The wall_e prompt (built on Pry)
What about EventMachine?
-
Evented serial communication depends on the pure ruby version. Some issues with pure ruby version especially with *nix signals.
-
Blocks the main thread of execution. Forces the design into client/server relationship.