HTU21D(F)
- Senzor teploty a vlhkosti
- Komunikace přes I2C
- Napájení 1.5 - 3.6V
- Nastavitelné rozlišení
- Vestavěné vyhřívání pro diagnostiku
- Snímání napájecího napětí
- Nastavitelné rozlišení
SparkFun_HTU21D_Breakout_Arduino_Library
Data sheet
HTU21D | ARDUINO | ESP32 | |
---|---|---|---|
I2C | SDA | A4 | GPIO21 |
SCL | A5 | GPIO22 |
Výrobce doporučuje senzor po každém spuštění restartovat. Aktuální verze knihovny tuto funkci nenabízí, nicméně definuje příkaz SOFT_RESET. Následující kus kódu lze pro tento účel používat.
Wire.beginTransmission(HTU21D_ADDRESS); Wire.write(SOFT_RESET); Wire.endTransmission();
Knihovna obsahuje:
begin(&wirePort);
- wirePort
- I2C sběrnice
readTemperature();
- vrátí naměřenou teplotu [°C] jako float
readHumidity();
- vrátí naměřenou vlhkost [%] jako float
setResolution(resBits);
- Slouží k nastavení rozlišení pro teplotu a vlhkost
writeUserRegister(val);
- Slouží pro nastavení senzoru, val
- 8 bitů nastavení
readUserRegister();
- Slouží pro přečtení nastavení senzoru
První a poslední bit určuje nastavení rozlišení. Bit 6 indikuje napájecí napětí menší něž 2.25V (End of Battery). Bitem číslo 2 se zapíná nebo vypíná vestavěné vyhřívání. Pokud se senzor zahřeje, měl by měřit vyšší teplotu a nižší vlhkost. Díky tomu lze automaticky ověřit funkčnost senzoru. Více informací je v datasheetu na straně 13.
- HTU21D.ino
#include <Wire.h> #include "SparkFunHTU21D.h" // Kód je psaný pro verzi knihovny 1.1.3 HTU21D htu; void setup() { Serial.begin(9600); Serial.println("\nHTU21D test"); htu.begin(); // Spuštění komunikace se senzorem htuReset(); // Knihovna tuto funkci neobsahuje printInfo(); /* Zápis do registru: vypnutí OTP, změna rozlišení na 8bitů pro vlhkost a 12bitů pro teplotu */ htu.writeUserRegister(USER_REGISTER_DISABLE_OTP_RELOAD | USER_REGISTER_RESOLUTION_RH8_TEMP12); } void loop() { printInfo(); delay(1000); } void htuReset() { Wire.beginTransmission(HTU21D_ADDRESS); Wire.write(SOFT_RESET); Wire.endTransmission(); } void printInfo() { float temp = htu.readTemperature(); // Měření teploty float humd = htu.readHumidity(); // Měření vlhkosti uint8_t userReg = htu.readUserRegister(); // Načtení registru Serial.println("\n\nteplota\t\tvlhkost\t\tbattery\t\theater\t\tOTP reload\trozliseni\tregistr"); Serial.print(temp); Serial.print("°C\t\t"); Serial.print(humd); Serial.print("%\t\t"); Serial.print(userReg & USER_REGISTER_END_OF_BATTERY ? "low" : "ok"); Serial.print("\t\t"); Serial.print(userReg & USER_REGISTER_HEATER_ENABLED ? "on" : "off"); Serial.print("\t\t"); Serial.print(userReg & USER_REGISTER_DISABLE_OTP_RELOAD ? "disable" : "enable"); Serial.print("\t\t"); switch (userReg & USER_REGISTER_RESOLUTION_MASK) { // rozlišení [teplota + vlhkost] case USER_REGISTER_RESOLUTION_RH12_TEMP14: Serial.print("14 + 12\t\t"); break; case USER_REGISTER_RESOLUTION_RH8_TEMP12: Serial.print("12 + 8\t\t"); break; case USER_REGISTER_RESOLUTION_RH10_TEMP13: Serial.print("13 + 10\t\t"); break; case USER_REGISTER_RESOLUTION_RH11_TEMP11: Serial.print("11 + 11\t\t"); break; } for(int i = 7; i >= 0; i--) Serial.print(bitRead(userReg, i)); // Výpis registru }