ROSANNAPAPINI.IT ≡ Accessories Circuitoimpreso Kits Educativos Amplifier
  • Temperature

  • BMP180 Barometer Pressure, Temperature, Altitude Sensor

BMP180 Barometer Pressure, Temperature, Altitude Sensor

$41.4 $66.24
This pre­ci­sion sen­sor from Bosch is the best low-cost sens­ing solu­tion for mea­sur­ing baro­met­ric pres­sure and tem­per­a­ture. Because pres­sure changes with alti­tude you can also use it as an altime­ter! The sen­sor is sol­dered onto a PCB with a 3.3V reg­u­la­tor, I2C lev­el shifter and pull-up resis­tors on the I2C pins. The BMP180 is the next-gen­er­a­tion of sen­sors from Bosch, and replaces the BMP085. The good news is that it is com­plete­ly iden­ti­cal to the BMP085 in terms of firmware/software/interfacing — you can use any exam­ple code/libraries for BMP085 as a drop-in replace­ment.SpecificationPres­sure sens­ing range: 300‑1100 hPa (9000m to ‑500m above sea lev­el);Up to 0.03hPa / 0.25m res­o­lu­tion;-40 to 85°C oper­a­tional range, -2°C tem­per­a­ture accu­ra­cy;Download& UsageBMP180 Datasheetbmp085 Demo Code for ArduinoDemo CodeArduino //Arduino 1.0 Only //Arduino 1.0 Only /*Based largely on code by Jim Lindblom Get pressure, altitude, and temperature from the BMP085. Serial.print it out at 9600 baud to serial monitor. */ #include <Wire.h> #define BMP085_ADDRESS 0x77 // I2C address of BMP085 const unsigned char OSS = 0; // Oversampling Setting // Calibration values int ac1; int ac2; int ac3; unsigned int ac4; unsigned int ac5; unsigned int ac6; int b1; int b2; int mb; int mc; int md; // b5 is calculated in bmp085GetTemperature(...), this variable is also used in bmp085GetPressure(...) // so ...Temperature(...) must be called before ...Pressure(...). long b5; void setup(){ Serial.begin(9600); Wire.begin(); bmp085Calibration(); } void loop() { float temperature = bmp085GetTemperature(bmp085ReadUT()); //MUST be called first float pressure = bmp085GetPressure(bmp085ReadUP()); float atm = pressure / 101325; // "standard atmosphere" float altitude = calcAltitude(pressure); //Uncompensated caculation - in Meters Serial.print("Temperature: "); Serial.print(temperature, 2); //display 2 decimal places Serial.println("deg C"); Serial.print("Pressure: "); Serial.print(pressure, 0); //whole number only. Serial.println(" Pa"); Serial.print("Standard Atmosphere: "); Serial.println(atm, 4); //display 4 decimal places Serial.print("Altitude: "); Serial.print(altitude, 2); //display 2 decimal places Serial.println(" M"); Serial.println();//line break delay(1000); //wait a second and get values again. } // Stores all of the bmp085's calibration values into global variables // Calibration values are required to calculate temp and pressure // This function should be called at the beginning of the program void bmp085Calibration() { ac1 = bmp085ReadInt(0xAA); ac2 = bmp085ReadInt(0xAC); ac3 = bmp085ReadInt(0xAE); ac4 = bmp085ReadInt(0xB0); ac5 = bmp085ReadInt(0xB2); ac6 = bmp085ReadInt(0xB4); b1 = bmp085ReadInt(0xB6); b2 = bmp085ReadInt(0xB8); mb = bmp085ReadInt(0xBA); mc = bmp085ReadInt(0xBC); md = bmp085ReadInt(0xBE); } // Calculate temperature in deg C float bmp085GetTemperature(unsigned int ut){ long x1, x2; x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15; x2 = ((long)mc << 11)/(x1 md); b5 = x1 x2; float temp = ((b5 8)>>4); temp = temp /10; return temp; } // Calculate pressure given up // calibration values must be known // b5 is also required so bmp085GetTemperature(...) must be called first. // Value returned will be pressure in units of Pa. long bmp085GetPressure(unsigned long up){ long x1, x2, x3, b3, b6, p; unsigned long b4, b7; b6 = b5 - 4000; // Calculate B3 x1 = (b2 * (b6 * b6)>>12)>>11; x2 = (ac2 * b6)>>11; x3 = x1 x2; b3 = (((((long)ac1)*4 x3)<<OSS) 2)>>2; // Calculate B4 x1 = (ac3 * b6)>>13; x2 = (b1 * ((b6 * b6)>>12))>>16; x3 = ((x1 x2) 2)>>2; b4 = (ac4 * (unsigned long)(x3 32768))>>15; b7 = ((unsigned long)(up - b3) * (50000>>OSS)); if (b7 < 0x80000000) p = (b7<<1)/b4; else p = (b7/b4)<<1; x1 = (p>>8) * (p>>8); x1 = (x1 * 3038)>>16; x2 = (-7357 * p)>>16; p = (x1 x2 3791)>>4; long temp = p; return temp; } // Read 1 byte from the BMP085 at 'address' char bmp085Read(unsigned char address) { unsigned char data; Wire.beginTransmission(BMP085_ADDRESS); Wire.write(address); Wire.endTransmission(); Wire.requestFrom(BMP085_ADDRESS, 1); while(!Wire.available()) ; return Wire.read(); } // Read 2 bytes from the BMP085 // First byte will be from 'address' // Second byte will be from 'address' 1 int bmp085ReadInt(unsigned char address) { unsigned char msb, lsb; Wire.beginTransmission(BMP085_ADDRESS); Wire.write(address); Wire.endTransmission(); Wire.requestFrom(BMP085_ADDRESS, 2); while(Wire.available()<2) ; msb = Wire.read(); lsb = Wire.read(); return (int) msb<<8 | lsb; } // Read the uncompensated temperature value unsigned int bmp085ReadUT(){ unsigned int ut; // Write 0x2E into Register 0xF4 // This requests a temperature reading Wire.beginTransmission(BMP085_ADDRESS); Wire.write(0xF4); Wire.write(0x2E); Wire.endTransmission(); // Wait at least 4.5ms delay(5); // Read two bytes from registers 0xF6 and 0xF7 ut = bmp085ReadInt(0xF6); return ut; } // Read the uncompensated pressure value unsigned long bmp085ReadUP(){ unsigned char msb, lsb, xlsb; unsigned long up = 0; // Write 0x34 (OSS<<6) into register 0xF4 // Request a pressure reading w/ oversampling setting Wire.beginTransmission(BMP085_ADDRESS); Wire.write(0xF4); Wire.write(0x34 (OSS<<6)); Wire.endTransmission(); // Wait for conversion, delay time dependent on OSS delay(2 (3<<OSS)); // Read register 0xF6 (MSB), 0xF7 (LSB), and 0xF8 (XLSB) msb = bmp085Read(0xF6); lsb = bmp085Read(0xF7); xlsb = bmp085Read(0xF8); up = (((unsigned long) msb << 16) | ((unsigned long) lsb << 8) | (unsigned long) xlsb) >> (8-OSS); return up; } void writeRegister(int deviceAddress, byte address, byte val) { Wire.beginTransmission(deviceAddress); // start transmission to device Wire.write(address); // send register address Wire.write(val); // send value to write Wire.endTransmission(); // end transmission } int readRegister(int deviceAddress, byte address){ int v; Wire.beginTransmission(deviceAddress); Wire.write(address); // register to read Wire.endTransmission(); Wire.requestFrom(deviceAddress, 1); // read a byte while(!Wire.available()) { // waiting } v = Wire.read(); return v; } float calcAltitude(float pressure){ float A = pressure/101325; float B = 1/5.25588; float C = pow(A,B); C = 1 - C; C = C /0.0000225577; return C; }123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249//Arduino 1.0 Only//Arduino 1.0 Only /*Based large­ly on code by  Jim Lind­blom  Get pres­sure, alti­tude, and tem­per­a­ture from the BMP085. Serial.print it out at 9600 baud to ser­i­al mon­i­tor. */ #include <Wire.h> #define BMP085_ADDRESS 0x77  // I2C address of BMP085 con­st unsigned char OSS = 0;  // Over­sam­pling Set­ting // Cal­i­bra­tion val­uesint ac1;int ac2;int ac3;unsigned int ac4;unsigned int ac5;unsigned int ac6;int b1;int b2;int mb;int mc;int md; // b5 is cal­cu­lat­ed in bmp085GetTemperature(…), this vari­able is also used in bmp085GetPressure(…)// so …Tem­per­a­ture(…) must be called before …Pres­sure(…).long b5;  void set­up(){  Ser­i­al.begin(9600);  Wire.begin();   bmp085Calibration();} void loop(){  float tem­per­a­ture = bmp085GetTemperature(bmp085ReadUT()); //MUST be called first  float pres­sure = bmp085GetPressure(bmp085ReadUP());  float atm = pres­sure / 101325; // “stan­dard atmos­phere”  float alti­tude = cal­cAlti­tude(pres­sure); //Uncompensated cac­u­la­tion — in Meters    Ser­i­al.print(“Tem­per­a­ture: ”);  Ser­i­al.print(tem­per­a­ture, 2); //display 2 dec­i­mal places  Ser­i­al.print­ln(“deg C”);   Ser­i­al.print(“Pres­sure: ”);  Ser­i­al.print(pres­sure, 0); //whole num­ber only.  Ser­i­al.print­ln(“ Pa”);   Ser­i­al.print(“Stan­dard Atmos­phere: ”);  Ser­i­al.print­ln(atm, 4); //display 4 dec­i­mal places   Ser­i­al.print(“Alti­tude: ”);  Ser­i­al.print(alti­tude, 2); //display 2 dec­i­mal places  Ser­i­al.print­ln(“ M”);   Ser­i­al.print­ln();//line break   delay(1000); //wait a sec­ond and get val­ues again.} // Stores all of the bmp085’s cal­i­bra­tion val­ues into glob­al vari­ables// Cal­i­bra­tion val­ues are required to cal­cu­late temp and pres­sure// This func­tion should be called at the begin­ning of the pro­gramvoid bmp085Calibration(){  ac1 = bmp085ReadInt(0xAA);  ac2 = bmp085ReadInt(0xAC);  ac3 = bmp085ReadInt(0xAE);  ac4 = bmp085ReadInt(0xB0);  ac5 = bmp085ReadInt(0xB2);  ac6 = bmp085ReadInt(0xB4);  b1 = bmp085ReadInt(0xB6);  b2 = bmp085ReadInt(0xB8);  mb = bmp085ReadInt(0xBA);  mc = bmp085ReadInt(0xBC);  md = bmp085ReadInt(0xBE);} // Cal­cu­late tem­per­a­ture in deg Cfloat bmp085GetTemperature(unsigned int ut){  long x1, x2;   x1 = (((long)ut - (long)ac6)*(long)ac5) » 15;  x2 = ((long)mc « 11)/(x1 md);  b5 = x1 x2;   float temp = ((b5 8)»4);  temp = temp /10;   return temp;} // Cal­cu­late pres­sure giv­en up// cal­i­bra­tion val­ues must be known// b5 is also required so bmp085GetTemperature(…) must be called first.// Val­ue returned will be pres­sure in units of Pa.long bmp085GetPressure(unsigned long up){  long x1, x2, x3, b3, b6, p;  unsigned long b4, b7;   b6 = b5 - 4000;  // Cal­cu­late B3  x1 = (b2 * (b6 * b6)»12)»11;  x2 = (ac2 * b6)»11;  x3 = x1 x2;  b3 = (((((long)ac1)*4 x3)«OSS) 2)»2;   // Cal­cu­late B4  x1 = (ac3 * b6)»13;  x2 = (b1 * ((b6 * b6)»12))»16;  x3 = ((x1 x2) 2)»2;  b4 = (ac4 * (unsigned long)(x3 32768))»15;   b7 = ((unsigned long)(up - b3) * (50000»OSS));  if (b7 < 0x80000000)    p = (b7«1)/b4;  else    p = (b7/b4)«1;   x1 = (p»8) * (p»8);  x1 = (x1 * 3038)»16;  x2 = (-7357 * p)»16;  p = (x1 x2 3791)»4;   long temp = p;  return temp;} // Read 1 byte from the BMP085 at ‘address’char bmp085Read(unsigned char address){  unsigned char data;   Wire.begin­Trans­mis­sion(BMP085_ADDRESS);  Wire.write(address);  Wire.end­Trans­mis­sion();   Wire.request­From(BMP085_ADDRESS, 1);  while(!Wire.avail­able())    ;   return Wire.read();} // Read 2 bytes from the BMP085// First byte will be from ‘address’// Sec­ond byte will be from ‘address’ 1int bmp085ReadInt(unsigned char address){  unsigned char msb, lsb;   Wire.begin­Trans­mis­sion(BMP085_ADDRESS);  Wire.write(address);  Wire.end­Trans­mis­sion();   Wire.request­From(BMP085_ADDRESS, 2);  while(Wire.avail­able()<2)    ;  msb = Wire.read();  lsb = Wire.read();   return (int) msb«8 | lsb;} // Read the uncom­pen­sat­ed tem­per­a­ture val­ueunsigned int bmp085ReadUT(){  unsigned int ut;   // Write 0x2E into Reg­is­ter 0xF4  // This requests a tem­per­a­ture read­ing  Wire.begin­Trans­mis­sion(BMP085_ADDRESS);  Wire.write(0xF4);  Wire.write(0x2E);  Wire.end­Trans­mis­sion();   // Wait at least 4.5ms  delay(5);   // Read two bytes from reg­is­ters 0xF6 and 0xF7  ut = bmp085ReadInt(0xF6);  return ut;} // Read the uncom­pen­sat­ed pres­sure val­ueunsigned long bmp085ReadUP(){   unsigned char msb, lsb, xlsb;  unsigned long up = 0;   // Write 0x34 (OSS«6) into reg­is­ter 0xF4  // Request a pres­sure read­ing w/ over­sam­pling set­ting  Wire.begin­Trans­mis­sion(BMP085_ADDRESS);  Wire.write(0xF4);  Wire.write(0x34 (OSS«6));  Wire.end­Trans­mis­sion();   // Wait for con­ver­sion, delay time depen­dent on OSS  delay(2 (3«OSS));   // Read reg­is­ter 0xF6 (MSB), 0xF7 (LSB), and 0xF8 (XLSB)  msb = bmp085Read(0xF6);  lsb = bmp085Read(0xF7);  xlsb = bmp085Read(0xF8);   up = (((unsigned long) msb « 16) | ((unsigned long) lsb « 8) | (unsigned long) xlsb) » (8-OSS);   return up;} void writeReg­is­ter(int deviceAd­dress, byte address, byte val) {  Wire.begin­Trans­mis­sion(deviceAd­dress); // start trans­mis­sion to device   Wire.write(address);       // send reg­is­ter address  Wire.write(val);         // send val­ue to write  Wire.end­Trans­mis­sion();     // end trans­mis­sion} int read­Reg­is­ter(int deviceAd­dress, byte address){   int v;  Wire.begin­Trans­mis­sion(deviceAd­dress);  Wire.write(address); // reg­is­ter to read  Wire.end­Trans­mis­sion();   Wire.request­From(deviceAd­dress, 1); // read a byte   while(!Wire.avail­able()) {    // wait­ing  }   v = Wire.read();  return v;} float cal­cAlti­tude(float pres­sure){   float A = pres­sure/101325;  float B = 1/5.25588;  float C = pow(A,B);  C = 1 - C;  C = C /0.0000225577;   return C;} YouTube link :
Temperature

