前幾天(2021/05/15)一大早就聽到老婆在鬼叫鬼叫,原來是確診人數竟然有180,實在太令人害怕了,不過記者會現場介紹了一個APP「台灣社交距離APP」,說可以紀錄「人與人的連接」,我仔細看了一下這個APP的介紹,發現這個構想我以前也想過,但是沒空動手做,反正做了也沒人理我,不過這個原理就是我一直在研究的BLE Beacon,我認為這個APP應該就是利用手機同時模擬Beacon Central(中央)及Peripheral(週邊),也就是手機會廣播自己的藍芽裝置,並同時掃描附近的藍芽裝置,利用RSSI與TX來計算大概距離,這個機制我經常在使用,有些人會害怕個資外洩,但我覺得不會,主要是因為紀錄的是「去識別化」的代號,另外也去中心化,沒有中央伺服器,所以也不會因為使用者太多而導致當機之類。
註:關於Beacon原理可以參閱筆者的以前的文章:ESP32 Arduino Beacon簡易Bluetooth室內定位
為了驗證APP是採用Beacon廣播模式,我利用老婆與妮妮的手機進行測試,當安裝好APP後,開啟藍芽我就可以馬上偵測到一個新的Beacon裝置,開啟該裝置後,查看基本資訊如下圖:
檢查多隻手機後確認,「台灣社交距離APP」使用的UUID應該是「0000fd6f-0000-1000-8000-00805f9b34fb」,沒有Name,而且發現Mac Address會一直變,以往如果我要用Beacon偵測使用者是誰的時候用的就是Mac Address(可以參閱:我那狗子在家嗎?),不過這次APP每次開關藍芽都會變更Mac,我想應該是為了保護使用者不會被我們這種每天想圖謀不軌的人監測,能夠想到這個問題要幫開發者按個讚。
也因為這樣,我們就沒辦法利用這個APP辨識個人嘍,不過呢?我們還是可以算現場人數,計算人數的程式可以寫在ESP32中,不過總不能透過Serial來查看人數吧。我們總是需要一個圖表可以呈現給管理者查看,可以使用的方案有兩個:
1.Nodered+MQTT:這個我還沒製作教學,目前只有PPT講義
2.ThingSpeak:可以參考ThingSpeak教學:ESP32 資料庫存取ThingSpeak圖表製作
由於第1個方法較為複雜,一天寫不完,所以這個範例就利用ESP32及ThingSpeak來計算人數,並且當使用者人數超過範圍時發出Line通知。
1. 開發平台
關於ESP32開發平台可以參考本篇:ESP32 Arduino開發環境架設(取代Arduino UNO及ESP8266首選)
假設讀者們已經完成Arduino ESP32的開發平台設定,這裡要注意的是ESP32核心目前最新版是1.0.6,而我比較習慣的是1.0.4,這兩個版本在Beacon Scan的差異是1.0.6會重複掃描同一個裝置,而1.0.4則是同一個裝置只會紀錄一次,使用1.0.4的好處是我們就不用自己篩選,但是我覺得像1.0.6這樣重複掃描應該是ESP32核心未來的常態,所以這次我就使用1.0.6的重複掃描的方式來修改程式。
2. 程式撰寫
本次我使用的是AI-Thinker的NodeMCU ESP32,對於本次任務還是很容易的,小事情還用不到RPi出馬。程式流程如下:
只需不到短短一分鐘...
輸入您的信箱與ID註冊即可享有一切福利!
會員福利
免費電子報
會員搶先看
主題訂閱
好文收藏