微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > 蓝牙4.0模块连接Sensortag获取传感器数据(二)

蓝牙4.0模块连接Sensortag获取传感器数据(二)

时间:10-02 整理:3721RD 点击:


本人使用的蓝牙模块为网蜂的蓝牙4.0模块,不知道能否成功获取数据,在这里希望大家来一起讨论。解决有Sensortag套件没有相应设备支持的尴尬。。。

蓝牙4.0模块连接Sensortag获取传感器数据(二)

所用工程sensortag和SimpleBLECentral(只对SimpleBLECentral工程做修改)
目前进展:蓝牙模块能够连接上sensortag,并且打印设备地址和RSSI。

经过了对蓝牙协议数周的学习,大概了解了不懂协议栈原理:
对sensortag工程就行分析找到事件处理函数SensorTag_ProcessEvent;
以红外温度事件(ST_IRTEMPERATURE_READ_EVT)为例:

  1. uint16 SensorTag_ProcessEvent( uint8 task_id, uint16 events )
  2. {
  3. VOID task_id; // OSAL required parameter that isn't used in this function
  4. ....
  5. .... (此处省略)
  6. ....
  7. //////////////////////////
  8. // IR TEMPERATURE //
  9. //////////////////////////
  10. if ( events & ST_IRTEMPERATURE_READ_EVT )
  11. {
  12. if ( irTempEnabled )
  13. {
  14. if (HalIRTempStatus() == TMP006_DATA_READY)
  15. {
  16. readIrTempData();
  17. osal_start_timerEx( sensorTag_TaskID, ST_IRTEMPERATURE_READ_EVT, TEMP_DEFAULT_PERIOD-TEMP_MEAS_DELAY );
  18. }
  19. else if (HalIRTempStatus() == TMP006_OFF)
  20. {
  21. HalIRTempTurnOn();
  22. osal_start_timerEx( sensorTag_TaskID, ST_IRTEMPERATURE_READ_EVT, TEMP_MEAS_DELAY );
  23. }
  24. }
  25. else
  26. {
  27. //Turn off Temperatur sensor
  28. VOID HalIRTempTurnOff();
  29. VOID resetCharacteristicValue(IRTEMPERATURE_SERV_UUID,IRTEMPERATURE_DATA,0,IRTEMPERATURE_DATA_LEN);
  30. VOID resetCharacteristicValue(IRTEMPERATURE_SERV_UUID,IRTEMPERATURE_CONF,ST_CFG_SENSOR_DISABLE,sizeof ( uint8 ));
  31. }

  32. return (events ^ ST_IRTEMPERATURE_READ_EVT);
  33. }
  34. ....(省略)

复制代码


看//Turn off Temperatur sensor 下面部分,然后进入到resetCharacteristicValue 函数如下:

  1. 省略。。
  2. switch(servUuid)
  3. {
  4. case IRTEMPERATURE_SERV_UUID:
  5. IRTemp_SetParameter( paramID, paramLen, pData);
  6. break;

  7. case ACCELEROMETER_SERV_UUID:
  8. Accel_SetParameter( paramID, paramLen, pData);
  9. break;

  10. case MAGNETOMETER_SERV_UUID:
  11. Magnetometer_SetParameter( paramID, paramLen, pData);
  12. break;
  13. 省略。。

复制代码


在进去可以找到:

  1. VOID osal_memcpy( irTempData, value, IRTEMPERATURE_DATA_LEN );
  2. // See if Notification has been enabled
  3. GATTServApp_ProcessCharCfg( irTempDataConfig, irTempData, FALSE,
  4. irTempAttrTbl, GATT_NUM_ATTRS( irTempAttrTbl ),

复制代码


如果没错的话应该是调用GATT层的GATTServApp_ProcessCharCfg函数将红外温度数据( irTempData)发送给主机。。。。
到这为至从机的数据发送功能已经截止,应该到主机接收数据了。。

问题:现在不知道怎么在主机SimpleBLECentral工程中添加哪些代码。没有明确的思路。请教各位给个思路

if (HalIRTempStatus() == TMP006_DATA_READY)//读取传感器状态=数据准备
{
readIrTempData();//读取红外温度数据
osal_start_timerEx( sensorTag_TaskID, ST_IRTEMPERATURE_READ_EVT, sensorTmpPeriod-TEMP_MEAS_DELAY );//sensorTag_TaskID,0x0002读红外温度事件,1000-250 ms
}
else if (HalIRTempStatus() == TMP006_OFF)//IR温度传感器睡眠
{
HalIRTempTurnOn();//IR温度传感器上电
osal_start_timerEx( sensorTag_TaskID, ST_IRTEMPERATURE_READ_EVT, TEMP_MEAS_DELAY );
}

static void readIrTempData( void )
{
uint8 tData[IRTEMPERATURE_DATA_LEN];

if (HalIRTempRead(tData))
{
tData[0]=0x55;tData[1]=0x12;tData[2]=0x34;tData[3]=0xaa;//测试0123
IRTemp_SetParameter( SENSOR_DATA, IRTEMPERATURE_DATA_LEN, tData);
}
}

我想另一边一样,也是中断方式获取事件然后处理

主机这边怎么去接收呢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top