Advertisement
Guest User

Untitled

a guest
Dec 2nd, 2015
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.36 KB | None | 0 0
  1. #Modified by Marlon Jones (@VirusThePanda)
  2. # Author : Matt Hawkins
  3. import smbus
  4. import time
  5. from ctypes import c_short
  6.  
  7. DEVICE = 0x77 uses 0
  8. bus = smbus.SMBus(1)
  9.  
  10. def convertToString(data):
  11.  
  12. return str((data[1] + (256 * data[0])) / 1.2)
  13.  
  14. def getShort(data, index):
  15.  
  16. return c_short((data[index] << 8) + data[index + 1]).value
  17.  
  18. def getUshort(data, index):
  19. return (data[index] << 8) + data[index + 1]
  20.  
  21. def readBmp180Id(addr=DEVICE):
  22.  
  23. REG_ID = 0xD0
  24.  
  25. (chip_id, chip_version) = bus.read_i2c_block_data(addr, REG_ID, 2)
  26. return (chip_id, chip_version)
  27.  
  28. def readBmp180(addr=DEVICE):
  29. REG_CALIB = 0xAA
  30. REG_MEAS = 0xF4
  31. REG_MSB = 0xF6
  32. REG_LSB = 0xF7
  33. CRV_TEMP = 0x2E
  34. CRV_PRES = 0x34
  35. OVERSAMPLE = 3
  36.  
  37.  
  38. cal = bus.read_i2c_block_data(addr, REG_CALIB, 22)
  39.  
  40. AC1 = getShort(cal, 0)
  41. AC2 = getShort(cal, 2)
  42. AC3 = getShort(cal, 4)
  43. AC4 = getUshort(cal, 6)
  44. AC5 = getUshort(cal, 8)
  45. AC6 = getUshort(cal, 10)
  46. B1 = getShort(cal, 12)
  47. B2 = getShort(cal, 14)
  48. MB = getShort(cal, 16)
  49. MC = getShort(cal, 18)
  50. MD = getShort(cal, 20)
  51.  
  52. #Temp Reading
  53. bus.write_byte_data(addr, REG_MEAS, CRV_TEMP)
  54. time.sleep(0.005)
  55. (msb, lsb) = bus.read_i2c_block_data(addr, REG_MSB, 2)
  56. UT = (msb << 8) + lsb
  57.  
  58. #Press. Reading
  59. bus.write_byte_data(addr, REG_MEAS, CRV_PRES + (OVERSAMPLE << 6))
  60. time.sleep(0.04)
  61. (msb, lsb, xsb) = bus.read_i2c_block_data(addr, REG_MSB, 3)
  62. UP = ((msb << 16) + (lsb << 8) + xsb) >> (8 - OVERSAMPLE)
  63.  
  64. # Refine temperature
  65. X1 = ((UT - AC6) * AC5) >> 15
  66. X2 = (MC << 11) / (X1 + MD)
  67. B5 = X1 + X2
  68. temperature = (B5 + 8) >> 4
  69.  
  70. # Refine pressure
  71. B6 = B5 - 4000
  72. B62 = B6 * B6 >> 12
  73. X1 = (B2 * B62) >> 11
  74. X2 = AC2 * B6 >> 11
  75. X3 = X1 + X2
  76. B3 = (((AC1 * 4 + X3) << OVERSAMPLE) + 2) >> 2
  77.  
  78. X1 = AC3 * B6 >> 13
  79. X2 = (B1 * B62) >> 16
  80. X3 = ((X1 + X2) + 2) >> 2
  81. B4 = (AC4 * (X3 + 32768)) >> 15
  82. B7 = (UP - B3) * (50000 >> OVERSAMPLE)
  83.  
  84. P = (B7 * 2) / B4
  85.  
  86. X1 = (P >> 8) * (P >> 8)
  87. X1 = (X1 * 3038) >> 16
  88. X2 = (-7357 * P) >> 16
  89. pressure = P + ((X1 + X2 + 3791) >> 4)
  90.  
  91. return (temperature/10.0,pressure/ 100.0)
  92.  
  93. def main():
  94.  
  95. (chip_id, chip_version) = readBmp180Id()
  96. print "Chip ID :", chip_id
  97. print "Version :", chip_version
  98.  
  99. print
  100.  
  101. (temperature,pressure)=readBmp180()
  102. print "Temperature : ", temperature, "C"
  103. print "Pressure : ", pressure, "mbar"
  104.  
  105. if __name__=="__main__":
  106. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement