Pomiar temperatury i wilgotności to najczęstszy pierwszy projekt z ESP32, Arduino albo Raspberry Pi, a od wyboru czujnika zależy, czy odczyty do czegokolwiek się przydadzą. W sklepach dla majsterkowiczów dominują cztery rodziny: DHT22 (sprzedawany też jako AM2302), BME280 firmy Bosch, AHT20 firmy Aosong i SHT4x firmy Sensirion. Różnią się dokładnością, interfejsem i wrażliwością na własne ciepło. Poniżej porównanie na podstawie not katalogowych producentów oraz praktyczne wskazówki dotyczące umieszczenia czujnika, które ma równie duże znaczenie jak sam układ.

Krótka odpowiedź

  • Do dokładnego pomiaru wilgotności w pomieszczeniu lub na zewnątrz: SHT4x (SHT40, SHT41 lub SHT45).
  • Do taniego i przyzwoitego czujnika I²C: AHT20.
  • Jeśli potrzebujesz też ciśnienia: BME280, zamontowany z dala od źródeł ciepła.
  • W nowych projektach omijaj DHT22, chyba że jeden już leży w szufladzie.
  • Do samej temperatury, w wodzie albo na rurach: wodoszczelna sonda DS18B20, którą opisaliśmy w osobnym poradniku.

Porównanie według not katalogowych

DHT22 / AM2302 BME280 AHT20 SHT40 SHT45
Interfejs jednoprzewodowy, własny protokół I²C lub SPI I²C (adres 0x38) I²C (domyślnie 0x44) I²C
Dokładność temperatury ±0,5 °C ±0,5 °C w zakresie 0-65 °C ±0,3 °C typ. ±0,2 °C typ. ±0,1 °C
Dokładność wilgotności ±2 %RH (maks. ±5 %RH) ±3 %RH ±2 %RH przy 25 °C typ. ±1,8 %RH typ. ±1,0 %RH
Dodatkowo - ciśnienie - wbudowana grzałka wbudowana grzałka
Minimalny odstęp pomiarów 2 s - zalecane 2 s - -

Wartości pochodzą z not katalogowych poszczególnych układów. Producenci różnie definiują dokładność „typową” i „maksymalną”, więc do drobnych różnic podchodź ostrożnie. Duże różnice są jednak prawdziwe.

DHT22 / AM2302

DHT22 przez lata był domyślnym czujnikiem w projektach amatorskich. Według noty katalogowej AM2302 ma dokładność ±0,5 °C i ±2 %RH (maksymalnie ±5 %RH), rozdzielczość 0,1 i okres pomiaru 2 sekundy. Pracuje przy napięciu 3,3-5,5 V.

Słabe strony:

  • Jednoprzewodowy protokół oparty na czasie impulsów. Mikrokontroler musi dokładnie mierzyć długość impulsów, więc na obciążonych lub szybkich płytkach zdarzają się nieudane odczyty. W dokumentacji ESPHome jest na przykład opcja ręcznego ustawienia modelu DHT przy błędnych odczytach, a jako częstą przyczynę kłopotów wymieniono złą wartość rezystora podciągającego.
  • Nierówna jakość. Wiele modułów sprzedawanych jako DHT22 to klony niewiadomego pochodzenia.
  • Wolny i duży w porównaniu z nowoczesnymi układami I²C.

Jeśli masz taki czujnik, będzie działał. Jeśli kupujesz nowy, AHT20 kosztuje mniej więcej tyle samo i łatwiej go obsłużyć.

BME280

BME280 firmy Bosch mierzy temperaturę, wilgotność i ciśnienie. Według noty katalogowej dokładność pomiaru wilgotności wynosi ±3 %RH, ciśnienia ±1,0 hPa, a temperatury ±0,5 °C w zakresie od 0 do 65 °C.

Jest jednak ważny przypis. Według Boscha wartość temperatury zależy od temperatury płytki drukowanej, samonagrzewania elementu pomiarowego i temperatury otoczenia, i zwykle jest wyższa od temperatury otoczenia. Czujnik temperatury służy tu głównie do korekty pomiaru ciśnienia i wilgotności. Gdy BME280 jest zamontowany na małej płytce przylutowanej obok ESP32, odczyt temperatury jest często zawyżony, a ponieważ wilgotność względna zależy od temperatury, pogarsza się też pomiar wilgotności.

BME280 wybierz wtedy, gdy potrzebujesz ciśnienia (trendy pogodowe, wysokość), i:

  • rób pomiary w długich odstępach w trybie wymuszonym (pojedynczy pomiar, ang. forced mode) zamiast pomiaru ciągłego,
  • zamontuj czujnik na krótkim przewodzie z dala od mikrokontrolera i stabilizatora napięcia.

