Forum: Mikrocontroller und Digitale Elektronik Si7021 Fehler in der library


von Marcus Lütolf (Gast)


Lesenswert?

Hallo Experten,
ich scheitere daran, die Temperatur von einem Si7021 mittels eines 
ESP32-S
auszulesen - ein eigentlich simple Aufgabe - wogegen die anderen 3 
Werte,
Serial, Identifier und Relative Humidity ohne Fehler wiedergegeben 
werden, wobei Relative Humidity ziemlich vom rellen Feuchtigeitswert bei 
mir abweicht und der Identifier keinen Wert zurückgibt.

Si7021 Library und Script habe ich heruntergeladen von:
http://www.learnmicropython.com/esp32/si7021-i2c-humidity-and-temperature-sensor-example-in-micropython.php

Die library - habe sie mit Versionen von anderen Websites verglichen und
die <class Si7021> Attribute mit dem datasheet überprüft - scheint zwar
korrekt und ist im Anhang.

Das Script, ergänzt durch software pull_up Widerstande wie folgt, stürzt
an Linie 7 mit Referenz zur library ab:

1 import machine

2 i2c = 
machine.I2C(sda=machine.Pin(21,machine.Pin.PULL_UP),scl=machine.Pin(22, 
machine.Pin.PULL_UP))

3 temp_sensor = si7021.Si7021(i2c)

4 print('Serial:{value}'.format(value=temp_sensor.serial))

5 print('Identifier:{value}'.format(value=temp_sensor.identifier))

6 print('Relative 
Humidity:{value}'.format(value=temp_sensor.relative_humidity))

7 print('Temperature:{value}'.format(value=temp_sen

Die Fehlermeldung (OSError: [Errno 19] ENODEV zeigt auf die Funktionen
 <def temperature(self):> und
<def _get_data(self, command):>

Eigenartigerweise stimmen die in der Fehlermeldung angegebenen Zeilen 
Nummern nicht mit denen in der library überein und in
<def temperature(self):> wird celsius und nicht temperature ausgegeben.
Sieht jemand den Fehler ????

von Helmut -. (dc3yc)


Lesenswert?

Marcus Lütolf schrieb:
> 7 print('Temperature:{value}'.format(value=temp_sen

Vielleicht fehlt da die zweite Hälfte der Zeile? Z. B. so:
sor.relative_temperature))

Kenne mich aber mit Micropython nicht aus. Habe schon Basic als 
Interpretersprache gehasst.

von Marcus Lütolf (Gast)


Angehängte Dateien:

Lesenswert?

und jetzt noch die beagte library im Anhang...

von John Doe (Gast)


Lesenswert?

Marcus Lütolf schrieb:
> 2 i2c =
> machine.I2C(sda=machine.Pin(21,machine.Pin.PULL_UP),scl=machine.Pin(22,
> machine.Pin.PULL_UP))


Versuch es bitte mal mit
1
machine.SoftI2C

und langem Timeout für das Clock-Stretching.

von Stefan F. (Gast)


Lesenswert?

Ich bin der Meinung, dass die internen Pull-Ups zu schwach sind. Da
würde ich 2,2kΩ verwenden.

Mit einem Oszilloskop könnte man das blitzschnell kontrollieren. Zur Not 
mit einem DSO-150 für nur 25 Euro.

von ibins (Gast)


Angehängte Dateien:

Lesenswert?

1.)Pullups sind mit101% Wahrscheinlichkeit bereits auf dem
Breakout verbaut.
2.) Hab jetzt schnell mal obige Codes auf mein Board gespielt und alles 
läuft.

von Stefan F. (Gast)


Lesenswert?

> Pullups sind mit101% Wahrscheinlichkeit bereits auf dem Breakout verbaut.

Typischerweise 10 kΩ. Ich hatte einige Schaltungen mit ESP8266, die erst 
mit weniger Ohm (bei 400 kBit/s) zuverlässig liefen.

von John Doe (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
>> Pullups sind mit101% Wahrscheinlichkeit bereits auf dem Breakout verbaut.
>
> Typischerweise 10 kΩ. Ich hatte einige Schaltungen mit ESP8266, die erst
> mit weniger Ohm (bei 400 kBit/s) zuverlässig liefen.

Wie kommst Du auf die 10kΩ? Die Spec sagt was anderes.

von Stefan F. (Gast)


Lesenswert?

John Doe schrieb:
> Wie kommst Du auf die 10kΩ? Die Spec sagt was anderes.

Habe einem Schaltplan entnommen, der zu diesem Board veröffentlicht 
wurde. Messe mal nach!

von John Doe (Gast)


Lesenswert?

Hier mal rein technisch, ist aber für die Hobbypraxis wohl zu 
kompliziert:
https://www.ti.com/lit/an/slva689/slva689.pdf

von Marcus L. (luemar)


Lesenswert?

vielen Dank..
machine.SoftI2 produziert einen AttributeError.
Laut den einschlägigen websites zu I2C und erforderlichen pull_up
Widerständen braucht es 1kOhm (3.3V - 0.4)/3 mA.
Man kann ja die internen Widerstände so einstellen, wie ich es eingangs
in meinem Script definiert habe.
Funktioniert aber alles nicht.

von ibins (Gast)


Lesenswert?

Mach doch mal einen Screenshot der Shell-Ausgabe.

von Planloser (Gast)


Lesenswert?

1
from machine import Pin, SoftI2C
2
3
i2c = SoftI2C(scl=Pin(21), sda=Pin(22), freq=100000, timeout=)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.