SGP30:TVOC/eCO2 Gas Sensor 簡介
SGP30:Air Quality Sensor 功能特性介紹
- 使用 I2C 通訊介面
- 正確率在 15% 以內
- 適合用來做室內的空氣品質偵測
- 在揮發性有機化合物 VOC 和氫氣 H₂ 上,可偵測大範圍的數值
- 使用上通常會用來回傳 Total VOC(TVOC)和 equivalent CO₂(eCO2)
- eCO2 的檢測範圍:400~60000 ppm
- TVOC 的檢測範圍:0~60000 ppb
- 因為 SGP30 回傳的等值 CO₂(eCO2)是經由檢測 H₂ 濃度後,用 IAQ 演算法換算而來的,而非 CO₂ 精確值,所以不適合作為實驗室用
- 如果能經由別的濕度 Sensor 給予 SGP30 RH%(相對濕度),那 SGP30 便能更精準地計算出 TVOC/eCO2 的值
SGP30|Pinouts:「Pin 腳」功能介紹
在 SGP30 上的 Pin 腳,可分成 Power Pin 和 Data Pin 兩種:
- Power Pin|Vin:為能源接角,因為內建電壓調節器,所以可以接上 3V 到 5V,SGP30 將會安全地降壓。使用時,只要接上和微處理器同等使用的電壓就行了。如 Raspberry Pi 就用 3V。
- Power Pin|1V8:此接角可經由內建的電壓調節器輸出 1.8V,最高可到 50mA。
- Power Pin|GND:用來接地的接角
- Data Pin|SCL:I2C 的時鐘接角 Clock Pin
- Data Pin|SDA:I2C 的資料接角 Data Pin
樹莓派 Raspberry Pi 與 SGP30 的 I2C 接線
樹莓派 Raspberry Pi | SGP30 | |
---|---|---|
3V3 | → | VIN |
GND | → | GND |
SCL | → | SCL |
SDA | → | SDA |
沒有使用到 1V8 Pin 腳 |
樹莓派 Raspberry Pi:GPIO Pin
- 3V3 腳位:1、17 號
- GND 腳位:6、9、14、20、25、30、34、39 號
- SCL 腳位:5 號
- SDA 腳位:3 號
Raspberry Pi:檢查 I2C 裝置
在接完線後,可以於樹莓派 Raspberry Pi 上,開啟終端機 Terminal,並輸入 sudo i2cdetect -y 1
用來檢查是否接對,或無接觸不良的問題,樹莓派 Raspberry Pi 能順利的偵測到這個 I2C 裝置。
如果順利的話,會出現以下輸出:
pi@raspberrypi:~ $ sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- 58 -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
會看到,這一顆 SGP30 Air Quality Sensor 在 I2C 的介面下,位置 address 為 0x58。
SGP30:下載使用所需的 Library!
為了能方便的在 Raspberry Pi 上撰寫簡單的程式就能操作 SGP30 Air Quality Sensor,我們可以下載使用 Adafruit 官方所提供的 Library 程式庫。
以下列出所有我們需要下載的 Library 程式庫,以及需要在終端機 Terminal 中輸入的指令:
下載:CircuitPython
在終端機 Terminal 中,輸入:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3-pip
sudo pip3 install --upgrade setuptools
cd ~
sudo pip3 install --upgrade adafruit-python-shell
wget https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/raspi-blinka.py
sudo python3 raspi-blinka.py
可能會問「Continue?」輸入 y,按 Enter。
下載:Adafruit's CircuitPython library bundle
pip3 install adafruit-circuitpython-lis3dh
pip3 install adafruit-circuitpython-sgp30
pip3 install adafruit-circuitpython-busdevice
下載注意!
如果有問題,無法下載,可以改試 pip
而不要用 pip3
SGP30:程式碼簡單使用範例教學
範例程式使用 CircuitPython 和 Adafruit library。
import time
import board
import busio
import adafruit_sgp30
# 定義 busio.I2C 和 sensor 物件
i2c = busio.I2C(board.SCL, board.SDA, frequency=100000)
sgp30 = adafruit_sgp30.Adafruit_SGP30(i2c)
print("SGP30 serial #", [hex(i) for i in sgp30.serial])
# IAQ 演算法:將 H₂ 濃度換算成 eCO₂ 的濃度
sgp30.iaq_init()
sgp30.set_iaq_baseline(0x8973, 0x8AAE)
elapsed_sec = 0
while True:
# 讀值:eCO₂ 和 TVOC
print("eCO₂ = %d ppm \t TVOC = %d ppb" % (sgp30.eCO2, sgp30.TVOC))
time.sleep(1) # 等一下
elapsed_sec += 1
# 每 10 次輸出 1 次 Baseline values,和 IAQ 演算法有關
if elapsed_sec > 10:
elapsed_sec = 0
print("**** Baseline values: eCO₂ = 0x%x, TVOC = 0x%x" % (sgp30.baseline_eCO2, sgp30.baseline_TVOC))
在以上的程式碼中,在相關的函式都放了解釋文件的連結,想了解更多的話,可以點擊去了解!