Class: I2CDevice::Bmp180
- Defined in:
- lib/templates/grove_pi/i2c/device/bmp180.rb
Overview
Implements the I2C-Device BMP085/BMP180 This code was inspired by github.com/adafruit/Adafruit_Python_BMP
Datasheet: www.adafruit.com/datasheets/BST-BMP180-DS000-09.pdf
Currently this code was tested on a Banana Pi with a BMP185 device. It should work on a Raspberry or any other Linux with I2C-Dev
Example
Using i2c-2 device (e.g. if you using a banana pi)
bmp = I2CDevice::Bmp180.new(driver: I2CDevice::Driver::I2CDev.new("/dev/i2c-2"), mode: 0)
puts "#{bmp.read_temperature / 10.0}°C"
sleep 1
puts "#{bmp.read_pressure / 100.0}hPa abs"
sleep 1
m_above_sealevel = 500 # position realtive to sealevel in m
puts "#{bmp.read_sealevel_pressure(m_above_sealevel) / 100.0}hPa rel"
Constant Summary collapse
- BMP085_I2CADDR =
BMP085 default address.
0x77
- BMP085_ULTRALOWPOWER =
Operating Modes
0
- BMP085_STANDARD =
1
- BMP085_HIGHRES =
2
- BMP085_ULTRAHIGHRES =
3
- BMP085_CAL_AC1 =
BMP085 Registers
0xAA
- BMP085_CAL_AC2 =
R Calibration data (16 bits)
0xAC
- BMP085_CAL_AC3 =
R Calibration data (16 bits)
0xAE
- BMP085_CAL_AC4 =
R Calibration data (16 bits)
0xB0
- BMP085_CAL_AC5 =
R Calibration data (16 bits) unsigned
0xB2
- BMP085_CAL_AC6 =
R Calibration data (16 bits) unsigned
0xB4
- BMP085_CAL_B1 =
R Calibration data (16 bits) unsigned
0xB6
- BMP085_CAL_B2 =
R Calibration data (16 bits)
0xB8
- BMP085_CAL_MB =
R Calibration data (16 bits)
0xBA
- BMP085_CAL_MC =
R Calibration data (16 bits)
0xBC
- BMP085_CAL_MD =
R Calibration data (16 bits)
0xBE
- BMP085_CONTROL =
R Calibration data (16 bits)
0xF4
- BMP085_TEMPDATA =
0xF6
- BMP085_PRESSUREDATA =
0xF6
- BMP085_READTEMPCMD =
Commands
0x2E
- BMP085_READPRESSURECMD =
0x34
Constants inherited from I2CDevice
Instance Attribute Summary
Attributes inherited from I2CDevice
Instance Method Summary collapse
-
#cacl_sealevel_pressure(pressure, altitude) ⇒ Object
calculate the current pressure at sealevel from the given relative pressure and the gitven altitude.
-
#get_cal ⇒ Object
get the calibration values.
-
#initialize(args = {}) ⇒ Bmp180
constructor
initialize the device and read the calibration registers.
-
#read_pressure ⇒ Object
read the current relative pressure in Pa.
-
#read_sealevel_pressure(altitude = 0.0) ⇒ Object
calculate the current pressure at sealevel from the current relative pressure and the gitven altitude.
-
#read_temperature ⇒ Object
read the current real temperature in 0.1°C.
-
#read_temperature_and_pressure ⇒ Object
Read current temperature and realtive pressure.
Methods inherited from I2CDevice
Constructor Details
#initialize(args = {}) ⇒ Bmp180
initialize the device and read the calibration registers
params
* args : hash defaults to {}
** :mode : one of BMP085_ULTRALOWPOWER | BMP085_STANDARD | BMP085_HIGHRES | BMP085_ULTRAHIGHRES defaults to BMP085_STANDARD see datasheet for more information
** :address : device address defaults to 0x77
57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/templates/grove_pi/i2c/device/bmp180.rb', line 57 def initialize(args={}) @mode = args.delete(:mode) || BMP085_STANDARD args = { address: BMP085_I2CADDR }.merge(args) super args raise "Mode must be between #{BMP085_ULTRALOWPOWER} and #{BMP085_ULTRAHIGHRES}" unless [BMP085_ULTRALOWPOWER, BMP085_STANDARD, BMP085_HIGHRES, BMP085_ULTRAHIGHRES].include?(@mode) calibration end |
Instance Method Details
#cacl_sealevel_pressure(pressure, altitude) ⇒ Object
calculate the current pressure at sealevel from the given relative pressure and the gitven altitude
params
* altitude : curren altitude above sealevel in m
* pressure : current relative pressure in Pa
105 106 107 |
# File 'lib/templates/grove_pi/i2c/device/bmp180.rb', line 105 def cacl_sealevel_pressure(pressure, altitude) return pressure.to_f / ((1.0 - altitude.to_f / 44330.0) ** 5.255) end |
#get_cal ⇒ Object
get the calibration values
return
array of calibration data
113 114 115 |
# File 'lib/templates/grove_pi/i2c/device/bmp180.rb', line 113 def get_cal return @cal_AC1, @cal_AC2, @cal_AC3, @cal_AC4, @cal_AC5, @cal_AC6, @cal_B1, @cal_B2, @cal_MB, @cal_MC, @cal_MD end |
#read_pressure ⇒ Object
read the current relative pressure in Pa
76 77 78 |
# File 'lib/templates/grove_pi/i2c/device/bmp180.rb', line 76 def read_pressure return calc_real_pressure(read_raw_temperature, read_raw_pressure) end |
#read_sealevel_pressure(altitude = 0.0) ⇒ Object
calculate the current pressure at sealevel from the current relative pressure and the gitven altitude
params
* altitude : curren altitude above sealevel in m defaults to 0
95 96 97 98 |
# File 'lib/templates/grove_pi/i2c/device/bmp180.rb', line 95 def read_sealevel_pressure(altitude = 0.0) pressure = read_pressure() return cacl_sealevel_pressure(pressure, altitude) end |
#read_temperature ⇒ Object
read the current real temperature in 0.1°C
71 72 73 |
# File 'lib/templates/grove_pi/i2c/device/bmp180.rb', line 71 def read_temperature return calc_real_temperature(read_raw_temperature) end |
#read_temperature_and_pressure ⇒ Object
Read current temperature and realtive pressure
return
* temperature in 0.1°C, pressure in Pa
84 85 86 87 88 89 |
# File 'lib/templates/grove_pi/i2c/device/bmp180.rb', line 84 def read_temperature_and_pressure ut = read_raw_temperature up = read_raw_pressure return calc_real_temperature(ut), calc_real_pressure(ut, up) end |