Another sensor or module to cross our path, this time we will look at the TMP175 digital temperature sensors
We will connect one of these up to one of our trusty Wemos Mini boards
The TMP175 devices is a digital temperature sensors ideal for NTC and PTC thermistor replacement. The device offers a typical accuracy of ±1°C without requiring calibration or external component signal conditioning. IC temperature sensors are highly linear and do not require complex calculations or look-up tables to derive the temperature. The on-chip 12-bit ADC offers resolutions down to 0.0625°C.
The TMP175 feature SMBus, Two-Wire, and I2C interface compatibility. The TMP175 device allows up to 27 devices on one bus. . The TMP175 feature an SMBus Alert function.
The TMP175 are ideal for extended temperature measurement in a variety of communication, computer, consumer, environmental, industrial, and instrumentation applications.
Features
- TMP175: 27 Addresses
- Digital Output: SMBus™, Two-Wire™, and I2C
Interface Compatibility - Resolution: 9 to 12 Bits, User-Selectable
- Accuracy:
- ±1°C (Typical) from –40°C to 125°C
- ±2°C (Maximum) from –40°C to 125°C
- Low Quiescent Current: 50-µA, 0.1-µA Standby
- Wide Supply Range: 2.7 V to 5.5 V
- Small 8-Pin MSOP and 8-Pin SOIC Packages
Connection
You can use 5v but I just decided on 3v3
Module Connection | Wemos (ESP8266) Connection |
VCC | 3v3 |
GND | Gnd |
SDA | SDA |
SCL | SCL |
Code
[codesyntax lang=”cpp”]
#include <Wire.h> byte TempHi; // Variable hold data high byte byte TempLo; // Variable hold data low byte boolean P_N; // Bit flag for Positive and Negative unsigned int Decimal; // Variable hold decimal value void Cal_Temp(); /******************************************************************************* Setup *******************************************************************************/ void setup() { Serial.begin(9600); Wire.begin(); // join i2c bus (address optional for master) delay(1000); } /******************************************************************************* Main Loop *******************************************************************************/ void loop() { const int I2C_address = 0x37; // I2C write address delay(100); Wire.beginTransmission(I2C_address); Wire.write(1); // Setup configuration register Wire.write(0x60); // 12-bit Wire.endTransmission(); Wire.beginTransmission(I2C_address); Wire.write(0); // Setup Pointer Register to 0 Wire.endTransmission(); while (1) { delay(1000); // Read temperature value Wire.requestFrom(I2C_address, 2); while(Wire.available()) // Checkf for data from slave { TempHi = Wire.read(); // Read temperature high byte TempLo = Wire.read(); // Read temperature low byte } Cal_Temp (); // Display temperature Serial.print("The temperature is "); if (P_N == 0) Serial.print("-"); Serial.print(TempHi,DEC); Serial.print("."); Serial.print(Decimal,DEC); Serial.println(" degree C"); } } void Cal_Temp() { if (TempHi&0x80) // If bit7 of the TempHi is HIGH then the temperature is negative P_N = 0; else // Else the temperature is positive P_N = 1; TempHi = TempHi & 0x7F; // Remove sign TempLo = TempLo & 0xF0; // Filter out last nibble TempLo = TempLo >>4; // Shift right 4 times Decimal = TempLo; Decimal = Decimal * 625; // Each bit = 0.0625 degree C }
[/codesyntax]
Output
Open up the trusty serial monitor and you will see something like this all going well
The temperature is 27.0 degree C
The temperature is 27.0 degree C
The temperature is 28.0 degree C
The temperature is 28.5000 degree C
The temperature is 29.0 degree C
The temperature is 28.5000 degree C
The temperature is 28.0 degree C
Link
1pcs CJMCU-175 TMP175 27 Address Digital Temperature Sensor