分享 使用PSOC BLE实现IBeacon功能

[复制链接]
2010|0
 楼主| wangyufeng2500 发表于 2015-12-10 12:36 | 显示全部楼层 |阅读模式
本帖最后由 wangyufeng2500 于 2015-12-10 12:38 编辑

因为项目里面需要集成IBeacon功能,所以花时间研究了下,和大家分享一下,并附上实现的代码
什么是IBeacon就不解释了,能做什么也不再这里解释了。
说白了就是利用蓝牙广播的数据包做的**,蓝牙广播格式如下

   1 byte preamble(1字节做报头)

    4 byte access address(4字节做地址)

    39 bytes advertising channel PDU(39个字节用于PDU数据包)

    3 bytes CRC(3个字节用于CRC数据校验)

而我们要用的就是其中的39字节的数据包,我们只需要其中30个字节的数据包就可以,我们自定义数据包符合IBeacon协议就可以,那协议是什么,如下:
iBeacon 标示:02 01 06 1A FF 4C 00 02 15UUID: B9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6Dmajor:00 49 minor:00 0A 一米时候的信号值:C5   (算法是256-距离一米是的信号值)其中我们需要设置的就是UUID Major Minor 和信号值 ,这个是手机搜索到之后区分模块ID,距离的必要参数,详情可以百度 其中IBeacon的表示部分不要动就可以了。测试软件我使用的是ios平台的Locate iB测试结果如下:能够显示到ID和里面Major Minor值,并且可以显示实时的距离还是很可以的,第二个图是距离到达设置之后自动推送信息。
  1. void StartBroadcast(void)
  2. {
  3.     /* Define the Broadcast advertisement parameters - including the BD address,
  4.      * advertisement type, advertisement interval etc.
  5.      */
  6.     CYBLE_GAPP_DISC_PARAM_T myAdvParameters =
  7.     {
  8.         /* Minimum Advertisement interval = 100 ms */
  9.         CYBLE_GAP_ADV_ADVERT_INTERVAL_NONCON_MIN,
  10.         
  11.         /* Maximum Advertisement interval = Minimum = 100 ms */
  12.         CYBLE_GAP_ADV_ADVERT_INTERVAL_NONCON_MIN,
  13.         
  14.         /* Advertisement type - Non-connectable undirected (broadcasting) */
  15.         CYBLE_GAPP_NON_CONNECTABLE_UNDIRECTED_ADV,
  16.         
  17.         /* Own BD address type - Public */
  18.         CYBLE_GAP_ADDR_TYPE_PUBLIC,
  19.         
  20.         /* Address type of peer for directed advertisement - not applicable */
  21.         CYBLE_GAP_ADDR_TYPE_PUBLIC,
  22.         
  23.         /* Address for directed advertisement - not applicable */
  24.         {0},        
  25.         
  26.         /* Channel map - advertise on all 3 channels */
  27.         0x07,      
  28.         
  29.         /* Advertisement filter policy - not applicable */
  30.         0           
  31.     };

  32.     /* Define the advertisement data for the broadcast - this includes the
  33.      * advertisement flags and the device name advertised. The device name
  34.      * used for Broadcasting is different from the device name used when
  35.      * we want to connect to another device.
  36.      */

  37.        CYBLE_GAPP_DISC_DATA_T myAdvData =
  38.     {
  39.         {   
  40.            0x02,
  41.            0x01,
  42.            0x04,
  43.            0x1A,
  44.            0xFF,
  45.             
  46.            0x4C, 0x00, 0x02, 0x15, 0xB9, 0x40, 0x7F, 0x30, 0xF5, 0xF8, 0x46, 0x6E, 0xAF, 0xF9, 0x25, 0x55, 0x6B, 0x57, 0xFE, 0x6D, 0x00, 0x49, 0x00, 0x0A, 0xC5
  47.         },
  48.         30          /* Total bytes in the advertisement packet */
  49.     };
  50.    
  51.     /* There is no scan response data configured for this broadcast */
  52.     CYBLE_GAPP_SCAN_RSP_DATA_T myScanRespData =
  53.     {
  54.         {0},        /* Scan response packet */
  55.         0           /* Length of the scan response packet */
  56.     };
  57.    
  58.     /* Top level structure for holding all advertisement parameters */
  59.     CYBLE_GAPP_DISC_MODE_INFO_T discoveryModeInfo =
  60.     {
  61.         CYBLE_GAPP_NONE_DISC_BROADCAST_MODE,   /* Discoverable mode */
  62.         &myAdvParameters,                      /* Advertisement parameters */
  63.         &myAdvData,                            /* Advertisement data */
  64.         &myScanRespData,                       /* Scan response data */
  65.         0                                      /* Advertisement timeout: none */
  66.     };
  67.    
  68.     /* Start broadcasting */
  69.    
  70.     CyBle_GappEnterDiscoveryMode(&discoveryModeInfo);
  71. }





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

57

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部