社区导航

 
查看: 1296|回复: 20

[蓝牙BLE] 有关BlueNRG的 beacon应用。

  [复制链接]

20

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-4-8 23:53:34 | 显示全部楼层 |阅读模式
    项目背景:所有终端全是BlueNRG,没有android。一个广播,另外10个倾听广播(不关心数据信息,不用连接)。
   1, 广播设备甲进行beacon广播,甲设备指定成Peripheral外围设备有问题吗?
   2,另外10个BlueNRG 乙类设备passive scanning 甲设备的广播信息。函数aci_gap_start_general_discovery_proc()的解释是启动主动扫描的,请问那个函数可以启动 passive scanning?
   3,启动扫描后,什么时候能得到广播信息?得到的scanning result 是不是自动存储于Advertising_Report_t结构中?
   4,这种一个广播,10个倾听的模式采用Beacon的方式可以吗?
   谢谢指教!



回复

使用道具 举报

5394

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-4-9 12:54:42 | 显示全部楼层
1、可以使用Peripheral,不过最好用Broadcaster和Observer,乙类设备使用Observer,甲类设备使用Broadcaster
2、aci_gap_start_general_discovery_proc用于控制乙类设备进入接收模式
3、通过实现hci_le_advertising_report_event函数来接收甲类设备广播的数据,数据存在Advertising_Report数组中
4、1个设备广播可以无数个设备监听,Broadcaster和Observer或者Peripheral和Central都可以实现,Beacon只是按照对应的格式将广播数据进行包装,你可以使用Beacon格式,也可以使用其它格式

点评

