Forum: Mikrocontroller und Digitale Elektronik Si7021 Fehler in der library


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Marcus Lütolf (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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:

Bewertung
0 lesenswert
nicht lesenswert
und jetzt noch die beagte library im Anhang...

von John Doe (Gast)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
1 lesenswert
nicht 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.

: Bearbeitet durch User
von ibins (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
1 lesenswert
nicht 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!

: Bearbeitet durch User
von John Doe (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Mach doch mal einen Screenshot der Shell-Ausgabe.

von Planloser (Gast)


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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.