Plot.ly + Arduino Data Visualization

I've been a fan of Arduino for years now, and have used it for building everything from MIDI controllers to simple LED flashers. One thing that has always intrigued me has been visualizing some of the data that I read off of the Arduino Pins.

Plot.ly makes this simple. Really simple.

The purpose of this instructable is to demonstrate how to hook up an Arduino + Ethernet Shield and send data to Plot.ly's Servers and create beautiful graphs. We will be using a dual temperature+humidity sensor (DHT22), and sending the results directly to Plotly.

Step 1: What you will need:


(We will explain how to install the libraries in a later step)

  • Two pieces of (2 1/2" x 3 1/2" ) wood (1/4" thick)
  • Four (10-32x2in) Machine Screws
  • 12 Hex Nuts (10-32 Diameter)


Step 2: Hardware Setup

Step 1:
Connect your Arduino to your Ethernet shield

Step 2:
Connect the DHT sensor:
  • DHTpin1 -> 5v
  • DHTpin2 -> digitalpin2
  • DHTpin3 -> not used
  • DHTpin4 -> gnd

Step 3: Uploading the sketch to your Arduino

Step 1:

  1. Download the Arduino IDE if you haven't already (We're using 1.0.5, but if you're using a WIFI shield, you'll have to use 1.0.3)
  2. Install Arduino onto your system

