leihaozhuce 发表于 2026-2-1 21:49:32

[项目提交] 《2025 DigiKey AI应用创意挑战赛》基于树莓派的空气质量监测

基于 SGP30 传感器模块 和 树莓派5(Raspberry Pi 5) 的空气质量监测系统
一、系统概述
SGP30 是 Sensirion 公司推出的数字气体传感器,可检测:
TVOC(总挥发性有机化合物)
eCO₂(等效二氧化碳浓度)
适用于室内空气质量监测。通过 I²C 接口与树莓派通信。
二、硬件连接

SGP30 引脚        树莓派5 引脚
VCC        3.3V (Pin 1)
GND        GND (Pin 6)
SDA        SDA (Pin 3)
SCL        SCL (Pin 5)
注意:SGP30 工作电压为 3.3V,不要接 5V!


三、软件环境准备
1. 启用 I²C 接口

sudo raspi-config
进入 Interface Options → I2C → 启用。

2. 安装依赖库
sudo apt update
sudo apt install python3-pip python3-smbus2 i2c-tools
pip3 install adafruit-circuitpython-sgp30
3. 验证 I²C 设备
i2cdetect -y 1
应看到地址 0x58(SGP30 的默认 I²C 地址)。

四、Python 代码
下面给出基于Python 的代码,使用树莓派自带的mu编译器,编译通过。
# air_quality_monitor.py
import time
import board
import busio
import adafruit_sgp30

# 初始化 I2C 总线
i2c = busio.I2C(board.SCL, board.SDA, frequency=100000)

# 初始化 SGP30 传感器
sgp30 = adafruit_sgp30.Adafruit_SGP30(i2c)

print("SGP30 初始化中...")
sgp30.iaq_init()
sgp30.set_iaq_baseline(0x8973, 0x8aae)# 可选:设置基线(需长期运行后保存)

# 获取初始基线(用于后续恢复)
baseline_eCO2 = 0x8973
baseline_TVOC = 0x8aae

print("开始读取空气质量数据...")

try:
    while True:
      # 读取 eCO2 和 TVOC
      co2 = sgp30.eCO2
      tvoc = sgp30.TVOC

      print(f"eCO₂: {co2} ppm\tTVOC: {tvoc} ppb")

      # 可选:每小时保存一次基线(用于下次启动快速校准)
      if time.time() % 3600 < 1:# 每小时
            baseline_eCO2 = sgp30.baseline_eCO2
            baseline_TVOC = sgp30.baseline_TVOC
            print(f"保存基线: eCO2=0x{baseline_eCO2:04x}, TVOC=0x{baseline_TVOC:04x}")

      time.sleep(1)

except KeyboardInterrupt:
    print("\n程序已停止。")
五、运行结果
首先初始化15秒,等待传感器预热

预热过后,对着传感器呼气,看到CO2和TVOC参数都有较大变化。


运行视频
【【认认-真真】最新视频来袭,快来看看吧!-哔哩哔哩】 https://b23.tv/tUyMGhc

进阶功能实现
1. 数据记录到 CSV 文件
import csv
from datetime import datetime

with open('air_quality_log.csv', 'a', newline='') as f:
    writer = csv.writer(f)
    if f.tell() == 0:
      writer.writerow(['Timestamp', 'eCO2 (ppm)', 'TVOC (ppb)'])
    writer.writerow()
2. 简易 Web 仪表盘(使用 Flask)
from flask import Flask, jsonify
app = Flask(__name__)

@app.route('/api/air')
def get_air():
    return jsonify({
      'eCO2': sgp30.eCO2,
      'TVOC': sgp30.TVOC,
      'timestamp': time.time()
    })

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
3. 自动基线保存与恢复
SGP30 需要约 12 小时稳定运行才能获得可靠基线。建议:
首次运行时不设置基线;
运行 12 小时后记录 sgp30.baseline_eCO2 和 sgp30.baseline_TVOC;
下次启动时通过 set_iaq_baseline() 恢复,加快校准。

六、注意事项
预热时间:SGP30 需要几分钟预热才能输出稳定值。
避免污染:不要在酒精、香水等挥发物附近使用。
定期通风:长期封闭环境会影响基线准确性。
电源稳定:使用高质量电源,避免 I²C 通信错误。

七、参考资源
Adafruit SGP30 Python 库文档
Sensirion SGP30 官方数据手册

页: [1]
查看完整版本: [项目提交] 《2025 DigiKey AI应用创意挑战赛》基于树莓派的空气质量监测