使用開源套件:https://github.com/nettlep/gobbledegook
相關套件安裝教學:https://b8807053.pixnet.net/blog/post/347553287-updating-bluez-on-raspberry-pi-%285.48%29
dbus權限設定教學:https://stackoverflow.com/questions/43085699/update-dbus-on-raspberry-pi
提供TCP/IP socket服務,可直接由其他程序存取本地藍芽讀寫,詳請參閱ble-gatt-server_socket.cpp
- 安裝相關套件:
sudo apt-get update
sudo apt-get install libglib2.0-dev
sudo apt-get install libudev-dev
sudo apt-get install libical-dev
sudo apt-get install libreadline-dev
sudo apt-get install libbluetooth-dev
- 啟用D-Bus權限
先在pi目錄中建立以下檔案(作為dbus權限設定檔)
檔案名稱:gobbledegook.conf
檔案內容:
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<policy user="root">
<allow own="com.gobbledegook"/>
<allow send_destination="com.gobbledegook"/>
<allow send_destination="org.bluez"/>
</policy>
<policy at_console="true">
<allow own="com.gobbledegook"/>
<allow send_destination="com.gobbledegook"/>
<allow send_destination="org.bluez"/>
</policy>
<policy context="default">
<deny send_destination="com.gobbledegook"/>
</policy>
</busconfig>
com.gobbledegook為套件預設(standalone.cpp)的權限名稱
如果編譯使用ble-gatt-server.cpp須將com.gobbledegook改為com.raspberry_ggk_ble
只要有更新權限檔內容的動作,都須執行以下的Step.2相關步驟,以刷新權限
Step.2-1 將pi目錄中的gobbledegook.conf放至/etc/dbus-1/system.d中
sudo cp gobbledegook.conf /etc/dbus-1/system.d/
Step.2-2 更新dbus設定 (過程中可能會重開機,出現錯誤是正常的,需記得上次執行到哪步,接著做就可以)
sudo systemctl stop dbus
sudo systemctl daemon-reload
sudo systemctl start dbus
- 啟用藍芽
sudo btmgmt -i 0 power off
sudo btmgmt -i 0 le on
sudo btmgmt -i 0 connectable on
sudo btmgmt -i 0 advertising on
sudo btmgmt -i 0 power on
- 建立及啟動範例程式
cd 至該套件包存放位置(需自行解壓縮)
順利即啟動一個BLE server(如果無法啟動,可能是dbus權限沒設定好,請檢查權限檔)
例如:cd gatt-server-master(放置於pi目錄下)
./configure && make
sudo src/standalone -d
請參照"安裝與設定",先安裝相關套件,並測試套件是否能運行(standalone)
-
壓縮檔解壓縮 -> 出現ble-gatt-server資料夾
-
終端機進入ble-gatt-server資料夾內
-
將ble-gatt-server中的gobbledegook.conf放至/etc/dbus-1/system.d中 sudo cp gobbledegook.conf /etc/dbus-1/system.d/
-
參考安裝與設定,刷新D-Bus權限
-
重啟完畢後,到ble-gatt-server資料夾內編譯
g++ -o bleServer ble-gatt-server.cpp libggk.a -lgobject-2.0 -lgio-2.0 -lglib-2.0 -lpthread
- 執行
sudo ./bleServer
- 先到gatt-server套件的目錄中,輸入指令:
./configure
-
更新Server的服務參數
直接修改"套件目錄/src/Server.cpp"中的內容即可
修改完畢後,回到套件目錄
生成libggk.a (只在更新BLE Server設定時才需使用)
例如:cd gatt-server-master(放置於pi目錄下)
語法:make
順利即生成新的libggk.a檔案 -
編寫及編譯(自己的程式碼)
原始碼編寫可參考套件中的standalone.cpp
原始碼標頭需引入"套件目錄/include/Gobbledegook.h"這份檔案
Setter是ble的接收器
Getter是ble的發送器
Notify透過UART送資料請用此特性
ggkNofifyUpdatedCharacteristic("/com/gobbledegook/服務名稱/特性名稱");
編譯語法:
g++ -o [輸出檔名] [原始碼檔名.cpp] libggk.a -lgobject-2.0 -lgio-2.0 -lglib-2.0 -lpthread
"套件目錄/src/libggk.a" 需放置到自行撰寫的原始碼同個目錄中,或是編譯時指定libggk.a的檔案路徑
- 執行語法(需要加上sudo,因為有用到D-Bus權限):
sudo ./輸出檔名