In this example we will connect an SI7021 digital temperature sensor to a Raspberry Pi and use Java to display the temperature readings, there are other languages such as C and python which work as well but I wanted to try something a little different
Here is a recap of the sensor
The Silicon Labs Si7006/13/20/21/34 devices are our latest generation of I2C relative humidity and temperature sensors. All members of this device family combine fully factory-calibrated humidity and temperature sensor elements with an analog to digital converter, signal processing, and an I2C host interface. The Si7013/20/21/34 devices are designed for high-accuracy applications, while the Si7006 is targeted toward lower-accuracy applications traditionally using discrete RH/T sensors.
The innovative CMOS design of these devices offers the lowest power consumption in the industry for a relative humidity and temperature sensor. Patented use of industry-standard low-K polymer dielectrics provides excellent accuracy and long-term stability, along with low drift and low hysteresis.
You can read more – https://www.silabs.com/products/sensors/humidity/si7006-13-20-21-34
Parts List
| Label | Part Type | |
|---|---|---|
| Part1 | Adafruit Si7021 Temp Humidity | |
| Raspberry Pi1 | Raspberry Pi 2 |
Layout
Code
This time we explore the world of Java on the Raspberry Pi
First you need to install PI4j – http://pi4j.com/install.html . I’ll sum it up as its easy to install from a terminal
The simplest method to install Pi4J on your RaspberryPi is to execute the following command directly on your RaspberryPi.
curl -s get.pi4j.com | sudo bash
Now for the java code – this is courtesy of a controleverything example
[codesyntax lang=”java”]
// Distributed with a free-will license.
// Use it any way you want, profit or free, provided it fits in the licenses of its associated works.
// SI7021
// This code is designed to work with the SI7021_I2CS I2C Mini Module available from ControlEverything.com.
// https://www.controleverything.com/content/Humidity?sku=SI7021_I2CS#tabs-0-product_tabset-2
import com.pi4j.io.i2c.I2CBus;
import com.pi4j.io.i2c.I2CDevice;
import com.pi4j.io.i2c.I2CFactory;
import java.io.IOException;
public class SI7021
{
public static void main(String args[]) throws Exception
{
// Create I2C bus
I2CBus bus = I2CFactory.getInstance(I2CBus.BUS_1);
// Get I2C device, SI7021 I2C address is 0x40(64)
I2CDevice device = bus.getDevice(0x40);
// Send humidity measurement command
device.write((byte)0xF5);
Thread.sleep(300);
// Read 2 bytes of humidity data, msb first
byte[] data = new byte[2];
device.read(data, 0, 2);
// Convert humidity data
double humidity = (((((data[0] & 0xFF) * 256) + (data[1] & 0xFF)) * 125.0) / 65536.0) - 6;
// Send temperature measurement command
device.write((byte)0xF3);
Thread.sleep(300);
// Read 2 bytes of temperature data, msb first
device.read(data, 0, 2);
// Convert temperature data
double cTemp = (((((data[0] & 0xFF) * 256) + (data[1] & 0xFF)) * 175.72) / 65536.0) - 46.85;
double fTemp = (cTemp * 1.8 ) + 32;
// Output data to screen
System.out.printf("Relative Humidity : %.2f %% %n", humidity);
System.out.printf("Temperature in Celsius : %.2f C%n", cTemp);
System.out.printf("Temperature in Fahrenheit : %.2f F%n", fTemp);
}
}
[/codesyntax]
Now you have to compile and run the program like this
$> sudo pi4j SI7021.java
Testing
You should see the following
Links
Industrial High Precision Si7021 Humidity Sensor with I2C Interface for Arduino



