Ein Python-Treiber für den DS2482 1-Wire-Bridge
Veröffentlicht:
Ich habe ein Heimautomatisierungsprojekt gestartet, das auf einem Raspberry Pi B3, einem ESP8266-Controller, Python und 1-Wire-Geräten basiert. Leider war meine Erfahrung mit der 1-Wire-Schnittstelle des RasPi enttäuschend – langsam und wenig zuverlässig. Manchmal wurden Sensoren nicht erkannt oder Änderungen der Sensorwerte nicht erfasst. Nach einigen Recherchen im Internet entschloss ich mich, die RasPi-1-Wire-Schnittstelle durch den DS2482 zu ersetzen, eine I2C-zu-1-Wire-Bridge. Das Gerät wird über den I2C-Bus mit dem Host verbunden und verfügt über eine hochwertige Programmierschnittstelle. Die andere Seite des Geräts verwaltet den 1-Wire-Bus im Detail, einschließlich der Bus-Signaltiming, ohne jede Host-Belastung. Da ich keine Python-Bibliothek für dieses Gerät finden konnte, entwickelte ich schließlich einen eigenen Treiber für die Bridge.
Treiber-Übersicht
Der Treiber ‘DS2482rsf.py’ benötigt vier grundlegende I2C-Befehle, die vom Hostsystem bereitgestellt werden. Sowohl die RasPi-I2C-Schnittstelle mit der smbus-Bibliothek als auch die PIGPIO-Bibliothek (die ich verwende) unterstützen diese Befehle. Die Micropython-Version wurde für den ESP8286-Controller mit Micropython-Firmware entwickelt; der Treiber sollte jedoch auf jeder Plattform funktionieren, die Python oder Micropython unterstützt und eine I2C-Schnittstelle besitzt. Weicht die I2C-Befehlssyntax ab, müssen nur die I2C-Schreib- und Leseaufrufe angepasst werden.
Unterklassen
Die Treiberklasse enthält Unterklassen zur Unterstützung bestimmter 1-Wire-Geräte.
- class DS18B20
- 1-Wire-Thermometer
- class DS24SN
- DS2401, DS2411 Silicon-Number-Geräte [nützlich, um den Ein-/Aus-Status eines elektrischen Bauteils zu ermitteln]
- class DS2406
- Digitales Ein-/Ausgabegerät
Den DS2482-Treiber verwenden
Verbinden, installieren und betreiben
Kurz gefasst sind folgende Schritte erforderlich:
- Den PIGPIO-Daemon installieren.
- Einen DS2482-100 oder DS2482-800 über den I2C-Bus mit dem Raspberry Pi verbinden. Den Level-Shifter von 5V (RasPi) auf 3,3V (DS2482) nicht vergessen.
- 1-Wire-Geräte (DS18B20, DS2401, DS2411, DS2406) am DS2482 anschließen.
- Die I2C-Schnittstelle des RasPi aktivieren und prüfen, ob der DS2482 erkannt wird.
- Die DS2482-Treiberdateien herunterladen.
- Die 1-Wire-Geräte-IDs ermitteln (siehe unten).
- Die Startdatei entsprechend den angeschlossenen 1-Wire-Geräten und deren IDs anpassen.
Treiber-Download
- Python:
- Micropython:
Hinweis
Aufgrund eines Fehlers (gemeldet von flor66, herzlichen Dank) ist der Micropython-Code leider noch nicht verfügbar
Wenn andere I2C-Bibliotheken anstelle von PIGPIO verwendet werden sollen, z.B. RasPi-I2C, bitte die pi.i2c…-Aufrufe in den aufgeführten Funktionen durch die entsprechenden Aufrufe der anderen Bibliothek ersetzen.
- def I2C_write_byte
- pi.i2c_write
- pi.i2c_write_device
- def I2C_readbyte
- pi.i2c_read_byte
- def i2c_connect
- pi.i2c_open
- def class_terminate
- pi.i2c_close
Geräte-ID ermitteln
1-Wire-Geräte werden über ihre individuelle 64-Bit-ID angesprochen. Die Ermittlung der ID eines Geräts ist eine Treiberfunktion.
- Das Gerät am 1-Wire-Bus anschließen und alle anderen Geräte trennen. Das betreffende Gerät sollte das einzige am Bus sein.
- ds2482_run.py ausführen und auf Anfrage y eingeben, wenn ein Einzelgerätetest angefragt wird. Die 64-Bit-ID wird als 8 ROM-Bytes dargestellt, jeweils als Hexadezimal- und Dezimalzahl. Die Nummer unbedingt notieren. Der unten stehende Screenshot zeigt Fehlermeldungen, da mehr als ein Gerät am Bus angeschlossen war.
Autor kontaktieren
Ihre Nachricht wird per E-Mail an den Autor gesendet, aber nicht veröffentlicht.