Fehlende Meßwerte bei den DS18B20- und BME280-Sensoren

Einleitung

@ckrohne beobachtete nach der Inbetriebnahme des Datenloggers bei Willkommen, Christian! sporadisch fehlende Meßwerte bei den DS18B20- und BME280-Sensoren.

Rückfrage

Allerdings werden nicht immer alle Daten geliefert - da stellt sich mir die Frage, warum.
Es sind auch einige Fehler im Log-Protokoll zu sehen.

@Andreas: Was ist hierfür die Ursache?
Log.txt (28,2 KB)

Ich sehe hier zwei verschiedene Probleme.

1. DS18B20-Sensoren

  160.0003 [terkin.datalogger           ] INFO   : Reading sensor port "DS18X20Sensor"
  160.0358 [terkin.driver.ds18x20_sensor] INFO   : Acquire readings from all DS18X20 sensors attached to bus "onewire:0"
  160.8268 [terkin.driver.ds18x20_sensor] INFO   : Start conversion for DS18X20 devices on bus "onewire:0"
  160.9329 [terkin.driver.ds18x20_sensor] INFO   : Reading DS18X20 device "28ff0c07c0170160"
  160.9990 [terkin.driver.ds18x20_sensor] WARNING: No response from DS18X20 device "28ff0c07c0170160"
  161.0333 [terkin.driver.ds18x20_sensor] INFO   : Reading DS18X20 device "28ff641d8fa5514a"
  161.0994 [terkin.driver.ds18x20_sensor] WARNING: No response from DS18X20 device "28ff641d8fa5514a"
  161.1337 [terkin.driver.ds18x20_sensor] INFO   : Reading DS18X20 device "28ff641d8fc17e49"
  161.2002 [terkin.driver.ds18x20_sensor] WARNING: No response from DS18X20 device "28ff641d8fc17e49"

Es werden scheinbar nicht immer alle Sensoren erfasst. Das kann a) an der Hardware liegen und b) kann es vielleicht mit dem “nativen” Treiber besser werden. Momentan wird bei Dir noch der “Pure-Python” Treiber verwendet:

Using pure-Python 1-Wire driver on Pycom MicroPython

Ich empfehle den “nativen Treiber”, der dann folgendermaßen Bericht abstattet:

Using native 1-Wire driver on Pycom MicroPython

Die Umschaltung klappt folgendermaßen über die Aktivierung des “driver” Attributs.

2. BME280-Sensor

  161.3903 [terkin.datalogger           ] INFO   : Reading sensor port "BME280Sensor"
  161.4255 [terkin.datalogger           ] ERROR  : Reading sensor "BME280Sensor" failed
Traceback (most recent call last):
  File "/flash/lib/terkin/datalogger.py", line 461, in read_sensors
  File "/flash/lib/terkin/util.py", line 235, in __exit__
  File "/flash/lib/terkin/datalogger.py", line 461, in read_sensors
  File "/flash/lib/terkin/driver/bme280_sensor.py", line 45, in read
  File "/flash/dist-packages/bme280_float.py", line 154, in read_compensated_data
  File "/flash/dist-packages/bme280_float.py", line 119, in read_raw_data
OSError: I2C bus error

Dass der BME280-Sensor sporadisch nicht gelesen werden kann, haben wir bisher noch nicht erlebt. Vielleicht hat sich dieses Problem jedoch auch erst neulich über Shut down peripherals regardless of using deep sleep or not · hiveeyes/terkin-datalogger@61713c7 · GitHub eingeschlichen.

Ich kann Dir später eine Variante zur Verfügung stellen, mit der wir uns vielleicht gemeinsam diesem Problem nähern und es beseitigen können? Vielen Dank schon im Voraus!

Hallo Andreas,
danke für deine Antworten.
Für Problem 1. habe ich mit der “native” Driver Konfiguration ausprobiert und Tatsache, alle Daten des DS18X20 device werden jetzt jedesmal komplett geliefert.
Gruß
Christian

2 Likes

Exzellent!

Für das zweite Problem bei den BME280-Sensoren ist dann ziemlich sicher jenes verantwortlich, das ich – mea culpa! – ungetestet committed habe.

Bus+Sensor werden einmalig zu Beginn angefahren,

   37.6635 [terkin.sensor.core          ] INFO   : Trying to find bus by name "i2c:0"
   37.6853 [terkin.sensor.core          ] INFO   : Found bus by name "i2c:0": <I2CBus object at 3f9a8490>
   37.7325 [terkin.datalogger           ] INFO   : Setting up sensor with with id=bme280-1 and type=bme280 on bus=i2c:0 with address=0x77 described as "Temperatur und Feuchte auflen"

