You use different addresses. Most libraries know the default address for the chip they handle so you don't always have to specify an address, but there is an address for each chip.
Sometimes you have to specify the address in the constructor: LIBRARY myInstance(address);
or LIBRARY myInstance = LIBRARY(address);
Thank you johnwasser, I understand. Some last questions: For each device (with a different slave number), do I have to insert a Wire.begin();?
Is it safe to call it one time per device? In fact that was my first question. I read somewhere that begin() method has to be called only one time.
No. You only need one Wire.begin() for all I2C/Wire/TWI devices.
I looked at the Wire library and it appears that it would be OK to call Wire.begin() more than once, as long as they are all done before any of the libraries tries to send or receive data. Better to require the Wire.begin() call before the libraries
And, I really wish library authors would not do it that way. For maximum flexibility, the library should accept a reference to the proper class type and let the user configure the object outside of the library.
So, a library that does Serial I/O would accept a reference to a Stream object. A library that needs SPI would accept a reference to a SPIClass object. A library that needs I2C would accept a reference to TwoWire object. Etc, etc.
Doing the above would be really helpful to those using boards with multiple Serial, I2C, SPI ports.
I may be wrong, but it looks like just including Wire library with #include <Wire.h> open it. I say that because I just commented wire.begin() in every libs of my code and it works still.