PetMonitor(ESP32 + MAX30102 + GPS + MQTT) 🐾 PetMonitor:ESP32 寵物生理監測系統 整合 心跳(MAX30102)+ GPS 定位(TinyGPS++)+ MQTT 雲端上傳 + OLED 顯示 + RGB LED 狀態燈 的完整 IoT 專案。 本專案已完全模組化,採用 .ino + .h + .cpp 架構,方便維護與擴充。 PetMonitor/ │ ├── PetMonitor.ino │ ├── WiFiManager.h / WiFiManager.cpp ├── MQTTClientWrapper.h / MQTTClientWrapper.cpp ├── GPSModule.h / GPSModule.cpp ├── HeartRateSensor.h / HeartRateSensor.cpp ├── LEDController.h / LEDController.cpp ├── OledDisplay.h / OledDisplay.cpp
┌──────────────────────────────────────────────────────────┐ │ PetMonitor.ino │ │ (主流程:setup/loop,呼叫各模組 update()) │ └───────────────┬───────────────┬───────────────┬─────────┘ │ │ │ ▼ ▼ ▼ ┌────────────────┐ ┌───────────────┐ ┌────────────────┐ │ WiFiManager │ │ GPSModule │ │ HeartRateSensor │ │ WiFi 連線管理 │ │ GPS 解析 │ │ MAX30102 心跳 │ └────────────────┘ └───────────────┘ └────────────────┘ │ │ │ └───────────────┬───────────────┘ ▼ ┌────────────────────┐ │ MQTTClientWrapper │ │ 上傳心跳/GPS 到雲端 │ └────────────────────┘ │ ┌──────────────┴──────────────┐ ▼ ▼ ┌────────────────┐ ┌────────────────┐ │ LEDController │ │ OledDisplay │ │ RGB LED 狀態燈 │ │ OLED 心跳動畫 │ └────────────────┘ └────────────────┘ 功能說明 1️⃣ WiFiManager 負責 WiFi 連線、重試、狀態檢查。
2️⃣ MQTTClientWrapper 負責 MQTT 連線、重連、JSON 資料上傳。 上傳格式: { "heart": 72, "lat": 22.6273, "lng": 120.3014 } 3️⃣ GPSModule 使用 TinyGPS++ 解析 NMEA,提供:
getLat()
getLng()
isValid()
4️⃣ HeartRateSensor(MAX30102) 採用 門檻過零點法(Threshold Crossing):
動態基線(移動平均)
過零點偵測(低→高)
心跳間隔 → BPM
平滑濾波(Low-pass)
2 秒內即可得到穩定心跳
5️⃣ LEDController 依 BPM 顯示狀態:
60–80 → 綠燈(正常)
其他 → 紅燈(異常)
6️⃣ OledDisplay 顯示:
心跳動畫(兩張 bitmap 切換)
BPM 數值
GPS 資訊
手指提示畫面 🚀 安裝方式
- 安裝 Arduino Library 請安裝以下套件:
Library 用途 TinyGPSPlus GPS 解析 PubSubClient MQTT Adafruit SSD1306 OLED Adafruit GFX OLED 基礎繪圖 SparkFun MAX3010x MAX30102 心跳感測
🔌 硬體接線 MAX30102 SDA → GPIO 21
SCL → GPIO 22
GPS(NEO-6M) TX → GPIO 16
RX → GPIO 17
RGB LED R → GPIO 25
G → GPIO 26
B → GPIO 27
🧪 運作流程 開機 → 初始化所有模組
WiFi 連線
GPS 開始解析座標
MAX30102 開始讀取 IR 波形
心跳演算法計算 BPM
OLED 顯示動畫與 BPM
LED 顯示狀態
每 2 秒上傳 MQTT JSON 🌐 MQTT 訂閱方式 使用 MQTTX / Node-RED / Mosquitto: Topic: pet/sensor/all 收到資料範例: 🧱 模組化優勢 ✔ 乾淨、可維護 ✔ 每個功能獨立 ✔ 方便擴充(BLE、雲端 API、資料記錄) ✔ 適合課程、專題、實驗室使用