0

I have connected BMP180 sensor:

enter image description here

to Arduino and was able to read its values with appropriate samples (from Adafruit BMP085 Library and Adafruit BMP085 Unified).

Apparently, this sensor is sending information via I2C bus.

However, I2C protocol assumes addresses of connected devices.

What are addresses in my case? How to know and/or change them?

Is it possible to connect several BMP180 to a single Arduino?

  • 1
    Datasheet. Library source. Why think anywhere else? – Ignacio Vazquez-Abrams Sep 21 '15 at 19:04
  • It was hard to believe for me, that address is burned into IC once forever. – Dims Sep 22 '15 at 6:57
  • It isn't "burned", it's just part of the logic of the IC. – Ignacio Vazquez-Abrams Sep 22 '15 at 6:58
  • Anyway, I don't understand, what is the reason to have addressing system without an ability to assign addresses. It is somehow normal to have fixed MAC addresses, because they are long and can be done globally unique, but what is the reason to have fixed 8 bit addresses? There is a big chance that different devices will have same address and impossible to use together. – Dims Sep 22 '15 at 7:03
1

From the datasheet:

4.2 Device and register address

The BMP085 module address is shown below. The LSB of the device address distinguishes between read (1) and write (0) operation, corresponding to address 0xEF (read) and 0xEE (write).

With the Wire library you divide that by 2 (because it handles the read/write bit) so the address for using with Wire is:

0xEE / 2 = 0x77

Which is mentioned in the Adafruit library:

#define BMP085_I2CADDR 0x77

Is it possible to connect several BMP180 to a single Arduio?

You can certainly connect two of them. From the datasheet:

There is an easy way to connect two BMP085 to the same I2C bus: You can use the XCLR input of BMP085 to set one BMP085 part silent while you communicate with the other BMP085 part via I2C and vice versa. The signals can be provided by two digital outputs of the microcontroller, or one digital output and one inverter.

If you have access to the XCLR input (the Adafruit board broke it out, I can't tell with the board in your photo) you could use that method. Otherwise do what some of the other answers suggested, and use an I2C multiplexer.

  • So, address is embedded into hardware and it is impossible to change it? I have read that BMP180 does not have XCLR input, so I can't connect even two of them is this is true? – Dims Sep 22 '15 at 6:55
  • What is the reason to embed several bits without any ability to change them? Isn't it normal to expect several sensors connected to single controller or this is bad practice? – Dims Sep 22 '15 at 6:56
  • There is a conflict here between trying to make cheap, simple devices, and having someone wanting to have 1000 of them in some sort of network. Some I2C devices have pins you can tie high or low to alter their addresses. This particular one, being small, does not seem to have that ability. – Nick Gammon Sep 22 '15 at 7:51
  • May be I still don't understand something. Why are you speaking about network of 1000 devices? From my point of view I require only 2 devices and bad luck. Suppose I bought device 1 and device 2 and accidentally they have same address which I can't change. I need to throw one of devices into trash can and order a new one, still having a big chance it will have same address again. – Dims Sep 22 '15 at 8:44
  • 1
    Look, say you bought 20 DVD players. They all have the same remote control. The remote control affects all of them at the same time because they have the same address. This is by design, not some sort of fault. – Nick Gammon Sep 22 '15 at 9:34
1

Line 30 in Adafruit_BMP085.h clearly give you the address of sensor. Looks like the address is fixed meaning the only way you can connect several of these sensors is using a i2c multiplexer

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.