[项目提交] 《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]