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 ????
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.
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.
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.
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.
> 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.
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.
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!
Hier mal rein technisch, ist aber für die Hobbypraxis wohl zu kompliziert: https://www.ti.com/lit/an/slva689/slva689.pdf
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.