Arduino – Temperatur HTU21 GY-21

Temperatur und Luftfeuchesensor-Modul GY-21

I2C Adresse 0x40

Weiterführende Internetseiten

Technische Daten

Betriebsspannung3.3 bis 5VDC
Stromverbrauch150yA
Temperaturbereich-40°C bis 85°C
Temperaturgenauigkeit+/- 1°C
Feuchtigkeitsbereich0 bis 100% RH
Feuchtigkeitsgenauigkeit+/- 3%
KomunikationsschnittstelleI2C
Abmessungen9 x 11 x 2 mm

Verbindung des Moduls mit dem Arduino

Das Modul GY-21 Feuchte- und Temperatursensormodul wird wie folgt mit dem Arduino verbunden:

Uno PINModulFarbe
5 VVIN – Power supplyRot
GNDGND – GroundSchwarz
A4SDA – Serial DataGrün
A5SCL – Serial ClockBlau

Arduino Beispiel-Sketch

//-----------------------------------------------------|
// I2C GY-21 HTU21D                                    |
// Temperatur und Feuchtesensor                        |
// Ohne zusätzliche / spezielle Bibliothek             |
//                                                     |
// I2C Grundadresse = 0X40                             |
//                                                     |
// HTU21D Kommandos                                    |
//    TRIGGER_TEMP_MEAS_H = 0xE3                       |
//    TRIGGER_HUM_MEAS_H = 0xE5                        |
//    TRIGGER_TEMP_MEAS_NH = 0xF3                      |
//    TRIGGER_HUM_MEAS_NH = 0xF5                       |
//    WRITE_USER_REG = 0xE6                            |
//    READ_USER_REG = 0xE7                             |
//    SOFT_RESET = 0xFE                                |
//                                                     |
//-----------------------------------------------------|

// Includes
//-----------------------------------------------------
#include <Wire.h>                 // Bibliothek für I2C

// Variablen
//-----------------------------------------------------
const int ADDRESS = 0x40;
double temperature;
double humidity;

//*****************************************************
// Sensor initialisieren
//*****************************************************
void sensor_init(const int addr) {
   Wire.begin(); 
   delay(100);
   Wire.beginTransmission(addr);
   Wire.endTransmission();
}

//****************************************
// Temperatur vom Sensor lesen
//****************************************
double read_temperature(const int addr) {
   double temperature;
   int low_byte;
   int high_byte;
   int raw_data;
   // Temperaturmessung starten
   Wire.beginTransmission(addr);
   Wire.write(0xE3);
   Wire.endTransmission();
   // Daten lesen - Temperatur
   Wire.requestFrom(addr, 2);
   if (Wire .available() <= 2) {
     high_byte = Wire.read();
     low_byte = Wire.read();
     high_byte = high_byte << 8;
     raw_data = high_byte + low_byte;
   }
   temperature = (175.72 * raw_data) / 65536;
   temperature = temperature - 46.85;
   return temperature;
}

//****************************************
// Luftfeuchtigkeit vom Sensor lesen
//****************************************
double read_humidity(const int addr) {
   double humidity;
   double raw_data_1;
   double raw_data_2;
   int low_byte;
   int high_byte;
   int container; 
   //Luftfeuchtigkeit Messung starten
   Wire.beginTransmission(addr);
   Wire.write(0xE5);
   Wire.endTransmission();
   // Daten lesen - Luftfeuchtigkeit
   Wire.requestFrom(addr, 2);
   if(Wire.available() <= 2) {
      high_byte = Wire.read();
      container = high_byte / 100;
      high_byte = high_byte % 100;
      low_byte = Wire.read();
      raw_data_1 = container * 25600;
      raw_data_2 = high_byte * 256 + low_byte;
   }
   raw_data_1 = (125 * raw_data_1) / 65536;
   raw_data_2 = (125 * raw_data_2) / 65536;
   humidity = raw_data_1 + raw_data_2;
   humidity = humidity - 6;
   return humidity;
}

//****************************************
void setup() {
   Serial.begin(9600);
   sensor_init(ADDRESS);
}

//****************************************
void loop() {
   temperature = read_temperature(ADDRESS);
   humidity = read_humidity(ADDRESS);
 
   Serial.print("Temperature: ");
   Serial.print(temperature);
   Serial.println("*C");
   Serial.print("Humidity: ");
   Serial.print(humidity);
   Serial.println("%");
   delay(1000);
}

Sending a command

KommandoCodeKommentar
Start Messung Temperatur0xE3Hold master
Start Messung Luftfeuchtigkeit0xE5Hold master
Start Messung Temperatur0xF3No hold master
Start Messung Luftfeuchtigkeit0xF5No hold master
Schreibe in das Benutzerregister0xE6
Lese das Benutzerregister0xF7
Soft reset0xFE

User Register

BitBeschreibungDefault
7,0Auflösung Messung00
6Status: End of Battery0
3,4,5Reserve0
2Enable one-chip heater0
1Disable OTP reload1

Auflösung Messung Bit 7 und 0

Bit 7Bit 0FeuchteTemperatur
0012 Bit14 Bit
018 Bit12 Bit
1010 Bit13 Bit
1111 Bit11 Bit