Einleitung
@ckrohne beobachtete nach der Inbetriebnahme des Datenloggers bei Willkommen, Christian! sporadisch fehlende Meßwerte bei den DS18B20- und BME280-Sensoren.
@ckrohne beobachtete nach der Inbetriebnahme des Datenloggers bei Willkommen, Christian! sporadisch fehlende Meßwerte bei den DS18B20- und BME280-Sensoren.
Allerdings werden nicht immer alle Daten geliefert - da stellt sich mir die Frage, warum.
Es sind auch einige Fehler im Log-Protokoll zu sehen.
Ich sehe hier zwei verschiedene Probleme.
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.
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
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.
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.
Hallo,
bin heute erst wieder zum Weitertesten gekommen.
Super, nach dem Update klappt jetzt alles wunderbar.
Gruß
Christian
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:
{
'id': 'bme280-1',
'description': 'Temperatur, Druck und Feuchte au�en (BME280)',
'type': 'BME280',
'enabled': True,
'bus': 'i2c:0',
'address': 0x77,
},
],
{
"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.
Die Adresse des Sensors war das Problem, musste es auch auf 0x77 setzen. Vielen Dank!