fdding 发表于 2019-1-21 16:48

BlueNRG-1作为CLIENT模式如何连接SERVER

网上大多数都是用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);      
}



littleshrimp 发表于 2019-1-21 19:43

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

fdding 发表于 2019-1-22 09:11

littleshrimp 发表于 2019-1-21 19:43
查看你的用其它模块实现的Server(Peripheral)是不是已经处在广播状态
查看通过手机看到的MAC地址和Chat ...

谢谢虾哥,已经解决了,我的server没有处于广播状态,需要进行扫描,扫描之后在连接设备,能够连接成功了。但是,我发现我sever没有广播,然后直接连接,返回的ret,居然是success,这是为什么?

littleshrimp 发表于 2019-1-22 14:20

没广播连接成功后能通信吗

fdding 发表于 2019-1-22 16:20

本帖最后由 fdding 于 2019-1-22 18:08 编辑

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 = {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.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);

littleshrimp 发表于 2019-1-23 10:44

fdding 发表于 2019-1-22 16:20
虾哥,好像还是通信不了,我在server端打印一直出现的是GATT_WRITE_NOT_PERMIT,好像是还要绑定uuid,但 ...

charUuid128_TX和另一个设备的一致吗?

fdding 发表于 2019-1-23 16:26

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函数触发不了这个事件。

littleshrimp 发表于 2019-1-24 21:51

fdding 发表于 2019-1-23 16:26
uuid是一致的,我用aci_gatt_disc_read_char_by_uuid_resp_event这个事件来获取tx_handle,但是我用aci_g ...

@lucienkuang是ST负责BlutNRG的FAE,可以请他帮忙分析一下

littleshrimp 发表于 2019-1-24 21:53

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

我看了一下BLE_Chat Client和BLE_SensorDemo_Central的代码,还没研究明白
BLE_SensorDemo_Central你了解过没?

fdding 发表于 2019-1-25 11:57

littleshrimp 发表于 2019-1-24 21:53
我看了一下BLE_Chat Client和BLE_SensorDemo_Central的代码,还没研究明白
BLE_SensorDemo_Central你了 ...

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

littleshrimp 发表于 2019-1-25 12:28

fdding 发表于 2019-1-25 11:57
麻烦了,虾哥,原因找到了,确实是UUID没有一致。由于之前没有接触过蓝牙的设备,原来UUID也有大小端的区 ...

确实有这个问题 找到问题就好

asdasdadadasd 发表于 2023-9-5 10:10

你好我也出现这个问题了,手机端为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不起作用,
页: [1]
查看完整版本: BlueNRG-1作为CLIENT模式如何连接SERVER