• sales


SGP40 VOC Sensor User Guide


The SGP40 VOC Sensor is a digital VOC (Volatile Organic Compounds) sensor module that incorporates SGP40, designed for air quality monitoring. It can be used to measure fire coal, natural gas emissions, cigarette/cooking smoke, and emissions from constructing activity, decoration material, furniture, home appliances, then generate digital signals for triggering air treatment devices. The SGP40 VOC Sensor is small in size for easy integration into air treatment devices and air quality monitors, definitely an ideal choice for learning air quality monitoring.


  • Incorporates SGP40, for measuring 0 ~ 1000 ppm of ethanol equivalents
  • Features humidity-compensation and low-heat-dissipation, providing outstanding performance on sorts of environments
  • Digital I2C output, less interference
  • Onboard voltage translator, compatible with 3.3V/5V operating voltage


  • Sensor: SGP40
  • Measurement range: 0~1000 ppm of ethanol equivalents
  • Communication bus: I2C (constant address: 0x59)
  • Operating voltage: 3.3V/5V
  • Response time: <10s (tau 63%)
  • Switch-on time: <60s
  • Dimensions: 27 x 20mm
  • Mounting hole size: 2.0mm


  • Pins
1VCC3.3V/5V Power on
3SDAI2C data pin
4SCLI2C clock pin



This product uses Sensirion's SGP40 gas sensor and is designed for easy integration into air purifiers or demand-controlled ventilation systems. Sensirion's CMOSens® technology provides a complete, easy-to-use sensor system on a single chip with a digital I2C interface and temperature-controlled micro-heating plates that provide VOC-based humidity compensated indoor air quality signals. Sensirion's powerful VOC algorithm processes the output signal directly, converting the original signal into a VOC index that can be used as a reliable measure of indoor air quality. The VOC algorithm automatically ADAPTS to the environment in which the sensor is located. Both the sensing element and the VOC algorithm are unmatched in robustness against the polluting gases present in real-world applications, resulting in unique long-term stability and low drift and device-to-device differences.

Communication protocol

SGP40 uses I2C communication, I2C communication, one data line, one clock line. Normal I2C bus has three types of signals in the data transmission process: start signal, end signal, and response signal, as shown in the figure below:

Start signal: When SCL is high, SDA jumps from high level to low level, and data transmission begins。
End signal: When SCL is high, SDA jumps from low level to high level, and data transmission ends。
Reply signal: After receiving 8bit data, the receiving IC sends a specific low-level pulse to the sending IC to indicate that the data has been received..

  • I2C data read and write operations for SGP40

As can be seen from the figure above, the data of SGP40 is sent with 16-bit addresses, and the 16-bit data sent needs a CRC-8/MAXIM verification code.


Cyclic Redundancy Check (CRC) is one of the most commonly used error Check codes in the field of data communication. Its characteristic is that the length of information fields and verification fields can be arbitrarily selected. Cyclic redundancy check (CRC) is a data transmission error detection function that performs polynomial calculations on the data and attaches the results to the back of the frame. The receiving device also performs a similar algorithm to ensure the correctness and integrity of the data transmission. SGP40 uses THE CRC-8/MAXIM check code calculation, that is, the calculation result of polynomial x^8 + x^5 + x^4 + 1
The procedure has been simplified, using the lookup table method.

Hardware connection-Working with Arduino

Install Arduino IDE

Please download the IDE from the Arduino website and install it.

Test the codes

Download the demo codes from the Resources part and unzip it
This routine is written based on the Arduino library version, so you need to copy the program to the Arduino library directory. Copy the Waveshare_SGP40 folder in the Arduino directory from the next week's files to the Libraries folder in the Arduino installation directory(C:\Users\XXX\Documents\Arduino\libraries or C:\Program Files (x86)\Arduino\libraries)
Open the Arduino IDE: Choose file -> example -> Waveshare_SGP40 and open it.

The Development board select the appropriate model, select the appropriate COM port, compile the program, download to UNO, open the serial port monitor

It is important to note that this value uses a converted value, where VOC is 0 under normal conditions. Unless the environment is harsh, alcohol can be used instead of volatile gas, and a greater sensitive beat can be obtained.

Hardware connection-Working with Arduino

Connection with XNUCLEO-F103RB:

AS7341 Spectral Color SensorXNUCLEO-F103RB

Hardware connection-Working with Raspberry Pi

AS7341 Spectral Color SensorRaspberry Pi(BCM)

Working with Raspberry Pi

Enable I2C interface

  • Open a terminal and run the following commands:
sudo raspi-config 
#Choose Interfacing Options -> I2C ->yes  to enable the I2C interface

  • Restart Raspberry Pi
sudo reboot

Install libraries

  • Install BCM2835,open the terminal and run the following command
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.60.tar.gz
tar zxvf bcm2835-1.60.tar.gz 
cd bcm2835-1.60/
sudo ./configure
sudo make
sudo make check
sudo make install
  • Install wiringpi
sudo apt-get install wiringpi
cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
gpio -v

Download and test the demo codes

sudo apt-get install p7zip-full
wget https://www.waveshare.com/w/upload/6/62/SGP40_Voc_Sensor_code.7z
7z x SGP40_Voc_Sensor_code.7z -r -o./SGP40_Voc_Sensor_code
sudo chmod 777 -R  SGP40_Voc_Sensor_code

python codes

cd SGP40_Voc_Sensor_code/RPI
sudo python SGP40.py
  • Note: This sensor is extremely sensitive to ethanol
  • Note: The sensor starts with a heating process, during which the raw data slowly increases until it stabilizes.
Price: $14.89
Part Number: SGP40-VOC-Sensor
Brand: Spotpear
SKU: 0205027