<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://air.imag.fr/index.php?action=history&amp;feed=atom&amp;title=Capteur_de_pression_BMP085</id>
	<title>Capteur de pression BMP085 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://air.imag.fr/index.php?action=history&amp;feed=atom&amp;title=Capteur_de_pression_BMP085"/>
	<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Capteur_de_pression_BMP085&amp;action=history"/>
	<updated>2026-06-21T04:30:01Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://air.imag.fr/index.php?title=Capteur_de_pression_BMP085&amp;diff=12643&amp;oldid=prev</id>
		<title>Donsez: Created page with &quot;https://www.sparkfun.com/products/retired/9694 * http://wiring.org.co/learning/libraries/bmp085.html  * 3.3V * GND * PIN_SDL=8 * PIN_SDA=9    ==Arduino== &lt;pre&gt; #include &lt;Wire....&quot;</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Capteur_de_pression_BMP085&amp;diff=12643&amp;oldid=prev"/>
		<updated>2013-10-07T19:37:11Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;https://www.sparkfun.com/products/retired/9694 * http://wiring.org.co/learning/libraries/bmp085.html  * 3.3V * GND * PIN_SDL=8 * PIN_SDA=9    ==Arduino== &amp;lt;pre&amp;gt; #include &amp;lt;Wire....&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;https://www.sparkfun.com/products/retired/9694&lt;br /&gt;
* http://wiring.org.co/learning/libraries/bmp085.html&lt;br /&gt;
&lt;br /&gt;
* 3.3V&lt;br /&gt;
* GND&lt;br /&gt;
* PIN_SDL=8&lt;br /&gt;
* PIN_SDA=9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Arduino==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// From the datasheet the BMP module address LSB distinguishes&lt;br /&gt;
// between read (1) and write (0) operations, corresponding to &lt;br /&gt;
// address 0xEF (read) and 0xEE (write).&lt;br /&gt;
// shift the address 1 bit right (0xEF or 0xEE), the Wire library only needs the 7&lt;br /&gt;
// most significant bits for the address 0xEF &amp;gt;&amp;gt; 1 = 0x77&lt;br /&gt;
// 0xEE &amp;gt;&amp;gt; 1 = 0x77&lt;br /&gt;
&lt;br /&gt;
// http://wiring.org.co/learning/libraries/bmp085.html&lt;br /&gt;
&lt;br /&gt;
// 3.3V&lt;br /&gt;
// GND&lt;br /&gt;
// PIN_SDL=8&lt;br /&gt;
// PIN_SDA=9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int I2C_ADDRESS = 0x77;  // sensor address&lt;br /&gt;
&lt;br /&gt;
// oversampling setting&lt;br /&gt;
// 0 = ultra low power&lt;br /&gt;
// 1 = standard&lt;br /&gt;
// 2 = high&lt;br /&gt;
// 3 = ultra high resolution&lt;br /&gt;
const unsigned char oversampling_setting = 3; //oversampling for measurement&lt;br /&gt;
const unsigned char pressure_conversiontime[4] = { &lt;br /&gt;
  5, 8, 14, 26 };  // delays for oversampling settings 0, 1, 2 and 3   &lt;br /&gt;
