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

@Roger

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

@teoqba
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: