思考:
ble一次最大只能傳輸20位元組,則怎樣把大資料拆分成一包一包的20位元組進行傳輸呢?
1. 資料分幀
1) 第一幀
按照自己的規定拆分,如規定第一包資料前4個位元組作為標識,可以是包頭,包序號,幀序號,包有效資料長度等,按照需求規定,那後面的16個位元組自然是填入真正的有效資料。最後把這整包資料存入待傳送的陣列快取一下。
2) 第二幀,第二針資料前幾個位元組可以不用規定的那麼多,比如可以只規定第1節為幀序號,標識這是第幾幀資料啦,第2位元組可以標識資料長度,後面的18個位元組自然是填入有效的資料。分好過後,按照第一幀的方式把資料存到陣列快取一下。
3) 第3..n幀都依次按照以上2中所述,存到陣列快取中,打包資料。
4) 最後一幀,以上可以通過for迴圈的方式把打好包的資料依次減掉。最後判斷出資料為最後一幀時,打包好資料,開始傳送資料。
2. 資料傳送
這裡牽扯到ble的notify/indicate的使用上,當ble傳送一幀資料時,會丟擲乙個事件,則此時可以在該事件中寫乙個方法檢視你的資料分幀中陣列快取中還有沒有資料了。如果有,繼續呼叫傳送資料函式。資料結構以及陣列如何定義,且看下文。
3. 資料接收,按照同樣方法,當查詢到最後一幀資料,即表示資料接收完畢,按照規定的格式,取出資料即可。
4. 資料結構
直接舉個例項,比如定義以下結構體
typedef struct
uint8_t rd;
uint8_t wr;
struct qpp_data_tag qpp_data_buf;
}proc_qpp_data;
struct qpp_data_buf
uint8_tdata_buf_len[10];
uint8_tdata_buf[10][20];//具體使用可根據需求用巨集定義代替數字,便於移植
以上結構體加資料,在我的資料透傳中的思想如下:
wr:用來標識包,比如在資料分幀中,分完一包,即把wr加1,。
rd:用來標識打包後的資料,傳送的標識,比如傳送了第一幀,則rd加1,再發第二幀。
data_buf_len:可以用來記錄此次打包的資料長度,如第一幀,去掉前面4位元組,那麼後面只能夠填16個位元組。第二針,只能填18個位元組等等。
data_buf:就是分包的資料所存放的地方啦。二維陣列的好處在於,分包過程,像是一支毛筆,在白紙上一行一行的劃資料。而又可以通過wr來記錄劃到了第幾行。最後再通傳送資料丟擲的事件中,通過比較wr與rd兩值是否相等,來確定快取中還是否存在資料,繼而決定是否繼續傳送。
藍芽BLE4 0透傳 智慧型穿戴應用
隨著技術改革公升級和消費觀念公升級,智慧型穿戴產品從過去單一功能向多功能化發展,同時具有更便攜 實用的特點。加入骨感測 人臉識別 地理定位等各種感測器,可以多方位多角度獲取資料資訊。甚至接入語音 體感等人機介面,實現更方便更靈活的互動體驗。智慧型穿戴產品採用的互聯方式主要有nfc wifi 藍芽。n...
ESP 32S做BLE透傳模組日誌
本次專案是用esp 32s做乙個低功耗藍芽ble的透傳模組,模組將掃瞄到的藍芽名稱以及裝置位址通過usb口 串列埠 傳出,上位機通過串列埠輸入要連線的藍芽名稱後,模組進行連線配對,配對成功後就將usb口收到的資料通過藍芽傳送到配對端。硬體 esp 32s模組,以及必要的外圍電路。軟體系統 freer...
6 3藍芽透傳資料與微信小程式通訊
從藍芽4.0開始包含了兩個標準,傳統藍芽 classic buletooth 和低功耗藍芽 bluetooth low energy 以下簡稱 ble。傳統藍芽支援音訊和資料兩大類協議,所以更適合 等資料量大的應用場景 傳統藍芽有3個功率級別,class1 class2 class3,分別支援100...