Sprawdź też zakupiony moduł. Wiele tanich płytek opisanych jako „BME280” ma na pokładzie BMP280, który mierzy tylko ciśnienie i temperaturę, bez wilgotności. Oryginalny BME280 zwraca w rejestrze identyfikatora wartość 0x60, więc odczyt identyfikatora rozwieje wątpliwości.

AHT20

AHT20 firmy Aosong to mały, skalibrowany czujnik I²C ze stałym adresem 0x38. W nocie katalogowej modułu Grove AHT20 firmy Seeed podano ±0,3 °C i ±2 %RH przy 25 °C.

W nocie katalogowej samego AHT20 jest przydatna rada dotycząca samonagrzewania: przy zbyt częstych pomiarach czujnik się nagrzewa i traci dokładność. Aby wzrost temperatury nie przekroczył 0,1 °C, czas aktywności nie powinien przekraczać 10% czasu pomiaru, a Aosong zaleca pomiar nie częściej niż co 2 sekundy. W czujniku do automatyki domowej, który wysyła dane co 30-60 sekund, nie ma to znaczenia.

W ESPHome AHT20 obsługuje się komponentem aht10 z ustawieniem variant: AHT20. W dokumentacji ESPHome jest też informacja, że DHT20 to AHT20 w obudowie w stylu DHT, podłączany przez I²C.

SHT4x (SHT40, SHT41, SHT45)

Rodzina SHT4x firmy Sensirion jest najdokładniejsza w tym zestawieniu, a przy tym niedroga. Według aktualnej noty katalogowej:

  • SHT40 i SHT41: typowo ±1,8 %RH i ±0,2 °C,
  • SHT45: typowo ±1,0 %RH i ±0,1 °C,
  • długoterminowy dryf poniżej 0,2 %RH i poniżej 0,03 °C na rok (wartości typowe),
  • napięcie zasilania 1,08-3,6 V i bardzo mały pobór prądu (średnio 0,4 µA),
  • pełna sprawność także przy kondensacji pary wodnej.

SHT4x ma też wbudowaną grzałkę. Według Sensiriona służy ona do usuwania skroplonej wody z powierzchni czujnika i do utrzymania dokładnych odczytów przy długotrwałej, bardzo wysokiej wilgotności. Grzałka nie jest przeznaczona do ciągłej pracy: według noty katalogowej cykl pracy grzałki nie może przekraczać 10%, a podczas grzania parametry czujnika nie są gwarantowane. Komponent sht4x w ESPHome może ją włączać z ograniczonym wypełnieniem (maksymalnie 5%), a domyślnie jest wyłączona. W łazience, piwnicy albo na zewnątrz to realna zaleta.

Zwróć uwagę na zakres zasilania: SHT4x to układ na 3,3 V. Większość płytek z czujnikiem ma stabilizator, ale sprawdź to przed podłączeniem do 5 V.

Umieszczenie czujnika jest równie ważne jak układ

Czujnik o dokładności ±0,1 °C w złym miejscu da gorszy wynik niż czujnik ±0,5 °C w dobrym. Kilka zasad:

  • Trzymaj czujnik z dala od ciepła. ESP32 z włączonym Wi-Fi, liniowy stabilizator napięcia albo ładowarka USB nagrzewają wszystko w pobliżu. Umieść czujnik na końcu przewodu albo przynajmniej po drugiej stronie płytki, z wycięciem w płytce lub obudowie pomiędzy nimi.
  • Zapewnij dopływ powietrza. W szczelnej obudowie mierzysz temperaturę obudowy, a nie pomieszczenia. Otwory wentylacyjne zrób przy czujniku, a nie przy elektronice.
  • Unikaj bezpośredniego słońca, kaloryferów i ścian zewnętrznych, jeśli interesuje cię temperatura pomieszczenia.
  • Na zewnątrz stosuj osłonę radiacyjną (stos talerzyków, który przepuszcza powietrze, ale zasłania słońce). Bez niej dzienne odczyty w słońcu są bezwartościowe.
  • Unikaj oparów chemicznych. Według noty katalogowej AM2302 opary chemiczne mogą wpływać na element pomiarowy. To samo dotyczy innych polimerowych czujników wilgotności.
  • Porównaj, zanim zaufasz. Połóż dwa czujniki obok siebie na kilka godzin. Jeśli różnią się bardziej, niż wynika z ich dokładności, najpierw sprawdź umiejscowienie, a dopiero potem dodaj programową korektę odczytu.