查看完整版本: BLE GATT協定 RSC 抓資料問題
頁: [1]

ss820920 發表於 2015-10-18 04:00 PM

BLE GATT協定 RSC 抓資料問題

哈囉 大大們 我有個有關rsc抓資料的問題
我是使用 cordova開發平台 但跟其他平台應該是沒有差別
我想要抓到rsc的即時速度資料
我有先傳資料給descriptor讓她開始送資料

然後使用notification讀取資料,我讀array裡第一個byte 一個長度的資料
使用new Uint8Array( buffer, byteOffset, length); 來選擇byte 跟長度

然後將讀取出來的資料進行char to int的轉換

可是讀出的數字都是固定的幾個 例如 0 96 112 等等
以零為大部分的顯示

想請問是否有地方miss掉了

謝謝大大們



...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

chevylin0802 發表於 2015-10-19 06:56 AM

本帖最後由 chevylin0802 於 2015-10-19 06:57 AM 編輯

Notification是需要透過callback方式去讀到資料
前面的應該都正確
但是我不知道你如何讀資料

ss820920 發表於 2015-10-19 04:47 PM

chevylin0802 發表於 2015-10-19 06:56 AM static/image/common/back.gif
Notification是需要透過callback方式去讀到資料
前面的應該都正確
但是我不知道你如何讀資料


大大
所以rsc的即時資料我的byte選擇跟長度是對的嗎??
我的notification是寫在callback裡面沒錯
麻煩大大了
謝謝

chevylin0802 發表於 2015-10-19 05:23 PM

本帖最後由 chevylin0802 於 2015-10-20 12:17 PM 編輯

ss820920 發表於 2015-10-19 04:47 PM static/image/common/back.gif
大大
所以rsc的即時資料我的byte選擇跟長度是對的嗎??
我的notification是寫在callback裡面沒錯


https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.rsc_measurement.xml

理論上應該是解這一個characteristic才對
而格式就是以這篇為主

我自己解過
而且也試過用Node.js寫過
是沒有問題的
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

ss820920 發表於 2015-10-20 11:54 AM

chevylin0802 發表於 2015-10-19 05:23 PM static/image/common/back.gif
https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetoo ...

大大 我想請問一下 我在notification 的 callback裡面試了兩種方法去轉換她的arraybuffer
第一種 :
var rsc = ble.fromUtf8(new Uint16Array( data, 1, 1));
  var rsc_data = rsc.charCodeAt();
第二種 :
  var rsc = ble.fromUtf8(data));
  var rsc_data = rsc.charCodeAt();

fromUtf8() 是將arraybuffer裡的utf8都轉成java string
charCodeAt() 是將string 轉成相對的數字

第一種沒有跑出任何結果,第二種出來的數字卻不會更動 一直是3
不知道是不是我有地方的觀念不清楚
還請大大幫忙...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>

chevylin0802 發表於 2015-10-20 12:42 PM

本帖最後由 chevylin0802 於 2015-10-24 12:44 AM 編輯

它不是字串
而是分成好幾個欄位
第一個欄位是Flags
只有一個byte的大小
要針對規範的描述去判斷
第二個欄位是一個16位元的正整數
代表的是速度
單位是每秒多少公尺
但是它的精度是256
所以256代表1公尺
第三個欄位是Cadence
單位是rpm
16位元的正整數
但要看第一個欄位的Flags有沒有設成1
接下來是步伐長度
以1公分為單位
一樣要看Flags有沒有設
然後是總距離
單位是10公分
是回傳一個32位元的正整數
一樣也要看Flags有沒有設

你都不看規範
是解不出回傳資料的

再說一次
藍芽不會直接幫你把資料都幫你格式化
你要自己去解析它的資料格式

Flags的第0個bit如果是1
表示資料裏有含步伐長度
Flags的第1個bit如果是1
表示資料裏有總距離
Flags的第2個bit如果是1
表示設為跑步狀態
如果是0
表示設為走路狀態

所以接收的程式
第一次只解析一個位元組
然後去判斷裏面到底有沒有含步伐長度資料以及總距離資料
第二次要解析一個16位元的正整數
依此類推下去
全部都沒有字串
也不可以把它轉換成字串

var flag1 = false,  flag2 = false,   flag3 = false;
var flags = data;
if((flags & 0x01) >...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

ss820920 發表於 2015-10-24 12:38 AM

chevylin0802 發表於 2015-10-20 12:42 PM static/image/common/back.gif
它不是字串
而是分成好幾個欄位
第一個欄位是Flags


真的是很謝謝大大的詳細解說
我會在試試看 謝謝您

ss820920 發表於 2015-11-8 10:21 AM

chevylin0802 發表於 2015-10-20 12:42 PM static/image/common/back.gif
它不是字串
而是分成好幾個欄位
第一個欄位是Flags


大大 我已經成功抓取資料了 notification 也順利運行
謝謝大大的幫忙

chevylin0802 發表於 2015-11-8 12:59 PM

本帖最後由 chevylin0802 於 2015-11-8 01:08 PM 編輯

ss820920 發表於 2015-11-8 10:21 AM
大大 我已經成功抓取資料了 notification 也順利運行
謝謝大大的幫忙

不客氣

只是做得有點久啊

你要繼續加油才行

寫應用程式不要想一口氣就做出成品

要懂得分段做
尤其是這種網頁呈現式的程式

UI設計要先放到一邊
先驗證好所有的javascripts函數程式
因為UI可以最後再套上去

你可以在自己的筆電裝一套http server
先用瀏覽器開

Cordova
只不過就是一個打包器而已
先用它產生出browser版的來開發
最後再套到手機版就好
不需要動不動就載入手機

保證省掉你一半的時間

如果用PC的話也行
買一隻BT4.0的dongle
也才幾百塊台幣而已
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>
頁: [1]