藍牙4.0BLE協議棧學習過程中問題總結與剖析


在學習開發TI CC2540/CC2541藍牙協議棧遇到的問題總結:

1.藍牙設備號BD_ADDR就是MAC地址,不同於uuid,uuid是服務號,作為唯一標識符。

2.scanRspData數組是掃描回應數據數組,用戶可以自定義設備名。advertData數組是廣播數據數組,主要是包含在廣播裡的數據信息。

3.主從機通信:

主從機通信具體流程就是 Scanning (搜索) -->Devices Found(發現從機) --> Connected (連接) --> discoverService(發現設備服務)-->讀寫characteristic(屬性)。協議棧中的SimpleBLEPeripheral是從機模式,主要是廣播信息,讓其他設備知道。SimpleBLECentral作為主機,主要是與從機建立連接。讀寫characteristic可以理解為GATT層的client向service發送數據,或者是service向client端發送數據。主機設備可以是client(客戶端),也可以是service(服務器),即主機向從機發送數據,從機主動向主機發送數據。

主機向從機讀寫數據調用GATT_WriteCharValue函數和GATT_ReadCharValue函數。如下:

if ( simpleBLEDoWrite )

{

// Do a write

attWriteReq_t req;


req.handle = simpleBLECharHdl+2;

req.len = 2;

req.value[0] = simpleBLECharVal;

req.sig = 0;

req.cmd = 0;

status = GATT_WriteCharValue( simpleBLEConnHandle, &req, simpleBLETaskId );

if ( status == SUCCESS )

{

NPI_WriteTransport("write ok\\r\\n", 10);

simpleBLEProcedureInProgress = TRUE;

simpleBLEDoWrite = !simpleBLEDoWrite;

}


else

{

// Do a read

attReadReq_t req;


req.handle = simpleBLECharHdl+2;

status = GATT_ReadCharValue( simpleBLEConnHandle, &req, simpleBLETaskId );

}

從機和主機發送數據機制不一樣。主機用write命令,從機用Notification通知命令。從機向主機發送數據調用GATT_Notification函數,如:

static attHandleValueNoti_t Report ;

uint16 GetHandle;

noti.len = 1;

noti.value[0] = GetLen;

GATT_Notification(GetHandle, &Report, FALSE );

4.獲取電池電量:

battMeasure函數是通過ADC採集內部電壓獲得的電壓值,參考電壓是1.25v,最大測量電壓是3.75V。如果要獲取精度較高的值需要從外部輸入引腳接入穩定性較高的參考電壓,然後通過ADC採集轉換。

if ( events &SBP_ADV_RGB_EVT )

{

//P0_3=~P0_3;

advertData[6]= battMeasure();//獲取電池電量

GAPRole_SetParameter( GAPROLE_ADVERT_DATA, sizeof( advertData ), advertData );

osal_start_timerEx(simpleBLEBroadcaster_TaskID,SBP_ADV_RGB_EVT,1000);

return ( events ^ SBP_ADV_RGB_EVT );

}

5.獲取RSSI值:

通過獲取信號強度RSSI值,可以測定信號源與接收點的距離,即標籤和基站的距離。從而用相關算法進行定位。注意的是由於受到脈衝干擾等會出現浮動值,需要進行濾波算法來獲得比較準確的採樣值。

case GAP_DEVICE_INFO_EVENT:

{

if( *(pEvent->deviceInfo.pEvtData+7)==0xA7)

simpleBLEAddDeviceInfo( pEvent->deviceInfo.addr, pEvent->deviceInfo.addrType, pEvent->deviceInfo.rssi ,*(pEvent->deviceInfo.pEvtData+6));

}

break;

藍牙4.0BLE協議棧學習過程中問題總結與剖析


分享到:


相關文章: