algorithmic modeling for Rhino



Firefly offers a set of comprehensive software tools dedicated to bridging the gap between Grasshopper, (a free plug-in for Rhino) the Arduino microcontroller and other input/output devices. It allows near real-time data flow between the digital and physical worlds – enabling the possibility to explore virtual and physical prototypes with unprecedented fluidity.

Location: Cambridge, MA
Members: 608
Latest Activity: Sep 19

Firefly Experiments

As a generative modeling tool, Grasshopper offers a fluid visual interface for creating sophisticated parametric models, but by default, it lacks the ability to communicate with hardware devices such as programmable microcontrollers or haptic interfaces. Firefly fills this void. It is an extension to the Grasshopper’s parametric interface; combining a specialized set of components with a novel communication protocol (called the Firefly Firmata or Firmware) which together enable real-time communication between hardware devices and the parametric plug-in for Rhino.

Key Features

  • Read / Write to Arduino microcontrollers and other devices
  • Visualize Sensor Data within Firefly / Grasshopper
  • Control LEDS, Lights, Motors, Valves and more
  • Control Stepper Motors (for 3d Printers and end effectors) 
  • Stream Web Cams and connect with Mobile Devices (iOS + Android) using OSC and UDP
  • Connect to Internet Feeds and search XML Feeds 
  • Generate code to upload to an Arduino Board
  • Basic sound input and processing tools
  • Datalogging, counting and playback
  • Machine Vision toolkit including edge detection, color filtering, convolution filtering and much more
  • Kinect toolkit including skeleton tracking

A notable distinction for Firefly is that it is the first visual microcontroller programming environment designed specifically for a 3-D parametric CAD package (such as Rhino). This feature means that real-world data, acquired from various types of sensors or other input devices (video cameras, internet feeds, or mobile phone devices, etc.) can be used to explicitly define parametric relationships within a Grasshopper model. Firefly completes the communication feedback loop by allowing users the ability to send information from Grasshopper back to the microcontroller in order to incite specific actuations (ie. lights, motors, valves, etc). Ultimately, this workflow creates a new way to create interactive prototypes.

Discussion Forum

How to Sync with ABB robot controller? 2 Replies

Hey There. A quick question: is there any way to synch Arduino/Firefly with HAL?I have a tool attached to my robot arm and I kinda manually control it through Arduino. I need to use Firefly to parametrically and maybe in almost real time (if…Continue

Tags: IRC5, Arduino, ABB, Firefly, Robot

Started by Mehdi FarahBakhsh. Last reply by Mehdi FarahBakhsh Jun 17.

can you help me understand firefly / firmata? 2 Replies

hi all,several of us (arch. grad students and our professor at portland state univ) are trying to get our ultrasonic range sensors working on our arduino unos in grasshopper. we have dl'ed firefly and run the main firmata. at that point everything…Continue

Started by mart schaefer. Last reply by Troy Baverstock Apr 18.

Arduino Write Error

Hello I installed Firefly 64bit and Arduino 1.6.5 (someone says that Firefly doesn't work with newer versions). When I upload Firmata to my Arduino UNO, "UNO Read" works, but when I try "UNO Write", it works for maybe half a second and…Continue

Started by Petr Vacek Mar 16.

Slow stepper motor 1 Reply

Hello,, I am trying to send data directly from firefly mega write to a stepper motor with the firefly firmata.. I got the sequence of pulses that need to be sent.. problem is that it is not being sent fast enough.. I have a 1 ms timer rotating…Continue

Started by Zayed. Last reply by Zayed Oct 19, 2018.


Comment Wall


You need to be a member of Firefly to add comments!

Comment by Andy Payne on September 26, 2014 at 12:50pm

Emanuele, it appears you're getting an error in the Arduino IDE... which may mean the firmata never actually got uploaded to your board.  Can you close Grasshopper, and try uploading the Firmata, and then restart Grasshopper?

Comment by Emanuele Calabrò on September 26, 2014 at 12:50pm

YES, i'm using "Uno Read" component and getting numbers out?

I'm using a DHT11, a DHT22 and a DS18B20

From 20 to 30 should give me values ​​and instead gives me about 1000

Comment by Emanuele Calabrò on September 26, 2014 at 12:45pm

Comment by sean.mckeever on September 26, 2014 at 12:23pm


Can you perhaps upload an image screen capture of your issue?  And perhaps a link to the sensor you're trying to use.  Some sensors are more basic and some more complex than others.  

Are are you using the "Uno Read" component and getting numbers out?  

Comment by Emanuele Calabrò on September 26, 2014 at 10:30am


I did as you said but the sensors shoot numbers, when and where it is time to put the script of the sensor? 'Cause if I do not put it, sensor does not go

Comment by sean.mckeever on September 26, 2014 at 10:13am

Hi Emanuele,

From my brief work with firefly + various arduino sensors, you NEED to be using the Firefly Firmata for those components to read your Arduino inputs.  

It was confusing at first for me too.  Before you even engage the Grasshopper environment, you need to use the Arduino software to upload the Firefly Sketch (Firmata) to the Arduino board.  Read "Getting Started" here:

THEN launch Grasshopper and try your Firefly Read components again.

Good luck, and keep at it!

Comment by Emanuele Calabrò on September 26, 2014 at 9:50am

Hi Andy,

I am using just the component Serial Read, not UNO Read.
I do not understand how to use Firmata. I do the upload at board of the first sketch from the site and after? How should I / can I use other scripts?


Comment by Andy Payne on September 25, 2014 at 2:19pm

Hi Emanuele,

It's difficult to debug without actually seeing the script your working with (ps... why not use the firmata?)  Anyway, my assumption is that you're arduino sketch is sending data over the serial port as string (possibly with a label, etc.).  The Uno Read component is setup specifically to work with the Firefly firmata which formats the string in a specific way.  If you're using your own custom script, you should use the Generic Serial Read component, instead of the Uno Read.

Comment by Emanuele Calabrò on September 25, 2014 at 2:14pm

Hello everyone,
I am a neophyte arduino and firefly. I'm using a simple sensor for measuring the temperature and its associated script, so not a script Firmata, I use FF for reading data, but when I use the Serial Read I can not see the data, I get the message "Data failed conversion from TEXT to NUMBER "

Can you help?

Comment by mal on July 23, 2014 at 7:31am

I am currently new in firefly and I am tring to connect an azteeg board (creat for 3d printer) to firefly but I have some trouble to find the way to find and conect the good pin the firefly plug in seems to be design to work with arduino uno board or mega how can I conect my azteeg x1 board to firefly and send some information to the sevro motor, activate the fan or controle the power of the heat of the hot end with the sensor. if you have somes clue or you now some other works feel free to respond.

thanks for this great plug-in 


Members (608)






  • Add Photos
  • View All


  • Add Videos
  • View All

© 2019   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service