Step 2:
Download Libraries: (If you haven't already done so!)

You'll want to drop the library folders into your Arduino application folder. Ours is in: '/user/Documents/Arduino/libraries'. You can always check your Arduino preferences to find out where yours is if you cannot find it.

Once you find your Arduino folder, it should look like this:

  • Arduino/
    • hardware/
    • libraries/
      • plotly_ethernet/
        • plotly_ethernet.cpp
        • plotly_ethernet.h
      • DHT/
        • DHT.cpp
        • DHT.h

Once you've put the libraries in the correct place, restart the Arduino IDE.

Step 3:

  1. Download the Arduino/Plotly sketch for Temperature and Humidity visualization
  2. Open the sketch and change "username" and "api_key" to your plotly credentials.
  3. Make sure to change the "Stream Tokens" as well!
  4. Upload the sketch to your Arduino!

Step 4: Building the Enclosures

We were inspired by this Instructable, and wanted to create something similar for this project. Simplicity would be key, as we wanted to have an aesthetically pleasing, yet still minimal and low-cost, finished product.

This design is so simple and wonderful, we'll leave it up to you! Its just drilling 8 holes, and assembling!

Remember to be accurate with your holes, as they have to match up. Measure twice, drill once! :D

Step 5: Wrapping it all up!

By now, you should be all set up and ready to go! You should have:

  • an Arduino that is programmed (not plugged into your router yet!)
  • an Arduino that is nicely bundled up into some kind of enclosure

Final Steps

  1. Plug in your Arduino to your router with the Ethernet cable
  2. Plug in your Arduino to power with the 9V Wall adapter
  3. After a few minutes, check your filewell on Plotly, and you will see your data stream in!

Happy Plotting!

Click here to check out an example using data taken from our living room in Montréal!

<p>Gave this a try, but didn't have much luck..</p><p>I'm using an arduino with a TI CC3100 , but while the Plotly server reports All Streams Go!, it doesn't plot any subsequent data that I send. </p><p>I verified that I'm sending it a properly formatted string, so I think the problem is somewhere between the TCP connection and the first data sent. </p><p>I tried re-establishing the tcp connection after I get the All Streams Go, then sending the data, but that still didn't work.. </p><p>Anyone have any idea what could be the problem: </p><p><a href="http://pastebin.com/hisREYxM" rel="nofollow">http://pastebin.com/hisREYxM </a> <a href="https://ghostbin.com/paste/brhvy" rel="nofollow">https://ghostbin.com/paste/brhvy </a> <a href="http://pastie.org/10857508" rel="nofollow">http://pastie.org/10857508</a></p>
<p>THX a lot!</p>
<p>What kind of data thruput could one reasonably expect using an arduino and a cc3100 wifi shield? </p><p>From the networking programming side, is there anything that can be done to maximize the data rate? For example, first establishing a connection with the plot.ly api and servers, then sending the arduino data to the server using udp?</p>
<p>i thought i'm not gonna make it I built the code</p>
<p>Hi</p><p>When I try my streaming URL https://plot.ly/~vanchiramani/57.json for getting the data in json format, it gives the following output:</p><p>{</p><p> &quot;data&quot;: [</p><p> {</p><p> &quot;stream&quot;: {</p><p> &quot;token&quot;: &quot;your_stream_token_here&quot;, </p><p> &quot;maxpoints&quot;: 100</p><p> }, </p><p> &quot;type&quot;: &quot;scatter&quot;</p><p> }, </p><p> {</p><p> &quot;stream&quot;: {</p><p> &quot;token&quot;: &quot;your_stream_token_here&quot;, </p><p> &quot;maxpoints&quot;: 100</p><p> }, </p><p> &quot;type&quot;: &quot;scatter&quot;</p><p> }</p><p> ]</p><p>}</p><p>Do you know how I can get the data is json format?</p>
<p>Hi,</p><p>Thanks for this instructable. Everithing works fine but I get a drift of Time stamp on plot.ly. Do you know what should I do to correct this drift ?</p><p>Thanks</p>
<p>Everything connects fine but I can't find the stream when I go to my plot.ly filewell. I keep getting the following error even after re-trying several times. Can you help me?</p>
<p>How to configure the Arduino to work with plot.ly through a router ? <br>I used ADSL router and thus IP changes frequently . In the sketch Arduino, in this article , you need to specify a constant external (White ) IP. But it is constantly changing for me, and the DHCP function for some reason does not work in Arduino . How to set up a job with the service plot.ly Arduino using a router and assigning Arduino local IP type <br>Thank you in advance for your help !! <br>Igor .</p>
<p>Try allocating a Static IP for your Arduino Device. </p><p>1. Login to your Router ( from a browser</p><p>2. Learn to assign static IP lease (varies for every router). </p><p>It usually asks for your device's MAC address(mentioned on a sticker attached with the Ethernet shield) and for an IP to be allocated for the corresponding device. </p><p>Now the particular IP is always assigned only to the Arduino and never to other device even when the Shield is disconnected.</p><p>Image shows how-to for my router ( local brand ).</p>
<p>BharathK9,</p><p>Thank you very much! I set up the router for your advice. Everything works!</p>
<p>Always happy to help.</p><p>Good luck,</p><p>JohS81.</p>
<p>plotly_streaming_ethernet library is not detected by arduino .. please help !</p>
<p>I am facing an error.... </p><p>plotly graph= plotly (&quot;user name&quot;, &quot;api&quot;, &quot;1st token&quot;,&quot;2 nd token&quot;, &quot;which file name&quot;, &quot;what&quot;); </p><p>would you tell me?</p>
<p>I try running the sample code but I keep getting this error:</p><p>'plotly' does not have a name type</p><p>Any help/suggestions would be appreciated.</p>
<p>PLEASE HELP. been having this problem</p>
<p>Hi! I would like to monitor two sensor data &amp; plot them on two separate graphs. I have edited the &quot;simple_cc3000.ino&quot; in the example folder foundhere --&gt; https://github.com/plotly/arduino-api/archive/master.zip BUT the data from the two sensors are plotted on the same graph. how do i separate them? </p>
<p>Hi everyone,</p><p>May I ask if it is possible to put multiple temperature sensors into one set of Arduino equipment? I have many temperature sensors (up to 24) and I am looking for a way to streamline the data and plot the measurement of each in real time.</p><p>Thanks so much in advance!</p>
<p>Hi Five.</p>

About This Instructable




More by plotlygraphs:Plotly + Atlas Scientific: Graph Real-Time Dissolved Oxygen with Raspberry Pi Real-time Graphing with the Raspberry Pi Embedding Interactive Graphs in Blogs and Websites 
Add instructable to: