Sensirion Environmental Sensor Shield - Review

Table of contents

RoadTest: Sensirion Environmental Sensor Shield - Industrial Sensing

Author: vplacint

Creation date:

Evaluation Type: Test Equipment

Did you receive all parts the manufacturer stated would be included in the package?: True

What other parts do you consider comparable to this product?: I had used other parts which are similar with these 2 sensors (e.g. BME680, SHT21), but overall I am confident about them, hence I plan to use SGP30 and SHTC1 in my next application design for environmental monitoring.

What were the biggest problems encountered?:

Detailed Review:

1. Introduction

Many thanks again for the element14 and Sensirion guys who get me the chance to work with the ESS board.

I think that one of the key problems in our days is the air pollution, which keeps to spread all over the world and (I think) we can prevent, predict, measure and also mitigate it using the right tools. The environmental sensors have become a "must have" and also in the present days is more easily to buy and interface them with IoT or a custom board to have an idea of what you breathe or how clean is the air in your place to live. One example of these kind of sensors is the Environmental Sensor Shield (ESS). As stated by Sensirion, the ESS board is a sensor board that features SHTC1 sensor for humidity and temperature measurements along with a SGP30 sensor for total VOC and CO2eq measurements. It has been designed to be easily interfaced with Arduino boards and using only 4 connections (VDD, GND, SCL and SDA). In fact, it can be interfaced with any I2C master target: ARM uC, FPGA, SoC (System on Chip), Raspberry Pi etc.

       Since I am an intermediate user of FPGA-based systems, for this roadtest I have decided to make a simple FPGA application written in VHDL language which will readout the ESS board via I2C and send the raw data through UART to an LabVIEW based graphical user interface. The FPGA board used for this application is the ARTY-S7 board which I will do also a roadtest+ project in the following days.


1.1 Hardware Setup

I my case the hardware setup was easy because the ARTY-S7 board has an Arduino shield socket and the ESS board fits perfectly. The 3 LEDs on the ESS board are used as follows:

  • LED1 ( Arduino Pin 9) as a reset sensor flag. (if a reset command for one of the sensors is triggered)
  • LED2 ( Arduino Pin 10) as a I2C ACK error flag. (I have use it just for debug)
  • LED3 ( Arduino Pin 11) as a power on flag.

      The following photos highlights the test bench used for this roadtest. Additionally, I have used the Digital Discovery tool for debugging my VHDL configuration, which is also from a previous roadtest. And, of course a mug filled up with coffee because I run on coffee, most of the time.


2. FPGA Firmware and testing

Using Xilinx's Vivado environment I have wrote the FPGA configuration to readout the sensors using VHDL language. The configuration file is structured in the following:


  • The uart component: Is used to generate a 115200 baud rate with 8 bits and 1 stop bit custom UART protocol.
  • The ESS component: Is used to generate the I2C bus and to control and readout the ESS board.
  • The top_system component: It connects the ESS with the uart components, and has the main state machine to control the whole system.


    After implementation, the configuration uses the following resources from the XC7S50-CSGA324 FPGA.


2.1 SHTC1

The SHTC1 is a digital readout sensor designed to be integrated in large volume consumer electronics applications. While its package is ultra small, 2 x 2 x 0.75 mm^3, it is a low power integrated circuit which has integrated 2 sensors for humidity and temperature.These features enables him to be used in space constrain applications.

The following table highlights the main features of the SHTC1 extracted from the datasheet.


From the same datasheet I have extracted the commands and how they need to be implemented, which are shown in the next table. For each measurement or read command a CRC-8 byte is clocked out by the sensor after data is read in the same transaction.


I have used to clock stretching enabled commands, because I wanted to test my I2C core. This I2C feature is quite interesting and allows the I2C slaves to tell the master to slow down a little bit by pulling the clock line (SCL) low till they are ready to send the requested data. More details about this feature can be read here, click.

During tests I have used the I2C bus speed with various frequencies from 1 to 400 KHz. In the following are presented a few print screens from the Waveforms software with the monitoring of the I2C bus while trying to control the SHTC1 sensor






2.2 SGP30

