2015-12-20 36 views
3

我正嘗試使用bluez的gattool寫入BLE自定義板上的某些演示特徵。具體而言,我希望寫出一個特點,並將價值讀回來。下面是我在做什麼(其中0x25爲特徵的手柄):GATT工具無法讀取/寫入特徵

bluepy$ gatttool -b EC:24:B8:23:1C:39 -I 
[ ][EC:24:B8:23:1C:39][LE]> connect 
[CON][EC:24:B8:23:1C:39][LE]> char-read-hnd 0x0025 
[CON][EC:24:B8:23:1C:39][LE]> Characteristic value/descriptor: 01 
[CON][EC:24:B8:23:1C:39][LE]> char-write-cmd 0x25 0x02 
[CON][EC:24:B8:23:1C:39][LE]> char-read-hnd 0x0025 
[CON][EC:24:B8:23:1C:39][LE]> Characteristic value/descriptor: 00 

有誰知道爲什麼看了特徵值是00,而不是02(的char-write-cmd秒參數)?

任何幫助將不勝感激。

+0

'gatttool'非常挑剔。嘗試'char-write-cmd 0x25 02'來代替(也就是說,值中沒有'0x')。 – kaylum

+1

我會避免使用'gatttool',因爲我從來沒有很好的體驗過它。試試'bluetoothctl'或者'btgatt-client',看看你是否發現對你更好。另外請注意描述符與值不同。 – Zimano

+0

檢查你是否有寫權限,並且char-write-cmd沒有任何響應,所以char-write-req更好;如果你沒有權限,它會提示錯誤 – Jagdish

回答

3

儘管存在BLE的規則和標準,但底層設備可以簡單地忽略這些規則並執行自己的操作。因此,它可能會將該屬性列爲讀寫並顯示爲接受新值,但只是刪除值。它不應該這樣做,但沒有理由不能。

但是,你應該確保它實際上發送正確的數據,並且問題與設備有關......正如評論gatttool中提到的可能會與解釋輸入有點混亂(新版本比舊版本更好),所以請嘗試022而不是0x02。您也可以嘗試使用btmon來檢查gatttool是否實際發送了您打算的值。

+0

'hcidump'也是一個非常過時的工具,不再維護!嘗試'btmon' :) – Zimano

+0

@Zimano編輯。 –

+0

太棒了!看起來不錯,可靠的答案! – Zimano