Si7020 humidity sensor library + breakout board

Hi all,

I have written a library for Silicon Labs Si7020 relative humidity and temperature sensor.
It is first library I have created, mainly to learn stuff.

Along with the library I also attach Eagle design files for small PCB to play around with the sensor. The design is tested and it works.

You can find all at:

I hope you will like it.

I think this needs to go in the Gallery section. I will ask the moderators to move it


For me it is OK to have arduino related libraries here, imho the gallery is more for final projects.

looks well done, some remarks

makeMesurment() => makeMeasurement()

several places

	uint16_t RH_Code = makeMeasurment(RH_HOLD);
	float result = (RH_Code * (125.0/65536)) - 6;  // now compiler can optimze math compile time
	return result;

readTemp() and getTemp() are different, but the difference is not well reflected in the name

some suggestions
getPreviousTemperature() - getLastTemperature() -getRHTemperarute()

the other just more descriptive getTemperature()

getRH() ==> getHumidity() // more descriptive name

changeResolution(uint8_t i);
you could make an ENUM for the parameter RES_LOW RES_MED RES HIGH RES_MAX

if the param is out of range you still change the resolution, think you should prevent that

bool Si7020::changeResolution(uint8_t resolution)
  if (resolution > RES_LOW) return false;
  return true;

Wire.endTransmission(); return a value <> 0 in case of error. You could use that for robustness.
See the Wire lib for the details. YOu can use a private error flag to hold the last error.

8 )
The timeout of the makeMeasurement() return 0 in case of an timeout.
Does this not interfere with real measurements? better use the error flag

If the max delay = 22 msec you do not need to count to 100 msec for timeout,
25 or 30 should be enough.

in makeMeasurement you sometimes ask for 3 bytes but you only read the first 2.
is the 3rd byte the CRC?

(you could use less local memory making the footprint a few bytes smaller)

Track version, if not used it doesn’t take memory

#define SI7020_LIB_VERSION “0.1.00”

think that’s enough feedback for one iteration :slight_smile: