Skip to content
This repository was archived by the owner on Sep 30, 2019. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 21 additions & 6 deletions Adafruit_BMP085/Adafruit_BMP085_example.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,20 @@
#!/usr/bin/python

from time import sleep
from Adafruit_BMP085 import BMP085

def C_to_F(C):
return C * (180.0 / 100.0) + 32.0

def m_to_ft(m):
return 3.2808399 * m

def hPa_to_inHg(hPa):
return hPa / 33.86389

def hPa_to_psi(hPa):
return hPa / 0.0145037

# ===========================================================================
# Example Code
# ===========================================================================
Expand All @@ -16,10 +29,12 @@
# bmp = BMP085(0x77, 2) # HIRES Mode
# bmp = BMP085(0x77, 3) # ULTRAHIRES Mode

temp = bmp.readTemperature()
pressure = bmp.readPressure()
altitude = bmp.readAltitude()
while True:
temp = bmp.readTemperature()
pressure = bmp.readPressure()
altitude = bmp.readAltitude()

print "Temperature: %.2f C" % temp
print "Pressure: %.2f hPa" % (pressure / 100.0)
print "Altitude: %.2f" % altitude
print "Temperature: %.2f C / %.2f F" % (temp, C_to_F(temp))
print "Pressure: %.2f hPa / %.2f inHg" % ((pressure / 100.0), hPa_to_inHg(pressure / 100.0))
print "Altitude: %.2f m / %.1f ft" % (altitude, m_to_ft(altitude))
sleep(2.0)
22 changes: 14 additions & 8 deletions Adafruit_I2C/Adafruit_I2C.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/usr/bin/python

import smbus
from ctypes import c_short

# ===========================================================================
# Adafruit_I2C Class
Expand Down Expand Up @@ -61,11 +62,11 @@ def write8(self, reg, value):

def write16(self, reg, value):
"Writes a 16-bit value to the specified register/address pair"
value = ((value << 8) & 0xff00) | ((value >> 8) & 0xff)
try:
self.bus.write_word_data(self.address, reg, value)
if self.debug:
print ("I2C: Wrote 0x%02X to register pair 0x%02X,0x%02X" %
(value, reg, reg+1))
print ("I2C: Wrote 0x%04X to register 0x%02X" % (value, reg))
except IOError, err:
return self.errMsg()

Expand Down Expand Up @@ -117,9 +118,10 @@ def readS8(self, reg):
def readU16(self, reg):
"Reads an unsigned 16-bit value from the I2C device"
try:
hibyte = self.readU8(reg)
lobyte = self.readU8(reg+1)
result = (hibyte << 8) + lobyte
result = self.bus.read_word_data(self.address, reg)
hibyte = 0xff & result
lobyte = 0xff & (result >> 8)
result = (hibyte << 8) | lobyte
if (self.debug):
print "I2C: Device 0x%02X returned 0x%04X from reg 0x%02X" % (self.address, result & 0xFFFF, reg)
return result
Expand All @@ -129,9 +131,13 @@ def readU16(self, reg):
def readS16(self, reg):
"Reads a signed 16-bit value from the I2C device"
try:
hibyte = self.readS8(reg)
lobyte = self.readU8(reg+1)
result = (hibyte << 8) + lobyte
#hibyte = self.readS8(reg)
#lobyte = self.readU8(reg+1)
#result = (hibyte << 8) + lobyte
result = self.bus.read_word_data(self.address, reg)
hibyte = 0xff & result
lobyte = 0xff & (result >> 8)
result = c_short((hibyte << 8) + lobyte).value
if (self.debug):
print "I2C: Device 0x%02X returned 0x%04X from reg 0x%02X" % (self.address, result & 0xFFFF, reg)
return result
Expand Down
1 change: 1 addition & 0 deletions Adafruit_TMP006/Adafruit_I2C.py
134 changes: 134 additions & 0 deletions Adafruit_TMP006/Adafruit_TMP006.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
#!/usr/bin/python

import time
from Adafruit_I2C import Adafruit_I2C
from math import sqrt

# ===========================================================================
# TMP006 Class
# ===========================================================================

class TMP006 :
i2c = None

# TMP006 Registers
__TMP006_REG_VOBJ = 0x00
__TMP006_REG_TAMB = 0x01
__TMP006_REG_CONFIG = 0x02
__TMP006_REG_MANID = 0xFE
__TMP006_REG_DEVID = 0xFF

# CONFIG Register Values
__TMP006_CFG_RESET = 0x8000
__TMP006_CFG_MODEON = 0x7000
__TMP006_CFG_1SAMPLE = 0x0000
__TMP006_CFG_2SAMPLE = 0x0200
__TMP006_CFG_4SAMPLE = 0x0400
__TMP006_CFG_8SAMPLE = 0x0600
__TMP006_CFG_16SAMPLE = 0x0800
__TMP006_CFG_DRDYEN = 0x0100
__TMP006_CFG_DRDY = 0x0080

