Arduino + TMP36 Temperature Sensor

TMP36 Temperature Sensor splash image

Getting started

Want to log some temperature data? Looking for an easy way to visualize your energy usage? You can easily interface your Arduino with Plotly to stream all of that goodness into a delightful graph! Make informed decisions based on your results!


  • Arduino-compatible board
  • Your choice of Arduino internet shield
    (WIFI, CC3000, Ethernet, GSM)
  • TMP36 temperature sensor
  • Hookup wires
  • Half-size breadboard

If you're going to use the Node.js route, you do not need an internet shield — just a USB connection from your Arduino to your computer.

TMP36 Temperature Sensor Parts

Hooking it up

TMP36 PIN1 Arduino 5V
TMP36 PIN2 Arduino GND
TMP36 PIN2 Arduino A0

TMP36 Temperature Sensor hookup


Download and install all libraries into your usual Arduino Library Folder.
The default is usually at /User/Documents/Arduino/Libraries.

If you're using the Arduino wifi shield, make sure to use version 1.0.3 of the Arduino IDE!

The script

The choice is yours! You can use an Arduino sketch for this project, or a Node.js script.

Using the Arduino sketch

Grab your choice of Arduino script here:

Open up tmp36.ino and let's go through it. First we initialize a plotly graph. If you're using a wifi shield, remember to change these wireless credentials to your own in the sketch!

plotly graph("username", "api_key", tokens, "filename", nTraces);

In the setup() function, we're going to initialize the graph. Once it's initialized, we're going to open the stream. graph.openStream() opens the plotly stream and graph.plot() is where all the data gets piped in. Let's check it out:


In the loop() function, we're going to start streaming our sensor data!

void loop() {
    int tmp36_reading = analogRead(tmp36_pin);
    graph.plot(millis(), tmp36_reading, tokens[0]);

Your code is now all set up!

Using the Node.js script

First, you need to set up your Arduino for Node.js interaction.

Next, download the tmp36.js script.

Open tmp36.js, and let's go through it! First we create a new plotly object with your credentials:

var plotly = require('plotly')("username", "api_key");

The init_data object is what we send to plotly when we initialize the graph. We are sending empty arrays to act as containers for our data. You can also choose the maximum number of points to display.

Don't forget to change the 'streamtoken' to your own!

var init_data = [{
    x : [],
    y : [],
    stream : {
        token : 'streamtoken',
        maxpoints : 5000

We're going to use plotly.plot() to initialize our graph and to pipe our data.

First we'll set up our board (let johnny-five connect to the Arduino over serial). Once that's successful, we'll initialize the graph.

When our Plotly graph is ready, we'll initialize a stream. Then, every time our sensor gets a "data" event (set to the sensor's 'freq' value, we'll fire off that data to our stream.

Check out the full tmp36.js for better error handling practices.

board.on("ready", function() {
    var tmp36 = new five.Sensor({ pin: "A0", freq: 50 });
    plotly.plot(data,layout,function (err, res) {
        var stream ='streamtoken', function (res) {
        tmp36.on("data", function() {
            // convertTemperature() accepts voltage, returns temperature
            // getDateString() is a helper function which does exactly that
            var data = { x : getDateString(), y : convertTemperature(this.value) };

Wrapping it up

Using the Arduino sketch

By now you've got your Arduino wired up to the TMP36, you've got it set up for internet connectivity, you've uploaded your sketch, and you're ready to go.

Start streaming! Plug in your Arduino, and go check out your live results!

Using the Node.js script

By now you've got your Arduino wired up to the TMP36, you've modified your node script, and you're ready to go.

Start streaming! Plug in your Arduino to your USB port, and run the script from the command line:

$ node tmp36.js

You can watch the console to see the url returned from Plotlys server. Now go check out your live stream!