Simple test

Ensure your device works with this simple test.

examples/scd30_simpletest.py
 1# SPDX-FileCopyrightText: 2020 by Bryan Siepert, written for Adafruit Industries
 2#
 3# SPDX-License-Identifier: Unlicense
 4import time
 5
 6import board
 7import busio
 8
 9import adafruit_scd30
10
11# SCD-30 has tempremental I2C with clock stretching, datasheet recommends
12# starting at 50KHz
13i2c = busio.I2C(board.SCL, board.SDA, frequency=50000)
14scd = adafruit_scd30.SCD30(i2c)
15
16while True:
17    # since the measurement interval is long (2+ seconds) we check for new data before reading
18    # the values, to ensure current readings.
19    if scd.data_available:
20        print("Data Available!")
21        print(f"CO2: {scd.CO2:d} PPM")
22        print(f"Temperature: {scd.temperature:0.2f} degrees C")
23        print(f"Humidity: {scd.relative_humidity:0.2f} % rH")
24        print("")
25        print("Waiting for new data...")
26        print("")
27
28    time.sleep(0.5)

Tuning Knobs

Experiment with different tuning parameters and settings

examples/scd30_tuning_knobs.py
 1# SPDX-FileCopyrightText: 2020 by Bryan Siepert, written for Adafruit Industries
 2#
 3# SPDX-License-Identifier: Unlicense
 4import time
 5
 6import board
 7import busio
 8
 9import adafruit_scd30
10
11# SCD-30 has tempremental I2C with clock stretching, datasheet recommends
12# starting at 50KHz
13i2c = busio.I2C(board.SCL, board.SDA, frequency=50000)
14scd = adafruit_scd30.SCD30(i2c)
15# scd.temperature_offset = 10
16print("Temperature offset:", scd.temperature_offset)
17
18# scd.measurement_interval = 4
19print("Measurement interval:", scd.measurement_interval)
20
21# scd.self_calibration_enabled = True
22print("Self-calibration enabled:", scd.self_calibration_enabled)
23
24# scd.ambient_pressure = 1100
25print("Ambient Pressure:", scd.ambient_pressure)
26
27# scd.altitude = 100
28print("Altitude:", scd.altitude, "meters above sea level")
29
30# scd.forced_recalibration_reference = 409
31print("Forced recalibration reference:", scd.forced_recalibration_reference)
32print("")
33
34while True:
35    data = scd.data_available
36    if data:
37        print("Data Available!")
38        print("CO2:", scd.CO2, "PPM")
39        print("Temperature:", scd.temperature, "degrees C")
40        print("Humidity::", scd.relative_humidity, "%%rH")
41        print("")
42        print("Waiting for new data...")
43        print("")
44
45    time.sleep(0.5)

MCP2221 and SCD30 Example

MCP2221 is known to not like the SCD30. Here is how to avoid this!

examples/scd30_tuning_knobs.py
 1# SPDX-FileCopyrightText: 2020 by Bryan Siepert, written for Adafruit Industries
 2#
 3# SPDX-License-Identifier: Unlicense
 4import time
 5
 6import board
 7import busio
 8
 9import adafruit_scd30
10
11# SCD-30 has tempremental I2C with clock stretching, datasheet recommends
12# starting at 50KHz
13i2c = busio.I2C(board.SCL, board.SDA, frequency=50000)
14scd = adafruit_scd30.SCD30(i2c)
15# scd.temperature_offset = 10
16print("Temperature offset:", scd.temperature_offset)
17
18# scd.measurement_interval = 4
19print("Measurement interval:", scd.measurement_interval)
20
21# scd.self_calibration_enabled = True
22print("Self-calibration enabled:", scd.self_calibration_enabled)
23
24# scd.ambient_pressure = 1100
25print("Ambient Pressure:", scd.ambient_pressure)
26
27# scd.altitude = 100
28print("Altitude:", scd.altitude, "meters above sea level")
29
30# scd.forced_recalibration_reference = 409
31print("Forced recalibration reference:", scd.forced_recalibration_reference)
32print("")
33
34while True:
35    data = scd.data_available
36    if data:
37        print("Data Available!")
38        print("CO2:", scd.CO2, "PPM")
39        print("Temperature:", scd.temperature, "degrees C")
40        print("Humidity::", scd.relative_humidity, "%%rH")
41        print("")
42        print("Waiting for new data...")
43        print("")
44
45    time.sleep(0.5)