Датчик Si7021 работает по протоколу I2C. Идеально подходит для измерения влажности и температуры.
Si7021 имеет следующие характеристики:
Precision Relative Humidity Sensor ± 3% RH (max), 0–80% RH
High Accuracy Temperature Sensor ±0.4 °C (max), –10 to 85 °C
0 to 100% RH operating range
Up to –40 to +125 °C operating range
Wide operating voltage – (1.9 to 3.6 V)
Low Power Consumption – 150 μA active current
Подключение:Для Arduino: SDA -> A4, SCL -> A5
Для Wemos D1 mini и NodeMCU: SDA -> D2, SCL -> D1
Код:
#include <Wire.h>
// SI7021 I2C address is 0x40(64)
#define si7021Addr 0x40
void setup()
{
Wire.begin();
Serial.begin(9600);
Wire.beginTransmission(si7021Addr);
Wire.endTransmission();
delay(300);
}
void loop()
{
unsigned int data[2];
Wire.beginTransmission(si7021Addr);
//Send humidity measurement command
Wire.write(0xF5);
Wire.endTransmission();
delay(500);
// Request 2 bytes of data
Wire.requestFrom(si7021Addr, 2);
// Read 2 bytes of data to get humidity
if(Wire.available() == 2)
{
data[0] = Wire.read();
data[1] = Wire.read();
}
// Convert the data
float humidity = ((data[0] * 256.0) + data[1]);
humidity = ((125 * humidity) / 65536.0) - 6;
Wire.beginTransmission(si7021Addr);
// Send temperature measurement command
Wire.write(0xF3);
Wire.endTransmission();
delay(500);
// Request 2 bytes of data
Wire.requestFrom(si7021Addr, 2);
// Read 2 bytes of data for temperature
if(Wire.available() == 2)
{
data[0] = Wire.read();
data[1] = Wire.read();
}
// Convert the data
float temp = ((data[0] * 256.0) + data[1]);
float celsTemp = ((175.72 * temp) / 65536.0) - 46.85;
float fahrTemp = celsTemp * 1.8 + 32;
// Output data to serial monitor
Serial.print("Humidity : ");
Serial.print(humidity);
Serial.println(" % RH");
Serial.print("Celsius : ");
Serial.print(celsTemp);
Serial.println(" C");
Serial.print("Fahrenheit : ");
Serial.print(fahrTemp);
Serial.println(" F");
delay(1000);
}
Пример вывода:
Humidity : 44.98 % RH
Celsius : 25.71 C
Fahrenheit : 78.27 F
Комментариев нет:
Отправить комментарий