[BLE(低功耗蓝牙)] BlueNRG-1作为CLIENT模式如何连接SERVER

fdding   2019-1-21 16:48 楼主
网上大多数都是用BlueNRG-1作为SERVER,我想让它作为CLIENT和SERVER通信。我用了官网BLE_CHAT的client模式的代码,用SERVER的mac地址连接BlueBRG,发现没有触发连接事件,不知道什么原因?请大神们知道下,谢谢!我的server是自己弄的一个蓝牙模块,和手机相连是没有问题的。

  ret = aci_gap_create_connection(0x4000, 0x4000, PUBLIC_ADDR, bdaddr, PUBLIC_ADDR, 40, 40, 0, 60, 2000 , 2000);
  if (ret != BLE_STATUS_SUCCESS)
  {
    printf("Error while starting connection: 0x%04x\r\n", ret);
    Clock_Wait(100);        
  }



回复评论 (11)

查看你的用其它模块实现的Server(Peripheral)是不是已经处在广播状态
查看通过手机看到的MAC地址和Chat工程中bdaddr是否一致(这个地址和你手机通过软件看到的地址的顺序相反)
我试了一下用BlueNRG-1连接小米手环能够成功
如果问题还没解决再看一下ret的值是多少
虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2019-1-21 19:43
引用: littleshrimp 发表于 2019-1-21 19:43
查看你的用其它模块实现的Server(Peripheral)是不是已经处在广播状态
查看通过手机看到的MAC地址和Chat ...

谢谢虾哥,已经解决了,我的server没有处于广播状态,需要进行扫描,扫描之后在连接设备,能够连接成功了。但是,我发现我sever没有广播,然后直接连接,返回的ret,居然是success,这是为什么?
点赞  2019-1-22 09:11
没广播连接成功后能通信吗
点赞  2019-1-22 14:20
引用: littleshrimp 发表于 2019-1-22 14:20 没广播连接成功后能通信吗
虾哥,好像还是通信不了,我在server端打印一直出现的是GATT_WRITE_NOT_PERMIT,好像是还要绑定uuid,但是一直出现错误Error in aci_gatt_disc_char_by_uuid() for TX characteristic: 0x0046,用的函数是aci_gatt_disc_char_by_uuid const uint8_t charUuid128_TX[16] = {0x00,0x00,0xee,0x01,0x00,0x00,0x10,0x00,0x80,0x00,0x00,0x80,0x5f,0x9b,0x34,0xfb}; Osal_MemCpy(&UUID_Tx.UUID_16, charUuid128_TX, 16); ret = aci_gatt_disc_char_by_uuid(discovery[0].connection_handle, 0x0001, 0xFFFF,UUID_TYPE_128,&UUID_Tx); if (ret != 0) printf ("Error in aci_gatt_disc_char_by_uuid() for TX characteristic: 0x%04x\r\n", ret); else printf ("aci_gatt_disc_char_by_uuid() for TX characteristic --> SUCCESS\r\n"); APP_FLAG_SET(START_READ_TX_CHAR_HANDLE); 本帖最后由 fdding 于 2019-1-22 18:08 编辑
点赞  2019-1-22 16:20
引用: fdding 发表于 2019-1-22 16:20
虾哥,好像还是通信不了,我在server端打印一直出现的是GATT_WRITE_NOT_PERMIT,好像是还要绑定uuid,但 ...

charUuid128_TX和另一个设备的一致吗?
虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2019-1-23 10:44
引用: littleshrimp 发表于 2019-1-23 10:44
charUuid128_TX和另一个设备的一致吗?

uuid是一致的,我用aci_gatt_disc_read_char_by_uuid_resp_event这个事件来获取tx_handle,但是我用aci_gatt_disc_char_by_uuid函数触发不了这个事件。
点赞  2019-1-23 16:26
引用: fdding 发表于 2019-1-23 16:26
uuid是一致的,我用aci_gatt_disc_read_char_by_uuid_resp_event这个事件来获取tx_handle,但是我用aci_g ...

@lucienkuang是ST负责BlutNRG的FAE,可以请他帮忙分析一下
虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2019-1-24 21:51
引用: littleshrimp 发表于 2019-1-24 21:51
@lucienkuang是ST负责BlutNRG的FAE,可以请他帮忙分析一下

我看了一下BLE_Chat Client和BLE_SensorDemo_Central的代码,还没研究明白
BLE_SensorDemo_Central你了解过没?
虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2019-1-24 21:53
引用: littleshrimp 发表于 2019-1-24 21:53
我看了一下BLE_Chat Client和BLE_SensorDemo_Central的代码,还没研究明白
BLE_SensorDemo_Central你了 ...

麻烦了,虾哥,原因找到了,确实是UUID没有一致。由于之前没有接触过蓝牙的设备,原来UUID也有大小端的区分,我在手机上显示的和代码的UUID是相反的,现在能够和server正常通信了。多谢了。
点赞  2019-1-25 11:57
引用: fdding 发表于 2019-1-25 11:57
麻烦了,虾哥,原因找到了,确实是UUID没有一致。由于之前没有接触过蓝牙的设备,原来UUID也有大小端的区 ...

确实有这个问题 找到问题就好
点赞  2019-1-25 12:28
你好我也出现这个问题了,手机端为server,进行广播,blueNRG进行连接ret = aci_gap_create_connection(LE_1M_PHY_BIT, PUBLIC_ADDR, bdaddr);   printf("ret = %d\n", ret);   if (ret != BLE_STATUS_SUCCESS)   {     printf("Error while starting connection: 0x%04x\r\n", ret);     Clock_Wait(100);   },直接返回ret = 0,connection不起作用,
点赞  2023-9-5 10:10
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复