分類: 樹莓派物聯網

樹莓派 Raspberry Pi 以 Eddystone 傳送 URL:打造實體網頁 Physical Web

這裡介紹如何以樹莓派開發版與低功耗藍牙的 Beacon 傳輸技術,依循 Eddystone 通訊協定,開發實體網頁的應用。

由 Google 所推出的 Eddystone 低功耗藍牙傳輸格式,支援多種訊框型態,可因應不同的情境傳送不同的資料,同時也加入版本管理的功能,以適應未來新功能的加入。


Eddystone 以 Apache 2.0 的方式授權,公佈於 GitHub 網站上,任何人都可以自由使用或改進,關於 Eddystone 的簡介可以參考 iThome 的文章

以下我們以第三代的樹莓派為測試環境,示範如何自己用樹莓派打造一個 Beacon 訊號發射器,以 Eddystone 格式傳送一串網址給行動裝置,實現實體網頁(physical web)的實例應用。

準備工作

要用樹莓派發送 Eddystone 的 Beacon 訊號,跟發送 iBeacon 訊號的實做方式差不多,首先要把 BlueZ 安裝好,安裝的步驟請參考樹莓派 Raspberry Pi 實作 iBeacon 發射器這篇文章。

建立 Eddystone 格式的網址 URL 訊框

在使用 Beacon 發送 Eddystone 格式的網址之前,我們要先依照自己的網址建立一個符合 Eddystone 格式的訊框(frame),其格式可參考 Eddystone-URL 官方的標準

這裡我以 G. T. Wang 部落格的網址 https://blog.gtwang.org/ 這個網址為例,建立一個 Eddystone 格式的訊框。
首先來處理網址的部份,將網址的文字以 ASCII 表的十六進位數值表示,有些網址中的特殊字串可以使用 Eddystone 格式所提供的代碼表示,轉換之後變成這個表:

值(十六進位) 說明
03 https://
62 6C 6F 67 blog
2E .
67 74 77 61 6E 67 gtwang
01 .org/

接著再依照 Eddystone Protocol Specification 組成完整的訊框資料:

值(十六進位) 說明
1a 資料長度(要自行計算)
02 01 06 Adv. Flags(固定值)
03 03 aa fe (固定值)
12 資料長度(要自行計算)
16 aa fe 10 (固定值)
00 傳送訊號的強度(要自行處理過)
03 62 6C 6F 67 2E 67 74 77 61 6E 67 01 網址
00 00 00 00 00 空白

在建立訊框時,可參考 mbed 的圖表,會比較容易了解:

Eddystone 訊框格式

發送 Eddystone 的 Beacon 訊號

建立好 Eddystone 訊框資料之後,再啟用藍牙的低耗能廣告(LE advertising)模式,並關閉掃描功能:

sudo hciconfig hci0 leadv 3
sudo hciconfig hci0 noscan

接著使用 hcitool 設定要發送的訊框資料:

sudo hcitool -i hci0 cmd 0x08 0x0008 1a 02 01 06 03 03 aa fe 12 16 aa fe 10 00 03 62 6C 6F 67 2E 67 74 77 61 6E 67 01 00 00 00 00 00

基本上發送 Eddystone 格式的 Beacon 訊號與發送 iBeacon 訊號的作法都相同,只是訊框的格式不同而已,所以指令都差不多。

這是使用 Android 手機的 Beacon Scanner App 來檢查 Beacon 訊號的畫面:

Beacon Scanner App

市面上目前也有許多針對 Beacon 實體網頁應用的手機 App 可以使用,開啟這類的 App 時,只要手持裝置與 Beacon 發射器之間的距離夠近,就會自動顯示 Eddystone 訊框中所附帶的網頁。

實體網頁應用手機 App

自動化工具

Eddystone-URL Beacon Implementations 中有許多已經實作好的自動化工具,可以讓使用者不需要自行手動建立訊框。

我以 Linux 上的 BlueZ 為例,示範一次該如何使用這類的工具。

這個實作版本需要使用 BlueZ,不過我們在一開始就安裝好了,所以只要下載 advertise-url 這個 Python 的指令稿就可以直接使用了。

sudo ./advertise-url -u http://blog.gtwang.org/
Advertising: http://blog.gtwang.org/

只要一行指令即可,相當簡潔。若要停止發送含有 URL 的 Beacon 訊號,可執行:

sudo ./advertise-url -s
Stopping advertising

參考資料:WebGazer.orgIT 技術家壞蛋的密室CHRIS MEIER

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Share
Published by
G. T. Wang

Recent Posts

光陽 KYMCO GP 125 機車接電發動、更換電瓶記錄

本篇記錄我的光陽 KYMCO ...

2 年 ago

[開箱] YubiKey 5C NFC 實體金鑰

本篇是 YubiKey 5C ...

2 年 ago

[DIY] 自製竹火把

本篇記錄我拿竹子加上過期的苦茶...

3 年 ago