HYT939 представляет собой цифровой датчик влажности, который работает по интерфейсу I2C. Влажность является ключевым параметром, когда речь заходит о медицинских системах, лабораторных приборах и метеорологическом оборудовании. С помощью одноплатного компьютера Raspberry Pi такие устройства легко можно сделать, если к нему подключить датчик влажности HYT939. Кроме того, HYT939 способен измерять температуру, хотя все же чаще его используют для измерения влажности из-за его превосходных характеристик в этой области.

В данном материале показано, как подключить датчик HYT939 к Raspberry Pi, и приведен код на языке Java для взаимодействия Raspberry Pi с датчиком.
Для данного проекта потребуется сам миникомпьютер Raspberry Pi, датчик влажности HYT939, шилд-переходник I2C Shield, кабель I2C для чтения значений влажности по протоколу I2C (содержит четыре провода Vcc, Gnd, SCL и SDA), кабель Ethernet для связи Raspberry Pi с компьютером, а также кабель nano USB для подведения питания к Raspberry Pi. В итоге система с подключенными элементами должна выглядеть так, как показано на фотографии, приведенной ниже.

Преимущество использования Raspberry Pi заключается в том, что оно дает вам гибкость выбора языка программирования. Поэтому в данном случае программирование Raspberry Pi осуществим на языке Java. Для этого необходимо будет скачать библиотеку pi4j (http://pi4j.com/install.html).
Код для взаимодействия Raspberry Pi и датчик HYT939 представлен ниже.
import com.pi4j.io.i2c.I2CBus;
import com.pi4j.io.i2c.I2CDevice;
import com.pi4j.io.i2c.I2CFactory;
import java.io.IOException;
public class HYT939
{
public static void main(String args[]) throws Exception
{
// Для шины I2C
I2CBus bus = I2CFactory.getInstance(I2CBus.BUS_1);
I2CDevice device = bus.getDevice(0x28);
device.write((byte)0x80);
Thread.sleep(500);
// считываем 4 байта данных (старшие и младшие байты влажности и температуры)
byte[] data = new byte[4];
device.read(data,0,4);
// Преобразовываем данные в 14-битные переменные
double humidity = (((data[0] & 0x3F) * 256) + (data[1] & 0xFF)) * (100.0 / 16383.0);
double cTemp = ((((data[2] & 0xFF) * 256) + (data[3] & 0xFC)) / 4) * (165.0 / 16383.0) - 40;
double fTemp = (cTemp * 1.8 ) + 32;
// Выводим данные на экран
System.out.printf("Relative Humidity is : %.2f %%RH %n", humidity);
System.out.printf("Temperature in Celsius is : %.2f C %n", cTemp);
System.out.printf("Temperature in Fahrenheit is : %.2f F %n", fTemp);
}
}