一個結合 IoT 智慧手錶、後端 API 與前端管理介面的長照(Elder Care)專案範例。
本專案包含三個主要部分:
watch:韌體與硬體相關程式(基於 PlatformIO / Arduino / ESP32)server:Node/TypeScript 後端 API(Express + TypeScript)frontend:Nuxt 3 前端介面(Vue 3 + TailwindCSS)
以下 README 已合併專案說明、目的、功能清單、快速上手與實作細節(中文)。
台灣老年化的趨勢越來越明顯,老人的長照問題是不能忽略的,儘管政府努力的想辦法增加照護人員,但還是有很多的獨居老人無法及時獲得照護和協助,本項目以老人的照護為主軸,嘗試開發更為簡易的協助設備,使政府可以減少是更多的人力來照護。
很多時候家中長者都死於心臟、跌倒等問題,如何及早發現是一個很大的問題。
本項目想要完成以下的目的
- 時時監測長者的身體狀況,包含心跳/體溫等等
- 監測長者是否發生跌倒等意外情況
- 監測長者家中的環境使否安全(包含溫溼度/空氣品質/有害氣監測等)
- 提供長者可一鍵通知他人的緊急按鈕
- 連結家中其它的設備,提供更全面的保護(如電路系統、固定式緊急按鈕、血氧機等)
以下為本專案計畫實作或規劃的重要功能,分為「裝置端(watch)」、「後端(server)」、「前端(dashboard)」與「整合/運維」四大面向:
-
裝置端(手錶 / IoT 裝置)
- 即時生理監測:持續量測心跳(HR)、心率變異(HRV, 若可)、體溫(或皮溫)、步數等數值。
- 跌倒偵測:使用三軸加速度計(ADXL345)分析突發加速度與角度變化,自動判定可能跌倒並觸發警報上報。
- 緊急求救(SOS):硬體按鍵或螢幕按鈕一鍵發送 SOS,含使用者 ID、裝置 ID 與當下狀態上報至 server。 長者照護整合專案(Elder Care App)
一個包含穿戴裝置韌體(ESP32 / PlatformIO)、後端(Node.js + TypeScript)與前端(Nuxt 3 / Vue)三層的長者照護原型專案。
本檔以中文說明專案結構、快速啟動、目前功能實作狀態(已實作 / 部分 / 未實作)與開發者注意事項,方便團隊協作與後續開發。
- 專案概觀
- 系統組成(watch / server / frontend)
- 快速啟動(使用 yarn)
- 功能狀態(已實作 / 部分 / 未實作)
- 開發說明與重要檔案位置
- 建議的下一步
此專案示範一條從穿戴裝置到雲端與前端的「感測 → 上報 → 存放 → 即時推播」流程。穿戴裝置(watch)負責量測心率、加速度(跌倒 / 計步)、並透過 Wi‑Fi 回報 warn 訊息;伺服器接收裝置上報並把警示資料存入 device model,且透過 WebSocket 廣播 warn 事件給前端及第三方通知(如 LINE)。
技術棧:
- watch:PlatformIO / Arduino (ESP32)、C++
- server:Node.js + TypeScript、Express 等
- frontend:Nuxt 3 (Vue 3)、Tailwind
- 根目錄
watch/: 裝置韌體(PlatformIO 專案)src/、lib/、include/等
server/: 後端伺服器(TypeScript)src/router/api/devices.ts:處理裝置上傳資料與 warn 邏輯src/index.ts:WebSocket 廣播warn事件src/models/device.ts:device schema 與warn欄位
frontend/: Nuxt 前端專案(展示與警示 UI)
請在各子專案目錄下執行:
- 後端(server)
cd d:\codes\fork\Elder-Care-App\server yarn install yarn dev
- 前端(frontend)
cd d:\codes\fork\Elder-Care-App\frontend yarn install yarn dev
- 裝置韌體(watch)
- 使用 PlatformIO / VSCode 開啟
watch專案,連上開發板並上傳。 - 若要在真機上測試 Wi‑Fi 與伺服器互動,請先確保 server 可供裝置存取(例如在同一網段,或使用 ngrok / 內網穿透)。
備註:本專案以
yarn作為建置/啟動範例,請在需要時改成對應系統的容器或 Docker Compose 指令。
已實作(有程式碼與呼叫流程):
- 心率量測 (Pulse / BPM):Implemented
- 證據:
watch/lib/PulseSensor/*、watch/src/main.cpp(PulseSensor 實例與 BPM 計算)。
- 證據:
- 跌倒偵測 (Fall Detection):Implemented
- 證據:
watch/lib/FallDetection/*、watch/src/main.cpp(fallDetection.loop(...) 與 handler 呼 postJson warn)。
- 證據:
- 計步 (Step Count):Implemented
- 證據:
watch/lib/StepCount/*與watch/src/main.cpp的 step.loop(...)。
- 證據:
- Wi‑Fi / 設定門戶 / SPIFFS 設定:Implemented
- 證據:
watch/src/network.cpp(AP/STA、scan、SPIFFS 讀寫、config portal)。
- 證據:
- NTP 同步:Implemented(自動同步)
- 證據:
watch/src/network.cpp中autoUpdateNTP(),main.cpp 呼叫。
- 證據:
- 裝置上報 warn → 伺服器處理:Implemented
- 證據:
server/src/router/api/devices.ts(處理 warn: heartbeat/temp/fall/env 並寫入 device.warn),server/src/models/device.ts。
- 證據:
- 即時推播 warn(WebSocket 廣播):Implemented
- 證據:
server/src/index.ts(對外 WebSocket,emit 'warn' 並傳送 JSON{ event: 'warn', data: ... })。
- 證據:
- LINE 通知整合(程式碼位):Implemented(有整合呼叫)
- 證據:
server/src/index.ts(包含呼叫 LINE notify 的程式片段)。
- 證據:
部分實作 / 需要驗證(程式碼存在但需執行驗證或 UI 優化):
- 前端即時 UI 與警示顯示:Partial
- 證據:
frontend/type.ts、frontend/stores/alarmMap.ts、多個 pages/components 存在,但未在本次檢視中進行 runtime 驗證。需要啟動前端並透過 WebSocket 測試告警流程以確認 UX。
- 證據:
- 多人/群組管理、進階使用者介面:Partial
- 證據:server 有 users model 與 users router、frontend 有 users page,但完整的群組管理流程與權限未驗證或尚未完整 UI。
未實作 / 未發現明確實作證據:
- 真正的 OTA 韌體更新完整流程(watch 從 server 下載並驗證、更新):Not Implemented
- 原因:雖然
.vscode/settings.json與 platformio/esp32 include path 有關 OTA 的 header 路徑,但在 watch 原始碼內尚未看到明確從 server 下載並啟動更新的端到端流程。 - 建議:若要支援 OTA,需要在 watch 端實作 HTTPS 更新 (esp_https_ota 或 Update library),並在 server 端提供已簽名/版本化的固件資源。
- 原因:雖然
- SMS / 電話(語音)通知整合:Not Implemented
- 目前只看到 LINE notify 的程式碼片段;無 SMS / 電話 API(如 Twilio)整合程式碼。
- 進階生理訊號分析 (HRV、偽陽性濾除):Not Implemented
- PulseSensor 提供 BPM,但沒有 HRV 分析或伺服器端的長期健康分析管線。
- 健康報表 / 長期行為分析引擎:Not Implemented
-
Watch(韌體)
watch/src/main.cpp— 程式入口,整合 pulse、step、fall 的 loop,並呼叫postJson發送 warn。watch/src/network.cpp— Wi‑Fi 管理、config portal、NTP 更新等。watch/lib/PulseSensor/*,watch/lib/FallDetection/*,watch/lib/StepCount/*— 感測邏輯與處理。
-
Server(後端)
server/src/router/api/devices.ts— 裝置上報處理、warn 資料儲存、context.emit('warn', ...)server/src/index.ts— WebSocket 與對外推播、通知整合點server/src/models/device.ts— device schema(含 warn 欄位)
-
Frontend(前端)
frontend/type.ts— 型別定義(Device / IDeviceWatch / IDeviceEnv)frontend/stores/alarmMap.ts— 警示狀態管理frontend/pages/frontend/components— UI 與頁面
最後更新時間:2025-11-03 以上 README.md 為電腦生成。



