空氣品質感測物聯網與大數據GIS分析
地理 電腦
- 課程名稱:空氣品質感測物聯網與大數據GIS分析
- 教學程式語言:Arduino
- 課程內容:自製空氣品質感測器、空氣品質測量
專案網頁:🌐 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
然後
- 到開發板管理員中安裝
Esp32。 - 本次使用的開發板需選擇
Esp32 Dev Module。
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上。
⬆️ ESP32 連接 Wifi 後將偵測到的溫濕度透過 api 上傳 ThingSpeak
Mqtt + LASS
⬆️ ESP32 連接 Wifi 後將偵測到的空氣數值上傳,可於儀表板看到資料