Skip to content

negionion/Raspbian_BLE

Repository files navigation

Raspbian BLE

使用開源套件: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

安裝與設定

  1. 安裝相關套件:
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
  1. 啟用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
  1. 啟用藍芽
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
  1. 建立及啟動範例程式 cd 至該套件包存放位置(需自行解壓縮)
    順利即啟動一個BLE server(如果無法啟動,可能是dbus權限沒設定好,請檢查權限檔)
    例如:cd gatt-server-master(放置於pi目錄下)
./configure && make
sudo src/standalone -d

快速使用

請參照"安裝與設定",先安裝相關套件,並測試套件是否能運行(standalone)

  1. 壓縮檔解壓縮 -> 出現ble-gatt-server資料夾

  2. 終端機進入ble-gatt-server資料夾內

  3. 將ble-gatt-server中的gobbledegook.conf放至/etc/dbus-1/system.d中 sudo cp gobbledegook.conf /etc/dbus-1/system.d/

  4. 參考安裝與設定,刷新D-Bus權限

  5. 重啟完畢後,到ble-gatt-server資料夾內編譯

g++ -o bleServer ble-gatt-server.cpp libggk.a -lgobject-2.0 -lgio-2.0 -lglib-2.0 -lpthread
  1. 執行
sudo ./bleServer

原始碼撰寫與編譯

  1. 先到gatt-server套件的目錄中,輸入指令:
./configure
  1. 更新Server的服務參數
    直接修改"套件目錄/src/Server.cpp"中的內容即可
    修改完畢後,回到套件目錄
    生成libggk.a (只在更新BLE Server設定時才需使用)
    例如:cd gatt-server-master(放置於pi目錄下)
    語法:make
    順利即生成新的libggk.a檔案

  2. 編寫及編譯(自己的程式碼)
    原始碼編寫可參考套件中的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的檔案路徑

  1. 執行語法(需要加上sudo,因為有用到D-Bus權限):
sudo ./輸出檔名

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published