Moin,
ich würde gern mehrere HYT-939-Sensoren mit meinem RaspberryPi Pico über i2c verbinden und Temperatur und Luftfeuchtigkeit auslesen.
Um den Sensor kennenzulernen habe ich mir einen Testaufbau auf dem Breadboard und meinem alten Raspberry Pi 2b gemacht und konnte bereits Temperatur und Luftfeuchtigkeit mittels eines kleinen Python-Programs auslesen. So weit so gut.
Ich habe die VCC des Sensors mit dem GPIO4 des RaspberryPi verbunden, um ihn über das Skript ein- und wieder auszuschalten zu können.
Wenn ich mehrere Sensoren an den gleichen i2c schließe, brauchen die natürlich andere Adressen, oder ich brauche einen mux. Im Datenblatt habe ich gelesen, dass man die Adresse des Sensors über einen Command-Mode anpassen kann. Gesagt - Getan. Nach etwas debugging hatte ich mir die nötigen Schritte und in Python-Code umgesetzt.
Die Schritte werden auf Seite 18 im Datenblatt Beispielhaft für die Adressänderungen von '0x28' auf '0x31' beschrieben. Datenblatt (https://my.avnet.com/wcm/connect/c5b43462-09d1-4e07-bd61-dbee28c2f3a5/IST-HYT-939-%28With-Sintered-Metal-Filter%29-EN-Datasheet.pdf?MOD=AJPERES&CVID=oMycD2g) wie folgt beschrieben:
- Power On
- Command '0XA0' an das die Adresse 0x28 schicken und die beiden restlichen Byte auf 0x00 setzen.
- (optional) ACK abwarten
- aktuelle Adresse auslesen mit '0x1C' an die Adresse '0x28' senden und die beiden restlichen Byte mit '0x00' auffüllen
- Register '0x1C' Auslesen und auswerten, ob die aktuelle Adresse im dritten Byte steht
- Wenn nein, dann Abbruch -> Power Off / Power on und nochmal von vorn, Wenn ja weiter mit 7
- Neue Adresse setzen in dem man 2 Byte an das Register '0x5C' der Adresse '0x28' sendet. Im MSB steht '0x00' und dem LSB steht die neue Adresse '0x31'
- Schreibvorgang bestätigen, indem man die Aktuelle noch einmal ausliest.
Im Datenblatt wird erwähnt, man den Sensor ausschalten soll, falls einer der Schritte fehlschlägt und nochmal ein von vorn beginnen soll. Falls der Schreibvorgang erfolgreich ist, steht in der Response '0x81' und die neue Adresse.
Mein Code sieht dazu folgendermaßen aus:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
Nach dem ersten Ausführen des Codes, war die Antwort, dass das Schreiben nicht erfolgreich war, da die Antwort in der Variable [i]addressDataNew[/i] die Werte [128, 112, 0] enthielt, was für mich auf einen Fehler hingedeutet hat.
Darauf hin habe ich, wie im Datenblatt beschrieben, den Sensor über mein Skript ausgeschaltet.
Jetzt kommen wir zu meinem Problem, nach dem erneuten Anschalten ließ sich der Sensor weder über die alte Adresse '0x28' und '0x31' ansprechen. Sowohl über die Python smbus lib als auch über die i2c-Schnitstelle im Linux 'i2c-detect' kann ich ihn nicht sehen? Kann ich den Sensor noch retten, oder muss ich ihn wegwerfen? Einen Powercycle habe ich bereits mehrfach durchgeführt. Sowohl mittels Abziehen des Sensors, Neustart des RaspberryPi als auch die Trennung des Raspberry Pi vom Strom (inkl. 2h Wartezeit).
Was kann ich jetzt noch machen, oder ist der Sensor kaputt? Welchen Fehler habe ich bei der Adressänderung gemacht?
Viele Grüße, Paul
tldr; Mein HYT939-Sensor lässt sich nach einer "Änderung" der i2c-Adresse nicht mehr ansprechen. Sowohl über die Python smbus lib als auch über die i2c-Schnitstelle im Linux 'i2c-detect'? Kann ich den Sensor noch retten, oder muss ich ihn wegwerfen? Powercycle habe ich bereits durchgeführt. Sowohl mittels Abziehen des Sensors, Neustart des RaspberryPi als auch die Trennung des Raspberry Pi vom Strom.