nach dem Meßvorgang – wie kürzlich gewünscht auch unabhängig vom Deep Sleep Modus – wieder heruntergefahren,

   47.2686 [terkin.sensor.core          ] INFO   : Sending power_off to bus i2c:0
   47.3026 [terkin.sensor.core          ] INFO   : Turning off I2C bus i2c:0

und dann aber bei einem erneuten Meßvorgang vermutlich nicht wieder ordentlich aktiviert. Ich werde versuchen, das heute noch zu beheben.

2 Likes

Der entsprechende Fix ist – vorerst leider weiterhin ungetestet – per Power on I2C peripheral after power off · hiveeyes/terkin-datalogger@f35d9a6 · GitHub im Master-Branch gelandet. Vielleicht reicht das ja schon.

Per

git pull
make install

müsstest Du die Änderungen auf das Gerät bekommen.

4 posts were merged into an existing topic: Untersuchung und Verbesserung des Timings bei der Ansteuerung der DS18B20 Sensoren unter MicroPython

Hallo Andreas,

leider sehe ich nach git pull und make install immer noch das gleiche Verhalten:

  160.4814 [terkin.driver.ds18x20_sensor] INFO   : Reading DS18X20 device "28ff641d8fa67062"
  160.5726 [terkin.driver.ds18x20_sensor] INFO   : Reading DS18X20 device "28ff641d8fdae234"
  160.6675 [terkin.driver.ds18x20_sensor] INFO   : Reading DS18X20 device "281fe0799704030b"
  160.9884 [terkin.datalogger           ] INFO   : Reading sensor port "BME280Sensor"
  161.0226 [terkin.datalogger           ] ERROR  : Reading sensor "BME280Sensor" failed
Traceback (most recent call last):
  File "/flash/lib/terkin/datalogger.py", line 461, in read_sensors
  File "/flash/lib/terkin/util.py", line 235, in __exit__
  File "/flash/lib/terkin/datalogger.py", line 461, in read_sensors
  File "/flash/lib/terkin/driver/bme280_sensor.py", line 45, in read
  File "/flash/dist-packages/bme280_float.py", line 154, in read_compensated_data
  File "/flash/dist-packages/bme280_float.py", line 119, in read_raw_data
OSError: I2C bus error

Mit dem Output der Installation sollte es doch eigentlich die geänderte SW übernommen worden sein:

[ckrohne@centos-ck hiveeyes-micropython-firmware]$ git pull
remote: Enumerating objects: 13, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 13 (delta 2), reused 6 (delta 2), pack-reused 0
Unpacking objects: 100% (13/13), done.
Von https://github.com/hiveeyes/hiveeyes-micropython-firmware
   6b3671d..f7959f5  master     -> origin/master
Aktualisiere 6b3671d..f7959f5
Fast-forward
 CHANGES.rst                     |  2 ++
 terkin/driver/ds18x20_sensor.py |  5 ++++-
 terkin/sensor/core.py           | 32 +++++++++++++++++++++++++-------
 tools/setup.mk                  |  4 ++--
 4 files changed, 33 insertions(+), 10 deletions(-)

Gruß
Christian

Gut, dann muss ich mal näher in Richtung Hardware. Sorry für den Fehlversuch und sorry für die Umstände.

Hallo Christian,

es war nur ein Tippfehler! ;] Mit Fix typo within I2C bus reinitialization after power off · hiveeyes/terkin-datalogger@e9b54a3 · GitHub könnte es jetzt besser klappen.

Viele Grüße,
Andreas.

Funktioniert jetzt bei mir mit 2x DS18B20 am Bus und dem native Treiber. Mein erster Sensor war defekt.

2 Likes

Hallo,
bin heute erst wieder zum Weitertesten gekommen.
Super, nach dem Update klappt jetzt alles wunderbar.
Gruß
Christian

3 Likes

A post was split to a new topic: Batteriespannung mit der BOB-Software auslesen

Hallo,

ich habe nun meinen BME280 Sensor an meiner BOB-Platine angeschlossen, in settings.py diesen entsprechend aktiviert und nun versucht Terkin die Sensordaten auszulesen. Doch die Variable self.driver in bme280_sensor.py ist trotz Initialisierung auf None gesetzt (siehe meine hinzugefügte Log-Message). Er versucht in der Initialisierung den Treiber für die Pycom Plattform zu laden, doch genauere Logs habe ich noch nicht einsehen können.

