Neu: Die KI-Firewall überwacht die gesamte Plattform und erklärt jeden Vorfall in einfachen Worten. So funktioniert es

HTU21D antwortet beim Scan, aber jede Feuchtemessung kommt leer zurück

HTU21D antwortet beim Scan, aber jede Feuchtemessung kommt leer zurück

Gelöst 6 5

Von English mit KI übersetzt ·

Eine kleine Sache, aber sie macht mich wahnsinnig. Ein MKR WiFi 1010 in einem Brunnenkopf-Unterstand liest einen HTU21D-Feuchtebreakout bei 0x40 aus und sendet jede Minute an Hermetry. Die Temperatur funktioniert. Die Feuchte funktioniert vielleicht bei einer von zehn Messungen.Der I2C-Scanner findet 0x40 jedes Mal. Logikanalysator: Mein Schreibzugriff mit 0xF5 (Feuchte, kein Hold) bekommt ein ACK, dann wird die Leseadresse 0x81 mit einem NACK quittiert, und Wire.requestFrom(0x40, 3) gibt 0 zurück. Im Dashboard hat die Feuchte überall Lücken.

Wire.beginTransmission(0x40);
Wire.write(0xF5);
Wire.endTransmission();
delay(15);
uint8_t n = Wire.requestFrom(0x40, 3);   // n == 0 most of the time
Ask me about 4–20 mA.
♥ 0

Von English mit KI übersetzt ·

Pull-up-Widerstände? Bis ich 4.7k hinzugefügt habe, waren die Messwerte unzuverlässig

Still waiting for the gateway to reconnect.
♥ 1

Von English mit KI übersetzt ·

Auf dem Breakout sind bereits 4,7k vorhanden, und der Scanner verpasst nie etwas, daher bezweifle ich die Verdrahtung.

Ask me about 4–20 mA.
♥ 1

Von English mit KI übersetzt ·

Ich hatte dasselbe mit einem BME280, und es lag an der Adresse, 0x76 statt 0x77.

Ask me about 4–20 mA.
♥ 0

Von English mit KI übersetzt ·

Ist das Breakout-Board mit 3,3 V betrieben? Entschuldige, falls das offensichtlich ist, ich habe letzten Monat eines mit 5 V gegrillt.

Timestamps in UTC or it didn't happen.
♥ 2

Von English mit KI übersetzt ·

Die Verkabelung ist in Ordnung, dein Lesevorgang kommt nur zu früh. Im No-Hold-Modus quittiert der HTU21D seine Leseadresse mit NACK, bis die Messung abgeschlossen ist, und genau das zeigt der Analysator. Eine 12-Bit-Feuchtemessung braucht bis zu etwa 16 ms; bei der Standardauflösung und mit etwas Reserve solltest du mehr als 15 ms warten. Die Temperatur ist mit 50 ms die langsamere Messung. Du hast die Verzögerung wahrscheinlich aus einem Beispiel nur für Feuchte übernommen und hattest eher Glück, dass es andersherum passt.Ich frage ab, statt zu raten:

Wire.beginTransmission(0x40);
Wire.write(0xF5);
Wire.endTransmission();
uint8_t n = 0;
for (int i = 0; i < 10 && n < 3; i++) {
  delay(10);
  n = Wire.requestFrom(0x40, 3);
}
if (n < 3) { /* skip humidity this round */ }

Und wenn ein Lesevorgang trotzdem fehlschlägt, lass den Schlüssel in der Nachricht dieser Minute weg oder sende null. Sende keine 0, denn Hermetry speichert sie als echte 0 % und deine Alarmregel wird sich darüber freuen. null bedeutet nur, dass kein Messwert vorliegt.

Ground loops are my cardio.
Akzeptierte Lösung♥ 8

Von English mit KI übersetzt ·

Polling-Schleife eingesetzt, n erreicht beim zweiten oder dritten Versuch 3, also etwa 20-30 ms. Seit zwei Tagen keine Lücke mehr. Außerdem habe ich bei Fehlern 0 gesendet, was die seltsamen Einbrüche im Diagramm erklärt. Danke Daniel.

Ask me about 4–20 mA.
♥ 2
Ansicht von 7 Beiträgen – 1 bis 7 (von insgesamt 7)
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.

Mitdiskutieren

Melde dich an, um Fragen zu stellen und zu beantworten, hilfreiche Beiträge mit „Gefällt mir“ zu markieren und die Antwort zu kennzeichnen, die dein Problem gelöst hat. Jeder Beitrag bringt Punkte und Stufen.

Teilen