The SGP30 is a digital multi-pixel readout sensor designed to be easily integrated in consumer electronics. It has embedded metal-oxide gas sensor sensible to more than one elements, providing detailed information about the air quality. Its very small package 2.45 x 2.45 x 0.9 mm^3 and along with its 2 wire communication, I2C, guaranties the need to be used in limited spaces. It has a lot of features implemented like: humidity compensation, raw signals measurements, baseline settings etc.

The following table highlights the main features of the SGP30 extracted from the datasheet.


From the same datasheet I have extracted the commands which I needed to be implemented, which are shown in the next table. For each measurement or read command a CRC-8 byte is clocked out by the sensor after data is read in the same transaction.


Since the SGP30 does not have implemented the clock stretching feature, the vendor says that some idle times are needed before reading a requested parameter, hence idle times have been implemented before reading a parameter of interest. The delay values are given by the vendor in the SGP30's datasheet.

Following the SHTC1 tests, the following print screens highlights the tests done on the SGP30, while the bus was monitored with the Digital Discovery tool. During tests I have used the I2C bus speed with various frequencies from 100 Hz to 400 KHz.

SGP30 RESET COMMAND SEQUENCE (Using the general call I2C Address)








In order to see and plot the data I have designed a graphical user interface using LabVIEW. The GUI is designed around an event based state machine, and it is used to send commands to the ESS board through the FPGA board. It computes the temperature and humidity values using the raw 16-bit values from the SHTC1 by using a formula provided by the vendor.


It is composed from 2 parts:

  • a user testing part (bottom side of GUI) which allows the user to send an read parameters from each sensors individually (read ID, reset, read temperature, read humidity, init measurements and read measurements).
  • a custom data acquisition part (top side of GUI) triggered by the START DAQ button, and allows the user to take data at each 1 s from the ESS board and plot it on 2 graphs (temperature, humidity, TVOC and CO2eq).

3. Experimental Tests

For testing, I have begin to test the sensors separately, but in the final I let them run for about 3 hours to monitor my room while I was watching a movie.

Please note that all the measurements were made indoor. 



                 SHTC1 stability tests over 1000 s                                                       


              SHTC1 heating up tests over 2000 s  


             SHTC1 cooling down tests over 2000 s


I have compared the readings with another sensor, DS18B20, from Maxim Integrated and the values seem to be pretty accurate.


Before starting the SGP30 testing is better to understand what TVOC and CO2eq stands for.

TVOC is the acronym from Total Volatile Organic Compounds and is a wide range of organic chemical compounds which are generally referred as vapor of gases produced by the chemical compounds and of course presented simultaneously in the air.

The SGP30 gives to the user the TVOC values in ppb (part per billion) and its measuring range is between 0 and 60000 ppb.

CO2eq stands for carbon dioxide equivalent and is a unit to describe the amount of CO2 that will cause the same global warning potential (GWP) for different greenhouse gases. The SGP30 sensor gives the CO2eq values in ppm (parts per million) and its measuring range is between 400 and 60000 ppm.


TVOC levels and how should be interpreted (Courtesy of German Federal Environmental Agency)                       


CO2 [ppm] levels courtesy of Axiomet (based on the US standard ASHRAE 62.1-2013)


                  SGP30 stability tests over 1500 s                                                        


          SGP30 human exhalation tests over 1000 s 


    SGP30 perfume (alcohol) sensing tests over 700 s 


              SGP30 alcohol (~50%) sensing tests



  Full indoor monitoring with the ESS board over 9000 s (while I was enjoying a movie and a glass of whiskey)


4. Conclusions


The ESS board is a good and affordable board to start with for the environmental monitoring. The sensors are very small and quite easy to interface using the I2C interface.

However, during tests I have seen some issues and some of them have been confirmed by other users:

  1. while the TVOC sensor was tested with alcohol (perfume, or alcohol based drinks) it gives a high value measurement also for the CO2eq.
  2. some unrelated spikes in both and TVOC and CO2eq measurements were seen.

At first I though it is a bug in my FPGA firmware, but after a few days of testing and when I have seen them reported by other users, I started to wonder if maybe it is a bug in the SGP30 itself. When I will have time I will buy another sensor (or sensors) with the same features as SGP30 and I will compare the results.


Best Regards,