微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > 如何让一个Central和两个Peripheral建立连接,并且Central能和这两个建立连接的Peripheral能相互发送数据?

如何让一个Central和两个Peripheral建立连接,并且Central能和这两个建立连接的Peripheral能相互发送数据?

时间:12-22 整理:3721RD 点击:

我现在一个Central和一个Peripheral建立连接,Central通过写CHAR1和读CHAR2与Peripheral进行数据通信。BLE-CC254x-1.3.2版本的BLE协议栈的Central和Peripheral的例子好像一个Central不能和多个Peripheral建立连接。如果要一个Central不能和多个Peripheral建立连接应该如何做?

Central的是client, Peripheral都是server。

 case GAP_DEVICE_INFO_EVENT:

// if filtering device discovery results based on service UUID       

 if ( DEFAULT_DEV_DISC_BY_SVC_UUID == TRUE )        

{          

   if ( simpleBLEFindSvcUuid( SIMPLEPROFILE_SERV_UUID, pEvent->deviceInfo.pEvtData, pEvent->deviceInfo.dataLen ) )          

   {            

      simpleBLEAddDeviceInfo( pEvent->deviceInfo.addr, pEvent->deviceInfo.addrType );          

    }        

 }  

这里是只发现的Server UUID的为SIMPLEPROFILE_SERV_UUID的从设备吗?

那两个从设备的Server UUID能否相同呢?

上面的代码是 simpleBLECentral.c 里 static void simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent )函数的一部分。

Hi Qin,

你得修改一下代码.

因为一旦连上一个设备后, 按键里面有判断, 不会再去做新的查找. 

你改一下simpleBLECentral_HandleKeys() 里面的代码.

两个从设备Server UUID 一样没问题.

但是一个Central和多个Peripheral建立连接后,他们的连接句柄simpleBLEConnHandle都不一样吧?

这个也会不一样.

你就用个数组, 或者多几个全局变量呗.

  如果从机的Server UUID 一样的话,主机就只能发现一个设备。即simpleBLEScanRes值为1。但是如果不一样的话,simpleBLEScanRes值就为2,表明应该发现了两个设备。

static void simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent ){

  。。。 。。。   

  if ( DEFAULT_DEV_DISC_BY_SVC_UUID == TRUE )        

     {          

       //发现Server UUID  为SIMPLEPROFILE_SERV1_UUID从机

         if ( simpleBLEFindSvcUuid( SIMPLEPROFILE_SERV1_UUID, pEvent->deviceInfo.pEvtData, pEvent->deviceInfo.dataLen ) )          

       {            

           simpleBLEAddDeviceInfo( pEvent->deviceInfo.addr, pEvent->deviceInfo.addrType );          

       }    

     //发现Server UUID  为SIMPLEPROFILE_SERV2_UUID从机     

      if ( simpleBLEFindSvcUuid( SIMPLEPROFILE_SERV2_UUID, pEvent->deviceInfo.pEvtData,  pEvent->deviceInfo.dataLen ) )          

    {            

        simpleBLEAddDeviceInfo( pEvent->deviceInfo.addr, pEvent->deviceInfo.addrType );          

     }        

  }

  。。。 。。。   

我的思路是这样的。先让Central和一个Peripheral连接成功后,再和另一个Peripheral进行连接。

这个思路行不行呢?

可以.

欢迎做各种尝试 :)

我现在可以直接和两个从机相连接了,而且两个从机都可以使用notification的方式给主机发送数据。我现在的问题就出现在主机怎么同时给两个从机发送数据。想着应该是static uint16 simpleBLEConnHandle = GAP_CONNHANDLE_ALL;这个地方需要修改。。

你是怎么连接的呢?

GATT_WriteCharValue( /*simpleBLEConnHandle*/handle[0], &req, simpleBLETaskId );
GATT_WriteCharValue( /*simpleBLEConnHandle*/handle[1], &req, simpleBLETaskId );

你这是给两个从设备发送数据吧?那你怎么和两个从设备建立连接的呢?

想想办法, 改改代码哈

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

网站地图

Top