Raspberry Pi Pico W 空氣品質檢測系統 — 上傳感測器數值到 Google 試算表

前言

在我們的日常生活中,空氣品質的重要性不言而喻。尤其在都市中,空氣污染問題日益嚴重,我們需要實時監控空氣品質,以確保我們的健康。在這篇文章中,筆者將分享如何使用 Raspberry Pi Pico W 來操作空氣品質感測器,並將相關數值上傳到 Google 試算表,是一個相當簡單但是功能強大的物聯網應用喔!

筆者將會逐步介紹連接硬體、編寫軟體和解析數據的過程,讓你可以輕鬆地建立自己的空氣品質監控系統,隨時掌握周遭環境的空氣品質。

撰寫/攝影 許鈺莨 (ChatGPT協作編輯)
時間 小時 材料表

 

難度 2(滿分5)

本文

本專題分享如何操作 Raspberry Pi Pico W 開發板來取得空氣品質、溫溼度、PM2.5 的數值,並顯示在OLED螢幕中,最後再透過 IFTTT 將感測器數值上傳到 Google 試算表。本專題配合Thonny IDE撰寫MicroPython程式,來讀取空氣品質數值,有關於 Raspberry Pi Pico W連接Thonny IDE撰寫MicroPython程式,可以查看下段的前導文章。

前導文章

● 透過Thonny IDE撰寫

有關於Raspberry Pi Pico W透過Thonny IDE撰寫MicroPython程式,請看【使用Raspberry Pi Pico W和MicroPython進行物聯網應用開發】,文中詳細說明Raspberry Pi Pico W如何與Thonny IDE連接,並且分享了匯入感測器模組的函式庫作法。

● 雲端監測

本文使用的雲端平台是由 IFTTT 串接 Google 試算表, IFTTT 設定部分請參考【LinkIt™ 7697空氣品質偵測並上傳Google表單(空氣盒子2.0)】。

感測器接線圖

這次所使用的感測器,除沿用之前文章所說明的 PMS5003 粉塵感測器和OLED螢幕外,還用到了 SGP30 二氧化碳感測器和 DHT22 溫濕度感測器,以下說明這兩種感測器模組的線路圖。

● SGP30接線圖

● DHT22接線圖

如何查看內建函式庫

本文所需要的 python 函式庫模組,如DHT22的dht模組和雲端IFTTT時需要的requests,在Raspberry Pi Pico W中已經有內建了,需在互動環境(Shell)中輸入下列指令,可查看內建的函式庫。

help('modules')

撰寫程式碼

請由此下載本文程式碼

PMS5003_DHT22_SGP30_IFTTT.py
import machine
import utime
import dht
from ssd1306 import SSD1306_I2C
from adafruit_sgp30 import Adafruit_SGP30
from time import sleep
import network
import ntptime
import urequests

# 初始化 SGP30和OLED的I2C
i2c_sgp = machine.SoftI2C(sda=machine.Pin(8), scl=machine.Pin(9))
i2c_oled = machine.SoftI2C(sda=machine.Pin(4), scl=machine.Pin(15))

# 初始化 OLED
oled_width = 128
oled_height = 64
oled = SSD1306_I2C(oled_width, oled_height, i2c_oled)

# 初始化 UART
uart = machine.UART(0, baudrate=9600, tx=machine.Pin(0), rx=machine.Pin(1), timeout=1000)
uart.init(9600, bits=8, parity=None, stop=1)

# 初始化 DHT22 
dht22 = dht.DHT22(machine.Pin(2))

# 初始化 SGP30 
sgp30 = Adafruit_SGP30(i2c_sgp)

# ...
# 設置變數
# ...
pm1_cf = 0
pm25_cf = 0
pm10_cf = 0
temp = 0
humidity = 0
eco2 = 0
tvoc = 0


# 決定OLED切換顯示感測器數值的變數
display_sensor = 0

# 獲得現在時間
start_time = utime.time()

# 初始化WiFi
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)

wifi_ssid = "XXXXXXX"
wifi_password = "XXXXXX"

sta_if.connect(wifi_ssid, wifi_password)

#輸入IFTTT資訊
IFTTT_API_KEY = "XXXXXXXXXXXXX"
IFTT_EVEN_NAME="XXXXXXXXXXX"


while True:

    current_time = utime.time()

    # 得到DHT22數值
    dht22.measure()
    temp = dht22.temperature()
    humidity = dht22.humidity()

    # 得到PMS5003數值
    data = bytearray(uart.read(32))

    # 得到SGP30數值
    eco2 = sgp30.co2eq
    tvoc = sgp30.tvoc

    if data is not None and len(data) >= 10 and data[0] == 0x42 and data[1] == 0x4d:
        pm1_cf = int.from_bytes(data[4:6], 'big')
        pm25_cf = int.from_bytes(data[6:8], 'big')
        pm10_cf = int.from_bytes(data[8:10], 'big')

        if current_time - start_time >= 3:
            # 每3秒鐘切換數值顯示
            display_sensor = (display_sensor + 1) % 3
            start_time = current_time

        oled.fill(0)
        if display_sensor == 0:
            # 顯示PMS5003數值
            oled.text("PM1.0: %d ug/m3" % pm1_cf, 0, 22)
            oled.text("PM2.5: %d ug/m3" % pm25_cf, 0, 38)
            oled.text("PM10 : %d ug/m3" % pm10_cf, 0, 54)
        elif display_sensor == 1:
            # 顯示DHT22數值 
            oled.text("Temp: %3.1f C" % temp, 0, 22)
            oled.text("Humidity: %3.1f %%" % humidity, 0, 38)
        else:
            # 顯示SGP30數值
            oled.text("eCO2: %d ppm" % eco2, 0, 22)
            oled.text("TVOC: %d ppb" % tvoc, 0, 38)
        oled.show()


    # 上傳data 到 IFTTT
    sensor_readings = {
        'value1': pm25_cf,
        'value2': temp,
        'value3': eco2
    }
    print('Printing sensorredings')
    print(sensor_readings)
    request_headers = {'Content-Type': 'application/json'}
    
    request = urequests.post(
        'https://maker.ifttt.com/trigger/' + IFTT_EVEN_NAME +'/with/key/' + IFTTT_API_KEY,
        json=sensor_readings,
        headers=request_headers
    )
    print(request.text)
    request.close()
    
    sleep(1)

如何自動執行程式

如果希望自動執行程式,只需要將上述程式碼檔名改成 main.py 之後存入 Raspberry Pi Pico W中即可,說明如下。

開啟檔案>另存新檔

選Raspberry Pi Pico>將檔案名稱改成”main.py”

執行結果

執行程式之後,就會在 Thonny IDE 中看到相關訊息,開啟對應的 Google 試算表之後也會看到數值一筆筆進來了。

如果無法順利執行程式,請檢查先前所有設定與感測器接線,預祝成功囉!

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *