I was extremely excited to announce the official release of Firefly version 1.006 earlier this week. For those who aren't familiar with Firefly, allow me to provide a short introduction. Firefly is a set of software tools dedicated to bridging the gap between Grasshopper (a free plug-in for Rhino), the Arduino micro-controller, the internet and beyond. It allows real-time data flow between the digital and physical worlds and will read/write data to/from internet feeds, remote sensors and actuators, mobile phone devices, the Kinect, and more. There are a lot of new components in this release (including the Arduino Code Generator, Upload to I/O Board, UDP and OSC Listeners and Transmitters, XML Search, and State Detection) that I thought it would be a good idea to put together a few videos showing some of the latest features. So without further ado...
This first video shows the potential of the new Arduino Code Generator and the Upload to I/O Board components. In my opinion, one of the greatest limitations of the previous versions of Firefly was that your Arduino board always had to be tethered to your computer via the USB cable. This was because Firefly communicates back and forth to Grasshopper through serial communication. However, sometimes you just want to use Grasshopper (and its visual programming interface) to prototype your design and then unplug it from your computer to run off external power. Now, you can!
The Arduino Code Generator attempts to convert any Grasshopper definition into Arduino compatible code (C++) on the fly. It works by detecting components that are 'upstream' from the Uno/Mega Write component. The Code Generator checks the component ID against a library of custom C++ functions which then get added to the code if there is a match. The code can be simultaneously saved as a .pde (Arduino Sketch) file to be opened in the Arduino IDE.
In addition, there is also a new Upload to I/O Board component which allows you to upload any sketch (could be from the Code Generator or any other sketch) directly to your Arduino board from within the Grasshopper environment. A lot of stuff happens behind the scenes with this component. Essentially it creates a dynamic MakeFile and calls a shell application to convert the .pde file into a .cpp (C++) file and then into .hex code (machine readable code) to be uploaded to the microcontroller. Note: WinAVR is required to be installed on your machine in order to properly upload sketches to your board. You can download the latest version here.
There are also a lot of great network tools included in this release, including the UDP and OSC Listener and Transmitter components. OSC (Open Sound Control) messages are essentially specially formatted UDP messages which can be particularly handy when you want to send some sort of information across a network (either wirelessly or LAN). OSC messages are particularly useful because each message contains some metadata and a value, giving you more information about what type of data the message contains. These new components open up a whole new world of possibilities by allowing you to send/receive data from smart phones (iphone or android) or by sharing documents among friends or colleagues over a network.
The video above uses the BreathOSC application (free from the iphone app store) developed by Thomas Edwards to simulate wind effects in Grasshopper. Simply breathe into the microphone and an OSC message is sent to a specified IP address on a UDP port. I then simply use the OSC Listener to decode the message and uses its value to create a wind vector to drive the Kangaroo (another 3rd party plugin for Grasshopper) wind simulation. Daniel Piker, the developer of Kangaroo, helped setup this demo... and I have to say... it's quite fun.
Another useful networking application for smart phones is TouchOSC (available for both iphone and android). It supports sending and receiving Open Sound Control messages over a Wi-Fi network using the UDP protocol. You can also create your own interfaces using the TouchOSC Editor and sync them directly to your phone. In this example, I've created a simple layout to control a few LED's, a tri-color LED, and a standard servo using the new OSC Listener in Firefly. This is just a simple test, but the sky is the limit with this type of control over mobile phone interface design.
If you are interested in learning more about Firefly, check out our website at: http://www.fireflyexperiments.com/
The website has a lot of good tutorials and examples to get you up and running in no time. As always, if you have a suggestion or want to send us a comment, you can reach us at email@example.com
It is without a doubt that this release would not have been possible without the tremendous support from Prof. Panagiotis Michalatos at Harvard's GSD. His guidance over the last 6 months strongly influenced the development of the Firefly_X toolset and I owe him a great debt of gratitude for his assistance. Firefly is built upon the Grasshopper plug-in for Rhino, both developed by Robert McNeel and Associates. The Arduino language syntax is based on Wiring by Hernando Barragan. The Arduino environment is based on Processing byBen Fry and Casey Reas, and is now supported by an amazing team of software and hardware developers that continue to refine and expand its capabilities.