Wie ändert man die I2C-Bus Adresse eines Sensors am Raspberry Pi?
Ich möchte zwei bme280 Sensoren an meinem Raspberry Pi anschließen, allerdings haben beide die gleiche Adresse.
Für den GND habe ich ein extra Kabel verwendet. SCL habe ich an das gleiche Kabel angeschlossen. Entweder bekomme ich keinen Wert oder ich bekomme -142.11129819307826 als Temperatur. Wenn ich dann einen Sensor abstöpsel kommt wieder 22.124424953595735 als normale Temperatur.
$ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- 76 --
Gibt es eine Möglichkeit die Adresse von 0x76 auf 0x77 zu ändern?
Dies gerne über die Konsole oder per Python.
2 Antworten
Nein die Sensoren haben entweder eine fixe Adresse oder du kannst die Adresse am Sensor mit ein paar Pins einstellen.
Beim BME280 musst du den SDO Pin auf High legen damit er die Adresse 77 hat. Sofern du eine fertige Platine hast kann das schwer bis fast unmöglich sein die zu ändern.
Gnd natürlich nicht den braucht der Sensor wie VCC immer aber es gibt einen sogenannten I2C MUX der das löst.
Allerdings musst du aufpassen, weil dir i2cdetect und die Standardtreiber von Raspbian das nicht erkennen können.
Für ein Python Programm ist das aber egal sofern du den Sensor selbst direkt per I2C Kernel Modul ansprichst.
Wieso nicht den GND PIN per Transistor schalten vom Pi aus ?
Meiner Erfahrung nach machen nicht versorgte Halbleiter am I2C Bus teilweise irgendetwas.
Außerdem müsste man den Sensor vor jedem auslesen dann neu Konfigurieren.
Die sauberere Lösung ists in dem Fall sicherlich die Dinger zu versorgen wenn sie am aktiven Bus hängen.
Mir fällt da ein:
- Zwei getrennte i2c verwenden. Es gibt auch i2c Multiplexer ICs mit denen man mehrere i2c slaves mit einem Hardware i2c ansprechen kann.
- Und ich sehe, dass manche fertige bme280 Boards einen Lötjumper haben mit dem man vielleicht die Adresse umschalten kann.
Leider hat mein Sensor nur einen:
VIV
GND
SCL
SDA
Pin. Ist es also unmöglich beide gleichzeitig laufen zu lassen?
Kann ich es dann irgendwie umsetzen, dass ich über eine Art Flipflop das GND Signal Umswitchen kann um zuerst die Daten von dem einen und dann die Daten von dem anderen ablesen zu können?