我的ESP32實做書籍:https://youyouyou.pixnet.net/blog/post/121105860
博客來網址:https://www.books.com.tw/products/0010901195


請注意:1.本篇"程式碼"部份已經過時,請勿再使用,但理論及應用部份可以參考。

2. Beacon相關設定可以參考本篇:常見ibeacon規格與python 程式碼

Beacon (iBeacon)大概最近幾年流行起來,主要是apple公司在推,用來做室內定位的,有人會問apple為什麼要推這東西(其實沒有人問)

「ibeacon」的圖片搜尋結果

主要是因為apple想掌控所有人的行蹤當作行為資料分析用途(apple或google都一樣),這些公司會利用手機去分析人類的行為,例如利用GPS掌控你的所有行蹤了解你的生活方式,以利廣告能夠更精準的推撥到你身上,但是呢他們發現主要的交易行為在室內發生,但是一旦人走入室內(例如百貨公司,美食街...等),他們卻反而失去GPS信號無法判斷你的位置,也就難以抓到相關的消費行為資料,因此想到一個方法,就是在室內推藍芽基站,就可以在室內獲取你的行蹤,當然也可以透過藍芽來推撥廣告訊息,而要達成這個目的,beacon就這樣誕生。

所以說,beacon就是藍芽發射器Bluetooth,不停得對所有裝置廣播訊息,手機上的APP或裝置接收到這個訊息就會做出對應的功能,例如跳出廣告或者紀錄位置等。

也就是說,從此以後,室內室外,你都無所遁形,你的行為完全被掌控了。不過我是沒差啦,反正無名小卒

圖片1.jpg

Beacon在商業上的角色定位:偵測使用者位置,並給予廣告

 

今天要介紹如何利用Arduino ESP32來擷取beacon訊號,並做「簡易」定位判斷。以下簡要說明步驟

一、Beacon簡要說明與設定
二、ESP32簡要說明
三、ESP32 Beacon範例程式檔
四、RSSI簡易定位


一、Beacon簡要說明與設定

首先你需要至少一個beacon,一個ESP32,一台安裝Arduino IDE的PC或MAC

1.Beacon:我是用NRF51822這顆,其實他跟另外一個TI出的CC2541的規格差不多,選哪一種都可以,價格比起其他的品牌來說是超便宜的,電池CR2032的部份大約可以用1-2個月,沒廣告說的那麼誇張,可以半年一年(也許發送頻率10秒一次才可能有機會)
露天搜尋:https://goo.gl/1rekrZ

 

 
beacon內部結構  

 

這顆Beacon可以透過APP改內部資料,包括Name、UUID、MAJOR、MINOR以及廣播頻率(預設1秒1次廣播)

2.ESP32我則是使用NodeMCU-32s,ESP32內建WIFI及藍芽,非常適合用來做Beacon應用,UNO沒有藍芽也沒有WIFI需要外加,ESP8266有WIFI可惜沒有藍芽,都要外加HC-05藍芽模組,因此我強烈推薦使用ESP32。
露天搜尋:https://goo.gl/JCyV8i

二、ESP32簡要說明:Arduino IDE的安裝,則參考這篇,不再贅述。ESP32 Arduino開發環境架設(取代Arduino UNO及ESP8266首選)

三、範例程式:

  1. 首先在github下載ESP32的Beacon Library:https://github.com/nkolban/ESP32_BLE_Arduino,下載後,請將資料夾放置到ESP32專用Library,位置:d:\arduino-1.8.5\hardware\espressif\esp32\libraries
  2. 下載範例程式
  3. 執行後,附近的藍芽裝置將會被掃描並列出
  4. 修改掃描時間:在程式第11行 int scanTime=5; 代表每次掃描時間,規定不可小於1秒,但時間不可太短,例如1秒會漏掉很多beacon沒掃到,個人建議5-10秒,太長則損失了即時性。
  5. 增加自己要的功能:在56、57、58行,則可以加入自己要做的工作,例如當beacon UUID(或Address)已經掃描到,且RSSI夠大時,例如>-50,則做出反應,包括可能發出聲音,開門(轉動伺服馬達),或者LED顯示促銷商品資訊等,這部份就看您自己想做什麼了。
  6. 例如:當beacon訊號夠大時,則利用伺服馬達打開門栓(好簡陋啊....)

四、RSSI簡易定位

關於RSSI與距離之間的關係,我大致列表如下圖,此圖為我自己做的測試,與其他品牌、主版、環境都可能會有不同,因此僅提供參考,裡面重要的是1m內大於-60比較穩定外,超出1m他的range就很大,難作為精確定位,但如您需要的是大致的定位功能,則使用上還滿簡單的。

例如:

  • 自動寵物飼料機:可在自己寵物靠近時給予飼料,別人的寵物靠近時,則不動作
  • 小孩防丟器:小孩距離超過太遠時,則發出警報
  • 商品推薦:當使用者靠近某商品時,發出該商品的促銷訊息

這裡有一段朋友的測試影片,利用ESP32偵測beacon距離,並依據距離發出不同頻率的聲音。

arrow
arrow
    創作者介紹
    創作者 夜市 小霸王 的頭像
    夜市 小霸王

    夜市小霸王

    夜市 小霸王 發表在 痞客邦 留言(7) 人氣()