HTU21D taramaya yanıt veriyor ama her nem okumasi boş dönüyor
Yapay zekâ tarafından English dilinden çevrildi ·
Küçük bir sorun ama beni delirtiyor. Bir kuyu başı kulübesindeki MKR WiFi 1010, 0x40 adresinde bir HTU21D nem kartını okuyor ve her dakika Hermetry’ye gönderiyor. Sıcaklık çalışıyor. Nem ise belki on okumadan biri çalışıyor.I2C tarayıcı her seferinde 0x40’ı buluyor. Mantık analizörü: 0xF5 (nem, bekleme yok) yazmam ACK alıyor, ardından 0x81 okuma adresi NACK alıyor ve Wire.requestFrom(0x40, 3) 0 döndürüyor. Panelde nem grafiğinde her yerde boşluklar var.
Wire.beginTransmission(0x40);
Wire.write(0xF5);
Wire.endTransmission();
delay(15);
uint8_t n = Wire.requestFrom(0x40, 3); // n == 0 most of the time
Small one but it’s driving me nuts. MKR WiFi 1010 in a wellhead shelter reading an HTU21D humidity breakout at 0x40, posting to Hermetry every minute. Temperature works. Humidity works maybe one read in ten.
I2C scanner finds 0x40 every time. Logic analyser: my write of 0xF5 (humidity, no hold) gets an ACK, then the read address 0x81 gets a NACK and Wire.requestFrom(0x40, 3) returns 0. On the dashboard humidity has holes all over it.
Wire.beginTransmission(0x40);
Wire.write(0xF5);
Wire.endTransmission();
delay(15);
uint8_t n = Wire.requestFrom(0x40, 3); // n == 0 most of the time
Yapay zekâ tarafından English dilinden çevrildi ·
pull-up dirençleri? 4.7k ekleyene kadar okumalarım dengesizdi
pull-ups? I had flaky reads until I added 4.7k
Yapay zekâ tarafından English dilinden çevrildi ·
Breakout kartında zaten 4.7k var ve tarayıcı hiç kaçırmıyor, o yüzden kablolamadan şüpheliyorum.
4.7k on the breakout already, and the scanner never misses, so I doubt wiring.
Yapay zekâ tarafından English dilinden çevrildi ·
Bir BME280 ile aynı sorunu yaşamıştım, sorun adresteydi: 0x76 ile 0x77.
Had the same with a BME280 and it was the address, 0x76 vs 0x77.
Yapay zekâ tarafından English dilinden çevrildi ·
Breakout kartı 3.3V mu? Bariz geliyorsa özür dilerim, geçen ay bir tanesini 5V’ta yaktım.
Is the breakout 3.3V? Sorry if obvious, I fried one on 5V last month.
Yapay zekâ tarafından English dilinden çevrildi ·
Kablolama sorun degil, okuman cok erken. No-hold modunda HTU21D, olcum bitene kadar okuma adresine NACK veriyor; analizorun gosterdigi de tam olarak bu. 12 bitlik bir nem okumasi yaklasik 16 ms’ye kadar surebilir; varsayilan cozunurluk ve biraz pay ile 15 ms’den fazla beklemek istersin. Sicaklik 50 ms ile daha yavas olan, ve buyuk ihtimalle gecikmeyi sadece nem olan bir ornekten kopyaladin ve sans eseri ters yonde kurtuldun.Tahmin yurutmek yerine yoklama yapiyorum:
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 */ }
Bir okuma yine basarisiz olursa, o dakikanin mesajindan anahtari cikar ya da null gonder. 0 gonderme; Hermetry bunu gercek bir %0 olarak kaydeder ve alarm kuralin bundan memnun olur. null sadece okuma olmadigi anlamina gelir.
Wiring is fine, your read is too early. In no-hold mode the HTU21D NACKs its read address until the measurement is done, which is exactly what the analyser shows. A 12-bit humidity reading takes up to about 16 ms, and with the default resolution and some margin you want more than 15. Temperature is the slow one at 50 ms, and you probably copied the delay from a humidity-only example and got lucky the other way round.
I poll instead of guessing:
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 */ }
And when a read still fails, leave the key out of that minute’s message or send null. Don’t send 0, Hermetry stores it as a real 0 % and your alarm rule will love that. null just means no reading.
Yapay zekâ tarafından English dilinden çevrildi ·
Sorgulama döngüsü devrede, n ikinci ya da üçüncü denemede 3’e ulaşıyor, yani yaklaşık 20-30 ms. İki gündür tek bir boşluk yok. Ayrıca hatalarda 0 gönderiyordum, grafikteki garip düşüşlerin nedeni bu. Teşekkürler Daniel.
Polling loop in, n hits 3 on the second or third try, so about 20-30 ms. Two days without a hole. I was also sending 0 on failures, which explains the weird dips on the chart. Thanks Daniel.
- Bu konuyu yanıtlamak için giriş yapmış olmalısınız.
Sohbete katılın
Soru sormak ve yanıtlamak, yararlı gönderileri beğenmek ve sorununuzu çözen yanıtı işaretlemek için oturum açın. Her katkı puan ve seviye kazandırır.

