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: 624
Latest Activity: Jun 22

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

Writing to SPI/I2C devices through FT232H 1 Reply

Hi all.I'm recently working on a kinetic project involving a number of hobby servo motors controlled by a I2C PWM controller PCA9685. (or some of you refer to the famous Adafruit 16 channel 12-bit PWM/Servo Driver - I2C interface )I realize it would…Continue

Started by Victor Leung. Last reply by DanaHill Aug 1, 2022.

Serial read problem in Firefly 7 Replies

Hi guys,I'm communicating with a 3D printer via Grasshopper / Firefly (and eventually) Silkworm.So far, I can quite happily send G-Code move commands to the printer  - which is a Leapfrog Creatr, based on Arduino Mega / RAMPS electronics - via the…Continue

Tags: GCode, Read, Serial, Firefly

Started by fergal.coulter. Last reply by Aaron Porterfield May 16, 2022.

problem while reading/writing 2 Replies

I hawe a problem with writing/reading data in Firefly.I thought it is mine problem with board, but cant understand this stuffContinue

Started by Philipp. Last reply by Jame jim Apr 5, 2022.

How to control stepper motor in different ways?

Hi, I'm trying to understand how to use this Firefly. Firstly, I could have controlled servo motor with Firefly. Now, I'm trying to control stepper motor however I couldn't.I use Arduino Nano and L293D. There is no problem in my circuit because it…Continue

Started by Mevhibe Demir Jun 21, 2020.


Comment Wall


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

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

Lastly, could you start a discussion topic about this issue instead of just posting to the wall.  That will help us track any issues and keep the comment wall more clean.  Thanks.

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

PS, the 1023 value you're getting is not actually correct.  Either you have a hardware circuit error, which is causing your voltage to saturate around 5V (and thus the pin is returning it's maximum value of 1023) or you never actually got the firmata installed and it's returning some other number.

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.


Members (624)






  • Add Photos
  • View All


  • Add Videos
  • View All

© 2023   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service