Temperature

  • Remote WiFi Thermostat Modules
    $12.6 $22.3
  • Atmospheric Sensor Breakout — BME280 5V
    $35.1 $51.95
  • Infrared Thermometer MLX90614 Breakout Board
    $76.5 $130.82
  • DS18B20 Temperature Sensor Module
    $17.1 $22.91
  • GY-906-BCC Infrared Temperature Sensor
    $17.17 $26.62
  • GY-906-BAA Infrared Temperature Sensor
    $15.62 $31.09
  • GY-906-DCI Long-distance Infrared Temperature Sensor
    $56.97 $86.59
  • DS18B20 Temperature Measurement Module
    $13.96 $19.54
  • MLX90614ESF Sensor Module
    $47.3 $87.5
  • DHT22 Humidity and Temperature Sensor
    $33.3 $48.29
  • BME680 Sensor — Temperature, Humidity, Pressure and Gas
    $67.5 $87.08
  • BMP180 Barometer Pressure, Temperature, Altitude Sensor
    $41.4 $66.24
  • LM75 Temperature Sensor High-speed I2C
    $20.28 $35.69
  • DHT11 Temperature and Relative Humidity Sensor Module
    $26.1 $51.68
  • Atmospheric Sensor Breakout — BME280 3.3V
    $35.1 $58.62
  • HR202 Humidity Sensor Module
    $24.3 $34.26

© 2026 - ROSANNAPAPINI.IT