# Manufacturer ID
__TMP006_MANID = 0x5449

# Device ID
__TMP006_DEVID = 0x0067

# Internal Data
__TMP006_B0 = -0.0000294
__TMP006_B1 = -0.00000057
__TMP006_B2 = 0.00000000463
__TMP006_C2 = 13.4
__TMP006_TREF = 298.15
__TMP006_A2 = -0.00001678
__TMP006_A1 = 0.00175
__TMP006_S0 = 6.4 # * 10^-14

# Constructor
def __init__(self, address=0x40, mode=1, debug=False):
self.i2c = Adafruit_I2C(address)

self.address = address
self.debug = debug
self.started = False

# Destructor
def __del__(self):
if self.started:
self.i2c.write16(self.__TMP006_REG_CONFIG, 0);

# Start Sampling
def begin(self, samplerate=__TMP006_CFG_16SAMPLE):
self.i2c.write16(self.__TMP006_REG_CONFIG,
self.__TMP006_CFG_MODEON | self.__TMP006_CFG_DRDYEN | samplerate);

self.started = True

mid = self.i2c.readU16(self.__TMP006_REG_MANID)
did = self.i2c.readU16(self.__TMP006_REG_DEVID)

if self.debug:
print "mid = 0x%x" % mid
print "did = 0x%x" % did

if mid != self.__TMP006_MANID:
print "WARN TMP006: Manufacturer ID Mismatch (%04X)" % mid
if did != self.__TMP006_DEVID:
print "WARN TMP006: Device ID Mismatch (%04X)" % did

def readRawDieTemperature(self):
"Read the raw die temperature"
raw = self.i2c.readS16(self.__TMP006_REG_TAMB)
raw >>= 2
if self.debug:
C = raw * 0.03125
print "Raw Tambient: 0x%04X (%f C)" % (raw, C)
return raw

def readRawVoltage(self):
"Read the raw voltage"
raw = self.i2c.readS16(self.__TMP006_REG_VOBJ)
if self.debug:
v = raw
v *= 156.25
v /= 1000
print "Raw voltage: 0x%04X (%f uV)" % (raw, v)
return raw

def readDieTempC(self):
Tdie = self.readRawDieTemperature()
Tdie *= 0.03125 # convert to celsius
if self.debug:
print "Tdie = ", Tdie
return Tdie

def readObjTempC(self):
Tdie = self.readRawDieTemperature()
Vobj = self.readRawVoltage()
Vobj *= 156.25 # 156.25 nV per LSB
Vobj /= 1000 # nV -> uV
Vobj /= 1000 # uV -> mV
Vobj /= 1000 # mV -> V
Tdie *= 0.03125 # convert to celsius
Tdie += 273.15 # convert to kelvin

if self.debug:
print "Vobj = ", Vobj * 1000000, "uV"
print "Tdie = ", Tdie, " C"

tdie_tref = Tdie - self.__TMP006_TREF
S = 1 + self.__TMP006_A1 * tdie_tref \
+ self.__TMP006_A2 * tdie_tref * tdie_tref
S *= self.__TMP006_S0
S /= 10000000
S /= 10000000

Vos = self.__TMP006_B0 + self.__TMP006_B1 * tdie_tref \
+ self.__TMP006_B2 * tdie_tref * tdie_tref

fVobj = (Vobj - Vos) + self.__TMP006_C2 * (Vobj-Vos)*(Vobj-Vos)
Tobj = sqrt(sqrt(Tdie * Tdie * Tdie * Tdie + fVobj/S))

Tobj -= 273.15 # Kelvin -> *C
return Tobj
30 changes: 30 additions & 0 deletions Adafruit_TMP006/Adafruit_TMP006_example.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/usr/bin/python

from Adafruit_TMP006 import TMP006
from time import sleep

def C_to_F(C):
return C * (180.0 / 100.0) + 32.0

# ===========================================================================
# Example Code
# ===========================================================================

# Initialise the TMP006 and use defaults
# tmp = TMP006(0x40, debug=True)
tmp = TMP006(0x41)

# Start sampling
tmp.begin()

# Wait a short bit for sample averaging
while True:
print "Pausing 2.0 s..."
sleep(2.0)

dietemp = tmp.readDieTempC()
objtemp = tmp.readObjTempC()

print "Die Temperature: %.2f C / %.2f F" % (dietemp, C_to_F(dietemp))
print "Object Temperature: %.2f C / %.2f F" % (objtemp, C_to_F(objtemp))