This article explains how to connect a Raspberry Pi with a SCD30 sensor module and send push notification to your phone when the CO2 level rises above a certain threshold. While the SCD30 sensor module is not the cheapest, it is quite accurate and easy to use. In addition to the CO2 level, the SCD30 can measure temperature, humidity and works within a wide voltage range (between 3.3V and 5.5V).
In this article we will focus on the very basics of the SCD30. Check out this in-depth article about the SCD30, if you want to know more about what the SCD30 is capable of.
For this article we will use a Raspberry Pi Zero W but any Raspberry Pi can be used. If you choose another Raspberry Pi, make sure to buy the correct power supply for it.
If you don’t want to permanently solder everything together, consider to also buy a pin header for your Pi and the SCD30 module.
Let’s start by wiring the Raspberry Pi to the SCD30.
You need to connect the following pinouts:
Click here to see the pin numbering for the Raspberry Pi Zero W and for other models.
Simplepush is an app for iOS and Android which lets you send push notifications to your phone from your Raspberry Pi. Simplepush also lets you send encrypted push notifications.
When you open the app for the first time, you will immediately get a six-digit key that identifies your phone with the Simplepush API. We will later need this key to send out an alert when the CO2 level rises above a certain threshold. Sending a notification with Simplepush is as simple as making an HTTP request.
I2C is a commonly used standard which gives modules, like the SCD30, the ability to talk to other devices that support the I2C standard.
In order to enable I2C on your Raspberry Pi enter the following command on your Pi:
This will open the raspi-config utility where you need to select “Interface Options”.
Then select the I2C option and select “Yes” once you get asked if the I2C interface should be enabled.
First we will need to install Python 3.
Then clone the following repository and follow the steps in its README.md. Since you already enabled I2C and wired everything together, you can ignore the first two steps and continue with installing required packages.
Once you finished all the steps and installed the SCD30 service on your Pi, you should be able to read out the sensor data from
CO2 sensors have to be calibrated in order to give accurate measurements. The CO2 sensor of the SCD30 can work in automatic self-calibration (ASC) or forced re-calibration (FRC) mode.
In ASC mode the lowest measurements within a seven day period get assigned to 400ppm. Therefore for ASC mode to work well, the SCD30 should be exposed to fresh air regularly. The sensor also has to run without being turned off for the whole period to finish the self-calibration successfully.
For proper function of ASC field-calibration algorithm SCD30 has to be exposed to air with CO2 concentration 400 ppm regularly
— SCD30 Datasheet
If your sensor can’t be exposed to fresh air regularly, you need to manually calibrate the sensor in FRC mode. Since ASC mode is the default for the SCD30 and therefore the easiest to use, we will ignore FRC mode for now.
Now all that is left is creating the script that sends out a push notification once the CO2 level is above a certain threshold.
Save the script to
/usr/local/bin/co2-alert.py and make it executable.
YourSimplepushKey with the key that you got when installing the Simplepush app on your phone.
Add a cronjob that runs every five minutes:
Append the following to the end of your cronjob file:
*/5 * * * * /usr/local/bin/co2-alert.py
After saving the cronjob file, the script runs every five minutes and sends out a notification when the CO2 level is above the defined threshold.Share on: