空氣品質感測物聯網與大數據GIS分析

地理 電腦

專案網頁:🌐 https://portfolio.sk5s.cyou/project/230225-esp32/

目次

課程說明

課程使用 ESP32 開發板、Arduino IDE 來製作空氣感測器、感測空氣品質(PM2.5、溫度、濕度),從開發板使用教學開始,再進到讀取感測器,最後實際測量學校空氣數值。

主要材料

ESP32開發板 麵包板 杜邦線數條 DHT11感測器

心得

這次課程使用 ESP32 開發板連接 PM2.5 和 DHT11 感測器,來自製空氣品質感測器,通過實際的操作練習,我除了學到了 ESP32 的使用方法之外,也學到了做事情要仔細小心,在使用感測器的時候,只要一不小心接錯線路,感測器很有可能就會被燒壞了,所以在通電以前一定要先檢查清楚再行動。最後我成功的做出了感測器,並且拿到戶外測量學校的空氣,得到的數據是 PM2.5 $80 μg/m^3$、溫度是 19 °C、濕度是 76 %H,比較特別的是 PM2.5 數據特別高,但是當天的空氣看起來並沒有很不好,我覺得可能原因是,當時剛好是掃地時間,測量地點剛好有學生在掃地,所以才導致 PM2.5 的濃度很高。

⬇️ 校內實際室外空氣品質測量

學習紀錄

Arduino IDE

Arduino IDE 安裝,及設定開發板資訊,寫入程式讓開發板上的燈亮。

⬆️ Arduino IDE 畫面

要在電腦上使用 Esp32 開發板,需先安裝驅動程式,安裝 Arduino IDE,並於設定中加入開發板資訊:

https://dl.espressif.com/dl/package_esp32_index.json

然後

LED 控制練習

控制電位使兩顆外接 LED 燈輪流亮。

#define LED_BUILTIN 2
#define RED_LED 15

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(RED_LED, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  digitalWrite(RED_LED, LOW);
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  digitalWrite(RED_LED, HIGH);
  delay(1000);                       // wait for a second
}

#define LED_BUILTIN 2
#define LED_A 15
#define LED_B 4

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(LED_A, OUTPUT);
  pinMode(LED_B, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  digitalWrite(LED_A, HIGH);
  digitalWrite(LED_B, LOW);
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  digitalWrite(LED_A, LOW);
  digitalWrite(LED_B, HIGH);
  delay(1000);                       // wait for a second
}

DHT11

DHT11是一個溫濕度感測器,以下嘗試讀取溫濕度。

#include <SimpleDHT.h>

// for DHT11, 
//      VCC: 5V or 3V
//      GND: GND
//      DATA: 15
int pinDHT11 = 15;
SimpleDHT11 dht11(pinDHT11);

void setup() {
  Serial.begin(115200);
}

void loop() {
  // start working...
  Serial.println("=================================");
  Serial.println("Sample DHT11...");
  
  // read without samples.
  byte temperature = 0;
  byte humidity = 0;
  int err = SimpleDHTErrSuccess;
  if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
    Serial.print("Read DHT11 failed, err="); Serial.print(SimpleDHTErrCode(err));
    Serial.print(","); Serial.println(SimpleDHTErrDuration(err)); delay(1000);
    return;
  }
  
  Serial.print("Sample OK: ");
  Serial.print((int)temperature); Serial.print(" *C, "); 
  Serial.print((int)humidity); Serial.println(" H");
  
  // DHT11 sampling rate is 1HZ.
  delay(1500);
}

⬆️ ESP32 將偵測到的溫濕度印出

ThingSpeak

上傳溫濕度資料到ThingSpeak上。

ThingSpeak

⬆️ ESP32 連接 Wifi 後將偵測到的溫濕度透過 api 上傳 ThingSpeak

Mqtt + LASS

LASS資料庫(MQTT)

⬆️ ESP32 連接 Wifi 後將偵測到的空氣數值上傳,可於儀表板看到資料

上: 科技應用專題 下: 學習歷程個人網站實作

sk5s project 為 samko5sam 為紀錄學習而搭建的個人網站,因為網站內容不便完全公開,所以請勿將網址隨意分享,網站也已經加上noindex。