&lt;br /&gt;
// sensor registers from the BOSCH BMP085 datasheet&lt;br /&gt;
int ac1;&lt;br /&gt;
int ac2; &lt;br /&gt;
int ac3; &lt;br /&gt;
unsigned int ac4;&lt;br /&gt;
unsigned int ac5;&lt;br /&gt;
unsigned int ac6;&lt;br /&gt;
int b1; &lt;br /&gt;
int b2;&lt;br /&gt;
int mb;&lt;br /&gt;
int mc;&lt;br /&gt;
int md;&lt;br /&gt;
&lt;br /&gt;
// variables to keep the values&lt;br /&gt;
int temperature = 0;&lt;br /&gt;
long pressure = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{  &lt;br /&gt;
  Serial.begin(9600);  &lt;br /&gt;
  Wire.begin();&lt;br /&gt;
  getCalibrationData();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  readSensor();&lt;br /&gt;
  Serial.print(&amp;quot;Temperature: &amp;quot;);&lt;br /&gt;
  Serial.print(temperature,DEC);&lt;br /&gt;
  Serial.print(&amp;quot; Pressure: &amp;quot;);&lt;br /&gt;
  Serial.println(pressure,DEC);&lt;br /&gt;
  delay(100);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Below there are the utility functions to get data from the sensor.&lt;br /&gt;
&lt;br /&gt;
// read temperature and pressure from sensor&lt;br /&gt;
void readSensor() {&lt;br /&gt;
  int  ut= readUT();&lt;br /&gt;
  long up = readUP();&lt;br /&gt;
  long x1, x2, x3, b3, b5, b6, p;&lt;br /&gt;
  unsigned long b4, b7;&lt;br /&gt;
&lt;br /&gt;
  //calculate true temperature&lt;br /&gt;
  x1 = ((long)ut - ac6) * ac5 &amp;gt;&amp;gt; 15;&lt;br /&gt;
  x2 = ((long) mc &amp;lt;&amp;lt; 11) / (x1 + md);&lt;br /&gt;
  b5 = x1 + x2;&lt;br /&gt;
  temperature = (b5 + 8) &amp;gt;&amp;gt; 4;&lt;br /&gt;
&lt;br /&gt;
  //calculate true pressure&lt;br /&gt;
  b6 = b5 - 4000;&lt;br /&gt;
  x1 = (b2 * (b6 * b6 &amp;gt;&amp;gt; 12)) &amp;gt;&amp;gt; 11; &lt;br /&gt;
  x2 = ac2 * b6 &amp;gt;&amp;gt; 11;&lt;br /&gt;
  x3 = x1 + x2;&lt;br /&gt;
  b3 = (((int32_t) ac1 * 4 + x3)&amp;lt;&amp;lt;oversampling_setting + 2) &amp;gt;&amp;gt; 2;&lt;br /&gt;
  x1 = ac3 * b6 &amp;gt;&amp;gt; 13;&lt;br /&gt;
  x2 = (b1 * (b6 * b6 &amp;gt;&amp;gt; 12)) &amp;gt;&amp;gt; 16;&lt;br /&gt;
  x3 = ((x1 + x2) + 2) &amp;gt;&amp;gt; 2;&lt;br /&gt;
  b4 = (ac4 * (uint32_t) (x3 + 32768)) &amp;gt;&amp;gt; 15;&lt;br /&gt;
  b7 = ((uint32_t) up - b3) * (50000 &amp;gt;&amp;gt; oversampling_setting);&lt;br /&gt;
  p = b7 &amp;lt; 0x80000000 ? (b7 * 2) / b4 : (b7 / b4) * 2;&lt;br /&gt;
&lt;br /&gt;
  x1 = (p &amp;gt;&amp;gt; 8) * (p &amp;gt;&amp;gt; 8);&lt;br /&gt;
  x1 = (x1 * 3038) &amp;gt;&amp;gt; 16;&lt;br /&gt;
  x2 = (-7357 * p) &amp;gt;&amp;gt; 16;&lt;br /&gt;
  pressure = p + ((x1 + x2 + 3791) &amp;gt;&amp;gt; 4);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// read uncompensated temperature value&lt;br /&gt;
unsigned int readUT() {&lt;br /&gt;
  writeRegister(0xf4,0x2e);&lt;br /&gt;
  delay(5); // the datasheet suggests 4.5 ms&lt;br /&gt;
  return readIntRegister(0xf6);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// read uncompensated pressure value&lt;br /&gt;
long readUP() {&lt;br /&gt;
  writeRegister(0xf4,0x34+(oversampling_setting&amp;lt;&amp;lt;6));&lt;br /&gt;
  delay(pressure_conversiontime[oversampling_setting]);&lt;br /&gt;
&lt;br /&gt;
  unsigned char msb, lsb, xlsb;&lt;br /&gt;
  Wire.beginTransmission(I2C_ADDRESS);&lt;br /&gt;
  Wire.write(0xf6);  // register to read&lt;br /&gt;
  Wire.endTransmission();&lt;br /&gt;
&lt;br /&gt;
  Wire.requestFrom(I2C_ADDRESS, 3); // request three bytes&lt;br /&gt;
  while(!Wire.available()); // wait until data available&lt;br /&gt;
  msb = Wire.read();&lt;br /&gt;
  while(!Wire.available()); // wait until data available&lt;br /&gt;
  lsb |= Wire.read();&lt;br /&gt;
  while(!Wire.available()); // wait until data available&lt;br /&gt;
  xlsb |= Wire.read();&lt;br /&gt;
  return (((long)msb&amp;lt;&amp;lt;16) | ((long)lsb&amp;lt;&amp;lt;8) | ((long)xlsb)) &amp;gt;&amp;gt;(8-oversampling_setting);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void  getCalibrationData() {&lt;br /&gt;
  Serial.println(&amp;quot;Reading Calibration Data&amp;quot;);&lt;br /&gt;
  ac1 = readIntRegister(0xAA);&lt;br /&gt;
  Serial.print(&amp;quot;AC1: &amp;quot;);&lt;br /&gt;
  Serial.println(ac1,DEC);&lt;br /&gt;
  ac2 = readIntRegister(0xAC);&lt;br /&gt;
  Serial.print(&amp;quot;AC2: &amp;quot;);&lt;br /&gt;
  Serial.println(ac2,DEC);&lt;br /&gt;
  ac3 = readIntRegister(0xAE);&lt;br /&gt;
  Serial.print(&amp;quot;AC3: &amp;quot;);&lt;br /&gt;
  Serial.println(ac3,DEC);&lt;br /&gt;
  ac4 = readIntRegister(0xB0);&lt;br /&gt;
  Serial.print(&amp;quot;AC4: &amp;quot;);&lt;br /&gt;
  Serial.println(ac4,DEC);&lt;br /&gt;
  ac5 = readIntRegister(0xB2);&lt;br /&gt;
  Serial.print(&amp;quot;AC5: &amp;quot;);&lt;br /&gt;
  Serial.println(ac5,DEC);&lt;br /&gt;
  ac6 = readIntRegister(0xB4);&lt;br /&gt;
  Serial.print(&amp;quot;AC6: &amp;quot;);&lt;br /&gt;
  Serial.println(ac6,DEC);&lt;br /&gt;
  b1 = readIntRegister(0xB6);&lt;br /&gt;
  Serial.print(&amp;quot;B1: &amp;quot;);&lt;br /&gt;
  Serial.println(b1,DEC);&lt;br /&gt;
  b2 = readIntRegister(0xB8);&lt;br /&gt;
  Serial.print(&amp;quot;B2: &amp;quot;);&lt;br /&gt;
  Serial.println(b1,DEC);&lt;br /&gt;
  mb = readIntRegister(0xBA);&lt;br /&gt;
  Serial.print(&amp;quot;MB: &amp;quot;);&lt;br /&gt;
  Serial.println(mb,DEC);&lt;br /&gt;
  mc = readIntRegister(0xBC);&lt;br /&gt;
  Serial.print(&amp;quot;MC: &amp;quot;);&lt;br /&gt;
  Serial.println(mc,DEC);&lt;br /&gt;
  md = readIntRegister(0xBE);&lt;br /&gt;
  Serial.print(&amp;quot;MD: &amp;quot;);&lt;br /&gt;
  Serial.println(md,DEC);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void writeRegister(unsigned char r, unsigned char v)&lt;br /&gt;
{&lt;br /&gt;
  Wire.beginTransmission(I2C_ADDRESS);&lt;br /&gt;
  Wire.write(r);&lt;br /&gt;
  Wire.write(v);&lt;br /&gt;
  Wire.endTransmission();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// read a 16 bit register&lt;br /&gt;
int readIntRegister(unsigned char r)&lt;br /&gt;
{&lt;br /&gt;
  unsigned char msb, lsb;&lt;br /&gt;
  Wire.beginTransmission(I2C_ADDRESS);&lt;br /&gt;
  Wire.write(r);  // register to read&lt;br /&gt;
  Wire.endTransmission();&lt;br /&gt;
&lt;br /&gt;
  Wire.requestFrom(I2C_ADDRESS, 2); // request two bytes&lt;br /&gt;
  while(!Wire.available()); // wait until data available&lt;br /&gt;
  msb = Wire.read();&lt;br /&gt;
  while(!Wire.available()); // wait until data available&lt;br /&gt;
  lsb = Wire.read();&lt;br /&gt;
  return (((int)msb&amp;lt;&amp;lt;8) | ((int)lsb));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// read an 8 bit register&lt;br /&gt;
/*&lt;br /&gt;
unsigned char readRegister(unsigned char r)&lt;br /&gt;
{&lt;br /&gt;
  unsigned char v;&lt;br /&gt;
  Wire.beginTransmission(I2C_ADDRESS);&lt;br /&gt;
  Wire.send(r);  // register to read&lt;br /&gt;
  Wire.endTransmission();&lt;br /&gt;
&lt;br /&gt;
  Wire.requestFrom(I2C_ADDRESS, 1); // request a byte&lt;br /&gt;
  while(!Wire.available()); // wait until data available&lt;br /&gt;
  v = Wire.receive();&lt;br /&gt;
  return v;&lt;br /&gt;
}&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Donsez</name></author>
	</entry>
</feed>