close

Bluetooth 4.0 最主要的特性是為了省電,在極低的待機功耗下可以使用一顆鈕扣電池達數年工作。Bluetooth 4.0定義了三種模式,「低功率藍芽」:不需佔用太多頻寬的裝置連線為主、經典藍牙」:訊息溝通、裝置連線為重點高速藍牙」:資料交換與傳輸

 


iBeacon技術是Apple公司在2013年WWDC發表的室內微定位技術,使用低功率藍芽技術(Bluetooth Low Energy),當行動裝置進入該區域時,相應的app程式就可以利用這個找出使用者所在位置。蘋果指出在iPhone4S和第三代iPad就開始內置低功耗藍牙,因此每一部新的iPhone和iPad都能成為ibeacon的接收器和發射器。
 


實驗準備環境
       Raspberry Pi  -> B (第2代)
       Raspbian OS  ->這邊用 Raspbian jissie lite
       Kingston 16G記憶卡
      USB 藍芽接收器Bluetooth 4.0 (一定要確認有BLE功能!!)


實驗步驟

1.安裝好相關套件
$ sudo apt-get update
$ sudo apt-get install libusb-dev
$ sudo apt-get install libdbus-1-dev
$ sudo apt-get install libglib2.0-dev --fix-missing
$ sudo apt-get install libudev-dev
$ sudo apt-get install libical-dev
$ sudo apt-get install libreadline-dev
 
 
2.下載BlueZ原始碼,本文使用bluez-5.18.tar.gz
 
 
3.解壓縮下載的檔案
$ sudo gunzip bluez-5.18.tar.gz
$ sudo tar xvf bluez-5.18.tar
 
 
4.準備編譯原始碼並安裝
$ cd bluez-5.18
$ sudo ./configure --disable-systemd
$ sudo make (下完這個指令後,要等一段時間了~~)
$ sudo make install
 
 
5.起動藍芽
$ sudo hciconfig hci0 up
 
 
6.將藍牙設定成Non Connectable Advertising 模式
$ sudo hciconfig hci0 leadv 3
 
 
7.取消藍牙掃描的功能(只能被讀取的意思)
$ sudo hciconfig hci0 noscan
 
 
8.再來可以用下面指令測試HCI CommandHCI Event有沒有數據
$ sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 E2 C5 6D B5 DF FB 48 D2 B0 60 D0 F5 A7 10 96 E0 00 01 00 02 C8 00
 
 
UUID  :唯一的識別碼
Major  較大的分類編碼 (0x0000 ~ 0xFFFF)
Minor  次要的分類編號  (0x0000 ~ 0xFFFF)
Measured Power 是發射端與接收端一公尺時的參考值
 
 
 
 
 
開機自動啟動:
 
新增目錄放置iBeacon相關檔案
$ mkdir /home/pi/ibeacon.conf
 
建立ibeacon參數
 
內容↓
 
xport BLE_DEVICE=hci0
export UUID="12 34 56 78 90 12 34 56 78 90 12 34 56 78 90 12"
export MAJOR="00 01"
export MINOR="00 02"
export POWER="c8"
 
 
 
 
建立起動腳本
Sudo nano /home/pi/ibeacon/start
 
內容↓
 
#!/bin/sh
. ./ibeacon.conf
echo
echo "Enable iBeacon singal Advertising ..."
sudo hciconfig $BLE_DEVICE up
sudo hciconfig $BLE_DEVICE noleadv
sudo hciconfig $BLE_DEVICE noscan
sudo hciconfig $BLE_DEVICE leadv
sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 $UUID $MAJOR $MINOR $POWER 00
echo "Complete"
 
 
 
 
建立停止腳本
$ Sudo nano /home/pi/ibeacon/stop
 
內容↓
 
#!/bin/sh
. ./ibeacon.conf
echo
echo "Disable iBeacon Advertising ..."
sudo hciconfig $BLE_DEVICE noleadv
echo "Complete"
 
 
 
 
 
加入執行權限
sudo chmod +x /home/pi/ibeacon/start /home/pi/ibeacon/stop
 
建立服務設定檔
Sudo nano /etc/init.d/ibeacon
 
內容↓
 
#!/bin/bash
 
### BEGIN INIT INFO
# Provides:             ibeacon
# Required-Start:       $local_fs $syslog
# Required-Stop:        $local_fs $syslog
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    iBeacon Emmiter
### END INIT INFO
 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:$PATH
 
DESC="iBeacon Service"
PIDFILE=/var/run/ibeacon.pid
SCRIPTNAME=/etc/init.d/ibeacon
 
case "$1" in
start)
        printf "%-50s" "Starting ibeacon..."
        cd /home/pi/ibeacon
        ./start
;;
stop)
        printf "%-50s" "Stopping ibeacon..."
        cd /home/pi/ibeacon
        ./stop
;;
restart)
        $0 stop
        $0 start
;;
*)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac
 
 
加入「執行」權限
$ sudo chmod +x /etc/init.d/ibeacon
 
開機時啟動 iBeacon服務
$ sudo update-rc.d ibeacon defaults
 
啟動服務
$ sudo service ibeacon restart
 
 

iBeacon 實際測試:

iPhone/iPad推薦使用 -> Locate Beacon
Android推薦使用 -> Locate Beacon

這邊以ios系統實測,安裝完App以後將程式與藍牙開啟
 
 

 

並且確認 隱私權 -> 定位服務 -> Locate 定位服務是否有開啟


 

點選 No iBeacons visible with configured UUIDs.

 

點選+,加入UUID

 

填選在ibeacon.conf內填入的UUID="12 34 56 78 90 12 34 56 78 90 12 34 56 78 90 12"

 

儲存後將會看到ibeacon.conf設的UUID iBeacon 

 

點選偵測到的iBeacon可以看到UUID、RSSI、 Distance 等資訊

 

 



圖片來源:
http://www.aislelabs.com/reports/ibeacon-battery-phones/ 

參考來源:
http://cheng-min-i-taiwan.blogspot.tw/2015/03/raspberry-pi-40ibeacon.html
http://ibeacon.com.hk/ibeacon_data_structure_uuid_id_postix/
http://bupojung.github.io/blog/2015/12/04/ibeaconyuan-li-he-ying-yong/

arrow
arrow
    文章標籤
    iBeacon apple raspberrypi
    全站熱搜
    創作者介紹
    創作者 Jie 的頭像
    Jie

    腦袋的外接硬碟

    Jie 發表在 痞客邦 留言(0) 人氣()