Interessanterweise gibt es das gleiche Verhalten, wenn ich den Lopy4 auf das Expansionboard setze (dieses hat überhaupt keinen Sensor angeschlossen). Doch beim Auslesen des DS18x20 Sensors wird wie erwartet eine Exception geworfen. Bedeutet das, dass gar keine Verbindung zum BME280 Sensor besteht oder kann es an etwas anderem liegen? Das Problem habe ich nämlich bei zwei BOB-Platinen.

354.2655 [terkin.datalogger ] INFO : Reading sensor port “HX711Sensor”
355.0632 [terkin.driver.hx711_sensor ] INFO : Powering down HX711
355.0792 [terkin.lib.hx711 ] INFO : HX711 power down
355.0971 [terkin.datalogger ] INFO : Reading sensor port “DS18x20Sensor”
355.1206 [terkin.driver.ds18x20_sensor] INFO : Acquire readings from all DS18x20 sensors attached to bus “onewire:0” 355.9001 [terkin.driver.ds18x20_sensor] INFO : Start conversion for DS18x20 devices on bus “onewire:0”
355.9342 [terkin.driver.ds18x20_sensor] INFO : Reading DS18x20 device “286ea3fa35190132”
355.9952 [terkin.datalogger ] INFO : Reading sensor port “BME280Sensor”
356.0193 [terkin.driver.bme280_sensor ] INFO : [BME280Sensor] start reading. bus: <I2CBus object at 3f96a9b0>, driver: None
356.1244 [terkin.datalogger ] INFO : Sensor data:

       scale.0.kg                                           13915.6                   Scale 1
       scale.0.offset                                        -73000                   Scale 1
       scale.0.raw                                           -11434                   Scale 1
       scale.0.scale                                          4.424                   Scale 1
       system.memfree                                       2326800
       system.runtime                                           354
       system.temperature                                   39.3913
       system.time                                              540
       system.uptime                                        728.241
       system.voltage.battery                                 3.966                   Battery
       system.wifi.bandwidth                                      2
       system.wifi.channel                                        1
       system.wifi.country                                       DE
       system.wifi.max_tx_power                                  78
       system.wifi.rssi                                         -64
       temperature.286ea3fa35190132.onewire:0                  22.8125        temperature inside
       weight.0                                             13915.6                   Scale 1

356.2912 [terkin.device ] INFO : Start curating the garbage collector
356.4449 [terkin.device ] INFO : Collecting garbage
356.6371 [terkin.device ] INFO : Curating the garbage collector finished. Free memory: 2348912

@Werner was hast du denn genau in der settings.py eingestellt? Relevant sind zwei Stellen:

  • bei sensors:
        {
            'id': 'bme280-1',
            'description': 'Temperatur, Druck und Feuchte au�en (BME280)',
            'type': 'BME280',
            'enabled': True,
            'bus': 'i2c:0',
            'address': 0x77,
        },
    ],
  • und bei busses
        {
            "id": "bus-i2c-0",
            "family": "i2c",
            "number": 0,
            "enabled": True,
            "pin_sda": "P9",
            "pin_scl": "P10",
        },

Bei beiden Einträgen muss True stehen.

Weiter muss bei address die I2C-Hardware-Adresse angegeben werden. Je nach verwendetem Sensor / Platine kann die auch andere Werte haben, d.h. 0x77 muss bei dir nicht korrekt sein, wenn du ein anderes breakout hast, hier hilft nur in die Doku zum Sensor zu schauen oder einen Software-I2C-Scanner laufen zu lassen, der dir alle Adressen der angeschlossenen devices ausgibt.

Dann müssen die Angaben bei bus im ersten Block, hier i2c:0 mit den Angaben unten bei "family": "i2c", und "number": 0, übereinstimmen.

driver: None hört sich erst mal nach einem fehlenden Treiber an, ich weiß allerdings gerade nicht, ob der den Treiber auf dem LoPy nicht findet, oder den Treiber durch Konfigurationsprobleme nicht initialisieren kann. Checke doch nochmal deine settings.py, falls die passt müssten wir an anderer Stelle nochmal schauen.

Wiring ist auch immer mal wieder eine Fehlerquelle, SDA und SCL vertauscht? Auch das bitte nochmal überprüfen.

1 Like

Die Adresse des Sensors war das Problem, musste es auch auf 0x77 setzen. Vielen Dank!

2 Likes