科技

2021 年 8 月 10 日

樹莓派|SGP30 使用教學:MOX Gas Sensor

已複製到剪貼板


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))

在以上的程式碼中,在相關的函式都放了解釋文件的連結,想了解更多的話,可以點擊去了解!

分享文章

已複製到剪貼板

主題文章

查看 科技

關於看我所見

「看我所見」主題多元,分享作者的生活經歷、特殊經驗,舉凡:教育、生活、科技、3C、音樂、娛樂 ⋯⋯,我們也將持續優化,提供讀者最好的體驗!


Contacts

Ricky Chuang

看我所見

linktr.ee/5j54d93

最新文章