ridolfa.eu

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.

1-Wire-Testplatine

1-Wire-Platine

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.

  1. 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.
  2. 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.
../projects/p02/p02-01.png

↑ Nach oben

Autor kontaktieren

Ihre Nachricht wird per E-Mail an den Autor gesendet, aber nicht veröffentlicht.