再请教版主几个问题: Q1:调试中发现BlueNRG的beacon项目中Device_Init()函数内的 aci_gap_init(ROLE, 0x00, 0x08, &service_handle, &dev_name_char_handle, &appearance_char_handle); 的参数ROLE=01(Peripher  详情 回复 发表于 2018-4-10 01:21
指点的很详细!多谢  详情 回复 发表于 2018-4-9 14:04
虾扯蛋


回复

使用道具 举报

20

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-4-9 14:04:34 | 显示全部楼层
littleshrimp 发表于 2018-4-9 12:54
1、可以使用Peripheral,不过最好用Broadcaster和Observer,乙类设备使用Observer,甲类设备使用Broadcaste ...

指点的很详细!多谢


回复

使用道具 举报

20

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-4-10 01:21:11 | 显示全部楼层
本帖最后由 yys3210 于 2018-4-10 01:25 编辑
littleshrimp 发表于 2018-4-9 12:54
1、可以使用Peripheral,不过最好用Broadcaster和Observer,乙类设备使用Observer,甲类设备使用Broadcaste ...

再请教版主几个问题:
Q1:调试中发现BlueNRG的beacon项目中Device_Init()函数内的 aci_gap_init(ROLE, 0x00, 0x08, &service_handle, &dev_name_char_handle, &appearance_char_handle);  的参数ROLE=01(Peripheral)时Packet Sniffer能抓到广播数据;当ROLE=0x02( broadcaster)时就没有广播数据了。
  
   准备扫描部分函数如下:
   aci_gap_start_observation_proc(160,160,0,0,0,0);//启动扫描
   hci_le_advertising_report_event(1,Test_Advice);//得到广播数据.
  //Test_Advice定义:Advertising_Report_t  Test_Advice[10]; //10是随便写的,不写数则编译错误

  Q2:hci_le_set_scan_parameters(0,160,160,0,0);与aci_gap_start_observation_proc(160,160,0,0,0,0);两个函数的原型基本相同,二者有大的区别吗?
  Q3:hci_le_set_scan_parameters(0,160,160,0,0);
         hci_le_set_scan_enable(1,0);
         上面两句与aci_gap_start_observation_proc功能能等价吗?
  Q4:启动扫描后,执行函数hci_le_advertising_report_event即可就能得到广播数据?而不用等待产生了类似中断标志后,才运行该函数后加载广播数据到结构参数体中?
  Q5:函数hci_le_advertising_report_event库文件中描述第一参数为什么指定就是“1”而不能是其他大于1的数?
  第二个参数是个结构体数组Advertising_Report[],是不是该函数可以同时扫描多个广播?每个广播的event分别存储于Advertising_Report[ ]对应的结构体中?
  这样第一个参数是整数 i,则结构体数组就相应的为Advertising_Report[ i ],能这样理解吗?

点评

Broadcaster和Observer我试了一下 像你说的将aci_gap_init函数中的GAP_PERIPHERAL_ROLE改成GAP_BROADCASTER_ROLE后 在执行aci_gap_set_discoverable会报错 Error in aci_gap_set_discoverable() 0x000c google过  详情 回复 发表于 2018-4-10 13:59


回复

使用道具 举报

5394

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-4-10 13:59:42 | 显示全部楼层
yys3210 发表于 2018-4-10 01:21
再请教版主几个问题:
Q1:调试中发现BlueNRG的beacon项目中Device_Init()函数内的 aci_gap_init(ROLE,  ...

Broadcaster和Observer我试了一下
像你说的将aci_gap_init函数中的GAP_PERIPHERAL_ROLE改成GAP_BROADCASTER_ROLE后
在执行aci_gap_set_discoverable会报错
Error in aci_gap_set_discoverable() 0x000c
google过,没找到Broadcaster和Observer的例程,也没找到相关资料
试过aci_gap_set_broadcast_mode和aci_gap_set_non_connectable 同样报错
Error in aci_gap_set_broadcast_mode 0x0042
Error in aci_gap_set_non_connectable 0x000c

如果使用Peripheral和Central方式可以在初始化时执行aci_gap_start_general_discovery_proc函数
通过实现hci_le_advertising_report_event函数接收广播数据
收到广播后hci_le_advertising_report_event会被调用
读取Advertising_Report[n].Data可以得到对应的广播数据

点评

请教虾哥:蓝牙规范4.0 P1739页有如下图: 图中所示,BlueNRG在Broadcaster及Observer角色时,其device name等是被禁止的,这样的话设置Broadcaster或Observer时是不是就不能用aci_gap_init()函数了?那么需要怎么来  详情 回复 发表于 2018-5-15 02:50
虾扯蛋


回复

使用道具 举报

20

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-5-15 02:50:33 | 显示全部楼层
littleshrimp 发表于 2018-4-10 13:59
Broadcaster和Observer我试了一下
像你说的将aci_gap_init函数中的GAP_PERIPHERAL_ROLE改成GAP_BROADCAS ...

请教虾哥:蓝牙规范4.0 P1739页有如下图:
图中所示,BlueNRG在Broadcaster及Observer角色时,其device name等是被禁止的,这样的话设置Broadcaster或Observer时是不是就不能用aci_gap_init()函数了?那么需要怎么来设置BLE的Broadcaster或Observer角色啊?
7.jpg

点评

我觉得aci_gap_init的role参数既然可以选择Broadcaster和Observer就应该能用  详情 回复 发表于 2018-5-15 10:13


回复

使用道具 举报

5394

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-5-15 10:13:55 | 显示全部楼层
yys3210 发表于 2018-5-15 02:50
请教虾哥:蓝牙规范4.0 P1739页有如下图:
图中所示,BlueNRG在Broadcaster及Observer角色时,其device  ...

我觉得aci_gap_init的role参数既然可以选择Broadcaster和Observer就应该能用
虾扯蛋


回复

使用道具 举报

48

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-10-23 10:10:28 | 显示全部楼层
littleshrimp 发表于 2018-5-15 10:13
我觉得aci_gap_init的role参数既然可以选择Broadcaster和Observer就应该能用

版主,第一次使用ST的IDB007v1,求教为何下载官方Beacon例程,手机APP检测不到开发板的设备名称,将手机移动不同的距离,应该是检测到开发板上的蓝牙,但是一直都是显示unnamed,ST的函数又都是封装好的,要怎么调啊。。。求回复啊,非常感谢

点评

Beacon是无连接的不会广播设备名称,BLUENRG广播数据,手机接收数据 广播的数据由BLE_Beacon_main.c中的adv_data数组或manuf_data数组决定 如果想让bluenrg广播名称可以试试BLE_SensorDemo例程,可与手机建立连  详情 回复 发表于 2018-10-23 12:52


回复

使用道具 举报

5394

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-10-23 12:52:42 | 显示全部楼层
逆风寒 发表于 2018-10-23 10:10
版主,第一次使用ST的IDB007v1,求教为何下载官方Beacon例程,手机APP检测不到开发板的设备名称,将手机 ...

Beacon是无连接的不会广播设备名称,BLUENRG广播数据,手机接收数据
广播的数据由BLE_Beacon_main.c中的adv_data数组或manuf_data数组决定

如果想让bluenrg广播名称可以试试BLE_SensorDemo例程,可与手机建立连接
虾扯蛋


回复

使用道具 举报

48

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-10-23 14:05:24 | 显示全部楼层
littleshrimp 发表于 2018-10-23 12:52
Beacon是无连接的不会广播设备名称,BLUENRG广播数据,手机接收数据
广播的数据由BLE_Beacon_main.c中的 ...

谢谢版主,我想问ios手机上下载了lightblue,开发板运行Beacon例程,lightblue上只能显示出rssi,因为也不能连接,那手机要怎么查看接收数据啊


回复

使用道具 举报

5394

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-10-23 16:34:19 来自手机 | 显示全部楼层
逆风寒 发表于 2018-10-23 14:05
谢谢版主,我想问ios手机上下载了lightblue,开发板运行Beacon例程,lightblue上只能显示出rssi,因为也 ...

你可以在应用商店里搜索beacon看看有没有现成应用
一般只能接受标准格式的的数据包
自定义数据在android里用app直接读取广播包就能得到广播数据、mac和rssi
ios应该也差不多


回复

使用道具 举报

48

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-10-23 19:31:59 | 显示全部楼层
littleshrimp 发表于 2018-10-23 16:34
你可以在应用商店里搜索beacon看看有没有现成应用
一般只能接受标准格式的的数据包
自定义数据在androi ...

十分感谢版主答复


回复

使用道具 举报

48

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-10-23 19:52:56 | 显示全部楼层
littleshrimp 发表于 2018-10-23 16:34
你可以在应用商店里搜索beacon看看有没有现成应用
一般只能接受标准格式的的数据包
自定义数据在androi ...

版主,如果想同时实现beacon和串口透传功能,是直接将beacon和chat(service)的例程融合就可以吗?

点评

beacon是单向的,用于发送数据包的bluenrg只能发送数据 你可以单独把UART代码加到工程里,将接收到的数据存入数组,判断收到某一个字符(比如\r、\n)时将数据的内容更新到广播数组,然后开启发送再把UART接收数组  详情 回复 发表于 2018-10-23 20:01


回复

使用道具 举报

5394

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-10-23 20:01:14 | 显示全部楼层
逆风寒 发表于 2018-10-23 19:52
版主,如果想同时实现beacon和串口透传功能,是直接将beacon和chat(service)的例程融合就可以吗?

beacon是单向的,用于发送数据包的bluenrg只能发送数据
你可以单独把UART代码加到工程里,将接收到的数据存入数组,判断收到某一个字符(比如\r、\n)时将数据的内容更新到广播数组,然后开启发送再把UART接收数组清空,准备接收下一个数据包

一搬接收广播包的会是手机,如果你还想用另一个bluenrg接收广播方法类似,也是在工程里引入UART代码,在收到蓝牙广播包时把数据通过UART发送到PC之类的上位机上

点评

版主,Beacon的时候,bluenrg是设置为不连接的,那手机还怎么给bluenrg发送数据啊,发不了数据,怎么实现将手机端的数据通过串口发送给PC。。。  详情 回复 发表于 2018-10-24 11:13
虾扯蛋


回复

使用道具 举报

48

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-10-24 11:13:07 | 显示全部楼层
littleshrimp 发表于 2018-10-23 20:01
beacon是单向的,用于发送数据包的bluenrg只能发送数据
你可以单独把UART代码加到工程里,将接收到的数 ...

版主,Beacon的时候,bluenrg是设置为不连接的,那手机还怎么给bluenrg发送数据啊,发不了数据,怎么实现将手机端的数据通过串口发送给PC。。。

点评

单向发送 意思是pc通过串口控制广播数据发送 另一端像手机一样接收广播 如果pc没有蓝牙可以使用另一块bluenrg接收广播再通过串口发送给pc 如果双向通信就不要使用beacon这种方式了  详情 回复 发表于 2018-10-24 15:15


回复

使用道具 举报

326

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-10-24 15:10:46 | 显示全部楼层
楼主厉害,支持楼主


回复

使用道具 举报

5394

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-10-24 15:15:57 来自手机 | 显示全部楼层
逆风寒 发表于 2018-10-24 11:13
版主,Beacon的时候,bluenrg是设置为不连接的,那手机还怎么给bluenrg发送数据啊,发不了数据,怎么实现 ...

单向发送 意思是pc通过串口控制广播数据发送 另一端像手机一样接收广播 如果pc没有蓝牙可以使用另一块bluenrg接收广播再通过串口发送给pc
如果双向通信就不要使用beacon这种方式了

点评

虾哥,如果想要BlueNRG一直发广播,同时又要保证用户手机APP发送数据时BlueNRG可以接收数据,你觉得采用什么方式最好啊  详情 回复 发表于 2018-10-25 09:34


回复

使用道具 举报

48

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-10-25 09:34:48 | 显示全部楼层
littleshrimp 发表于 2018-10-24 15:15
单向发送 意思是pc通过串口控制广播数据发送 另一端像手机一样接收广播 如果pc没有蓝牙可以使用另一块blu ...

虾哥,如果想要BlueNRG一直发广播,同时又要保证用户手机APP发送数据时BlueNRG可以接收数据,你觉得采用什么方式最好啊

点评

你说的这个比较复杂,一片bluenrg不一定能实现,因为通常在广播的时候要么只广播,要么只等待手机与其连接 那种有连接的通信方式不能满足你的要求吗?  详情 回复 发表于 2018-10-25 13:49


回复

使用道具 举报

5394

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-10-25 13:49:50 | 显示全部楼层
逆风寒 发表于 2018-10-25 09:34
虾哥,如果想要BlueNRG一直发广播,同时又要保证用户手机APP发送数据时BlueNRG可以接收数据,你觉得采用 ...

你说的这个比较复杂,一片bluenrg不一定能实现,因为通常在广播的时候要么只广播,要么只等待手机与其连接
那种有连接的通信方式不能满足你的要求吗?

点评

嗯,本来想的是chat的例程里也可以放入广播信息,但是老师要我用Beacon的方式做信息推送,同时还需要我做串口透传的功能,说是让开两个进程。。。  详情 回复 发表于 2018-10-25 16:09
虾扯蛋


回复

使用道具 举报

48

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-10-25 16:09:18 | 显示全部楼层
littleshrimp 发表于 2018-10-25 13:49
你说的这个比较复杂,一片bluenrg不一定能实现,因为通常在广播的时候要么只广播,要么只等待手机与其连 ...

嗯,本来想的是chat的例程里也可以放入广播信息,但是老师要我用Beacon的方式做信息推送,同时还需要我做串口透传的功能,说是让开两个进程。。。


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2018-12-11 20:28 , Processed in 0.506991 second(s), 16 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表