This is a breakout board for the incredibly small TMP102 digital temperature sensor. The TMP102 is a digital sensor (I2C a.k.a. TWI), has a resolution of 0.0625°C, and is accurate up to 0.5°C. This is a very handy sensor that requires a very low-current.
Communication with the TMP102 is achieved through a two-wire serial interface. There is no on-board voltage regulator, so supplied voltage should be between 1.4 to 3.6VDC. Filtering capacitors and pull-up resistors are included as shown.
Replaces: SEN-9418
This skill defines how difficult the soldering is on a particular product. It might be a couple simple solder joints, or require special reflow tools.
Skill Level: Noob - Some basic soldering is required, but it is limited to a just a few pins, basic through-hole soldering, and couple (if any) polarized components. A basic soldering iron is all you should need.
See all skill levels
If a board needs code or communicates somehow, you're going to need to know how to program or interface with it. The programming skill is all about communication and code.
Skill Level: Rookie - You will need a better fundamental understand of what code is, and how it works. You will be using beginner-level software and development tools like Arduino. You will be dealing directly with code, but numerous examples and libraries are available. Sensors or shields will communicate with serial or TTL.
See all skill levels
If it requires power, you need to know how much, what all the pins do, and how to hook it up. You may need to reference datasheets, schematics, and know the ins and outs of electronics.
Skill Level: Noob - You don't need to reference a datasheet, but you will need to know basic power requirements.
See all skill levels
We welcome your comments and suggestions below. However, if you are looking for solutions to technical questions please see our Technical Assistance page.
Based on 7 ratings:
3 of 3 found this helpful:
It works great. The only suggestion I would have is to get the bildr and mbed tutorials updated to match the new pin locations.
1 of 1 found this helpful:
This temperature sensor works great with my PyBoard. Super easy to use. I'm jazzed!
2 of 2 found this helpful:
I bought this to work with a Raspberry Pi. Works great, just as advertised.
4 of 4 found this helpful:
Everything works ducky, unless you don't know that the ADD0 is solder-bridged to GND; you have to remove that solder to give it any other address. Nothing in the data sheet alerts you to this (at least not that I saw). It might be something that's well-known for pros, but it cost me a good deal of time researching the problem.
A lot of fun for less money! (With PCDuino1/3)
Built a QuaCKibator which is just an egg incubator. Currently using a DHT22 sensor so hoping to eliminate that and use this instead. This was cheaper than buying the DHT22 sensor so decided to try and go with this instead.
-------------------- Tech Support Tips/Troubleshooting/Common Issues --------------------
Example Code
For some strange reason, the link to the "Example Code" (TMP102.ino and defs.h) did not work for me. The example code might not have been reading the correct registers correctly or there was a bad conversion. It would read:
If you use the bildr tutorial [ http://bildr.org/2011/01/tmp102-arduino/ ] with an Arduino Uno, you will be able to read the temperature sensor.
I had to power cycle the sensor after using the TMP102.ino and defs.h example.
Default Address
The default address is 0x48 (or 0b01001000 or 72 in decimal) as stated on Table 12 of the datasheet [page 10 - https://www.sparkfun.com/datasheets/Sensors/Temperature/tmp102.pdf ].
More Examples
This code from the Arduino.cc Playground worked without any issues too => [ http://playground.arduino.cc/Code/TMP102 ].
Just fired it up and the sensor is reporting approx. a 10 def F discrepancy relative to several mechanical thermometers and thermostat. I'm using the same code in the bildr example to get the temp. Any suggestions?
I wrote a Rust crate for this sensor: https://github.com/andygrove/tmp102-rs
Found a great hookup guide for arduino here: http://www.onemansanthology.com/blog/sparkfun-tmp102-temperature-sensor-and-arduino-code/
Thanks Sparkfun! Now I know that my microwaved burrito is a cozy 102.2 F
Sounds like a fun experiment one way or another!
Has anyone else had trouble getting the other addressing modes to work (73, 74, or 75)? With this new revision of the board it seems I can only get it to work on the default 72. (The earlier board layout worked fine for me)
There's a drop of soldering paste just above the ADD0 pin on the new breakout board layout. Use some soldering wick and a soldering gun to remove it and the Universe will be spinning again. You will be able to use the ADD0 pin just like on the old board (attach it to GND, VCC, SDA, SCL to obtain up to 4 I2C addresses). Do not attempt to connect the ADD0 directly to VCC without removing this "jumper" as it will create a short between VCC and GND and will probably end up toasting something in your circuit (depending on the connections you have there).
I'm really struggling to remove this "soldering paste". My challenge is the size - it's so small that I can barely get my iron and the wick in place to still see what I am doing - regardless of a magnifying glass. Any other recommendations?
Well, I figured it out, for anyone that cares. Serban recommended removing the soldering paste above the ADD0 pin. Using a DMM, I was able to determine that I still had continuity issues. So, I used really small wick (0.025"), a better iron and magnifying glass and my DMM confirmed that I got rid of ALL of the paste - no more continuity = no more problem changing the address.
Now, I have one TMP102 that I used female headers on - I've since changed my design and removed the headers, but I still have solder in the pin holes (or whatever they're called). The wick doesn't seem to be pulling out the solder, so I am going to try the "add more solder, then use the wick" technique to pull out the solder so that I can put male header pins in place and re-use my last TMP102. Wish me luck, hope this helps someone.
I tried to connect the TMP-102 sensor to the Edison I2C block. "i2cdetect" replies with errors “i2c_dw_handle_tx_abort: lost arbitration.”
I wanted TMP-102 sensor to work with Edison I2C block. Won’t. Using i2cdetect replies with errors “i2c_dw_handle_tx_abort: lost arbitration.” Using pull up resistors from 680 to 10k changed nothing. The TMP-102 fails with the Edison-Arduino board and with the Edison mini-breakout board, with or without level shifting or pull up resistors.
I can't find the Fritzing file. The only tmp102 available in Fritzing (as of download a few weeks ago) is the old format. Where can I find the files for this breakout?
I'd like to see a temperature sensor breakout board with an NXP PCT2075, instead of the TI TMP102. The TMP102 costs 3 times as much as the PCT2075! Granted, the PCT2075 is "only" 1°C accurate, versus 0.5°C for the TMP102, but for any everyday use that's good enough. (If you need better than 1°C accuracy then chances are that 0.5°C isn't sufficient either.)
Important point: the PCT2075 can operate at both 3.3V and 5V, whereas the TMP102 is 3.3V only. No level shifters = cheaper still.
I really like this sensor, I just wish that there was a solder jumpers to disable the pull up resistors like on the BMP180 breakout. It wasn't much hassle to simply remove the resistors though; I just dislike putting 0603s back.
Has anyone had a problem with receiving 0xFF for both the MSB and LSB when reading the temperature? I'm using the code linked above in the "bildr Tutorial". I have tried all four possible addresses, even though 72 is supposed to work. Doesn't matter, though, this thing just keeps send back 0xFF for both bytes. Any ideas?
Nooby question: can I fit screw terminals to this, like these: PRT-10571 (or different size terminals).
This sensor works great on the pcduino3. I have a short writeup with the python code I used.
http://www.onemansanthology.com/blog/getting-to-know-the-pcduino3/
It appears the note in the schematic for ADD0 to VCC is incorrect, at least when using the basic code from the bildr tut. It appears left shifted one bit, 10010010 (0x92) instead of 1001001 (0x48). I am new to all this but when using the address in the schematic it does not respond but, using 0x48 it does. I am not sure if/how forcing the 8 bit address mode in wire.requestFrom() would affect this.
The data sheet indicates max temperature error of +/- 2C from -25C to 85C (pg 3) but also suggests max error of +0.5/-0.15C (fig 3) over the same range (although all figs are subject to the qualifier "typical characteristics"). Any idea which accuracy limit is correct? Fig 6 also seems too good to be true, it would be useful if TI specified the maximum temperature error at 25C.
If anybody wants to use this with the BeagleBone black, I have a tutorial here: http://datko.net/2013/11/04/bbb_tmp102/
Source code is on GitHub: https://github.com/jbdatko/tmp102
The data sheet indicates that this device is NOT 5 volt tolerant on the I2C interface pins. The bildr Turtorial shows it hooked up to an arduino which would drive it at 5v. Probably not a good idea, one should use an I2C capabile level converter with this to communicate with a 5v processor.
To this end, you should make the 1k pullup resistors on the I2C lines defeatable with jumpers in case you already have pullups on the level converter, or on another I2C device. If I get this device I will need to unsolder those resistors.
Looks to me like the bldr shows the device connected to the 3V3 VCC line. So the pull ups will only be able to bring the I2C lines to 3.3V No?
True, but the DATA lines on the Arduino have a logic "1" output of 5V. There are Arduino clones that run at 3.3 volts, but the one in the example wasn't one of them. I don't think the AVR ports can be made to work in open collector (drain) mode.
Maybe we are looking at 2 different bldr tutorials. I click on the one here and see a schematic where the device is connected to the SDA and SCL pins of the arduino, which are the A4 and A5 Analog Inputs being used in i2c mode, thus by default they have to be open drain. The pullups are via the 3.3V resistors on the breakout board. So i don't see how they would be exposed to 5V.
I wasn't sure that the MASTER side of the I2C operated in open drain, I know the SLAVE side does. It that is true then you are correct.
I'm not an expert on this, but I fried a similar I2C device that can only tolerate 3.3v by using it with a 5v system. I had a bmp085 hooked up to an arduino's 3.3v and directly to A4/A5 for I2C without any logic shifters. It worked fine for about 10 days and then died.
I think it's best to use a level shifter, but maybe I'm missing something. Unfortunately for me the BMP085 is $20...
I hooked mine up to the SCL/SDA lines on a 5V pro micro, using a 3.3v regulator to drive the VCC and pullups. I measured the measured the max voltage on both lines using my Fluke 289 and both showed a maximum voltage of about 3.3v.
Thermometer Prototype
Design
Because the bus can only be driven low, the pullups determine the bus voltage. As long as you use pullups to 3v3 (and you don't have any other pullups on the bus to a higher voltage), it is safe to use with a 5v Arduino.