Quick IoT Prototyping with Ruby/Rails and the Spark Core

The Internet of Things revolution is upon us. Our phones are getting smarter, internet is becoming more accessible, even dogs have connected accessories. Making these products isn’t limited to electrical engineers or obscurely funded start-ups; with a little bit of programming knowledge and the right tools, you can make your own connected ______ in no time.

A Brief Introduction


An amazing player in the “making hardware easy” space. The company and project itself is open sourced, accompanied by a massive community, and is the go-to solution for many hobby hardware projects. Bringing these projects online has long been doable, but was expensive and challenging before Particle came along.

Particle (formerly Spark)

Another awesome company with a great community that entered the playing field in 2013. The Spark Core, Particle's flagship product, has significantly lowered the barrier for making connected devices. Programming them is as easy as programming an Arduino, but these guys connect to the internet out of the box (with wifi credentials) and allow for uploading code online.

Ruby and Rails

Ruby on Rails has been powering modern websites for nearly ten years, including many of the sites built here at Viget. Ruby remains one of my favorite languages to code in through the years and Rails makes it ridiculously easy to create a fully functioning website in minutes.

Establishing Communication

With a mild understanding of the above technologies, and a Spark Core in your possession (or better yet, the newer-better-half-as-expensive Photon), you’re ready to go.

The power that a Spark Core gives you is one of easy internet access. If you’re familiar with Arduino development, you know that the software you write follows a setup/loop pattern. You define the setup and loop functions in your code, and after booting up the chip runs setup once, and then loop infinitely. Defining your online endpoints on a Spark Core is a simple matter of defining available functions and variables in your setup:

void setup() {
 Spark.function("setColor", setColor);
 Spark.variable("buttonStatus", &buttonStatus, STRING);

Then, with the use of the Ruby Spark gem, you can easily call your defined functions and retrieve accessible variables using Ruby like so:

# ruby
require "ruby_spark"

core = RubySpark::Core.new(spark_access_token, core_id)

if core.variable("buttonStatus") == "pressed"
 core.function("setColor", "red")

Pretty straight-forward Ruby code here, we’re checking to see if the buttonStatus variable is equal to “pressed”, and calling the setColor function on the Core if it is. OVER THE INTERNET!

Putting the Pieces Together

Since we have the power to control our Spark Core with Ruby, we can throw this code into a Rails application, push it up to a free Heroku instance and our device suddenly has it’s very own online interface. This means that as long as your Spark Core is on and connected to the internet, you can interact with your device from anywhere in the world.

I’ve put together a sample Rails application, currently live at particle-interfacer.herokuapp.com. The code is available on github. This app can make function and variable calls to your Spark Core like the ones mentioned above, and is meant to demonstrate just how easy it is to whip up a connected device.


Using these concepts, we could similarly build a button that literally does anything online (oh hey Dash), a thermostat that’s controlled by your phone (Nest), or a refrigerator that does your shopping for you (this one might be harder… but doable!). The point is, we have the tools that lowers the barrier for creativity, which is a great thing. Join me in making the world a cooler, quicker, and likely much weirder place!

Eli uses his mathematics degree from Carnegie Mellon to blur the lines between the digital and physical worlds. He codes for Shure, Volunteers of America, and other clients from our Boulder, CO, office.

More posts by Eli