1.为了建立一个连接(配对)设备必须清醒和侦听请求(连接请求在你的情况中)如果你的扫描仪听一个广告事件和发起一个连接connenction请求将由主在下次发送广告事件的外围,你可以尝试定向广告如果它适合你,在这种情况下你的设备将emmit引导广告事件扫描仪为了得到连接(过程功率消耗和你可以直接宣传只有一个特定的中央已经知道蓝牙的地址)。因此,一个想法可能是间接宣传大量时间,而你没有一个可用的中央bd地址,当中央发现你的设备,你可以建立一个连接(初始连接将是耗时的原因,我在上面解释)。在那之后,每次你断开连接时,你都会直接向那个中心做广告,你会比无向广告程序更快地连接。但我要再说一遍定向广告很耗电,1。28秒后就会自动停止,没有任何广告数据(没有广告数据意味着你将不能连接到DSPS android & ios应用程序,你也将不得不重新配置580主机接受定向广告请求,你将必须知道你的中心的地址)。您可以使用或不使用安全性实现上述功能。根据您的设备的使用情况,以上可能是一种解决方案。此外,从我可以告诉你的是,你关心低功耗,你可以做的是保持无定向广告,并逐渐增加广告间隔,而没有活动(在一段时间内没有连接),或者, if there is a possibility you can place a button on the device to increase advertising interval so that the user can force a reconnection with no delays.
嗨RandyYu,
1.您已经将intv_min和intv_max更改为10000ms ?如果你已经改变了它在大约10秒那发生了什么,在你的设备将广告信息的外围设备,中央不得不等待听第二广告信息发送连接请求,如果有内部(未见下一个广告信息)可能会等待更长时间。
2.广告命令在唤醒后不会超时,只要你不取消命令,它就会发送广告命令。只有定向广告才会暂停。广告报文仅通过间隔设置来定义,如果您将其设置为10秒,那么您将每10秒发送3条广告消息(每个广告通道一条)。
3.大约10.24秒,你可以检查BLE规格。
4.在这个帖子上检查一下答案http://support.dialog-semiconductor.com/help-help-help-cant-go-deep-slee..。文章# 10。
由于MT_dialog
1.如果我修改设备和中央成对,时间将减少连接和发送数据。如果是的话,你能给我一个配对的例子吗?
2.你说时间间隔?我不是很明白,我能改一下吗?如果我想把它改成每10秒发送10条广告信息。我需要修改哪个参数。
3.对不起,我的英语不是很好。我指的是intv的参数,它能设置的最大值。因为我想让它睡10分钟
谢谢你!
嗨RandyYu,
1.为了建立一个连接(配对)设备必须清醒和侦听请求(连接请求在你的情况中)如果你的扫描仪听一个广告事件和发起一个连接connenction请求将由主在下次发送广告事件的外围,你可以尝试定向广告如果它适合你,在这种情况下你的设备将emmit引导广告事件扫描仪为了得到连接(过程功率消耗和你可以直接宣传只有一个特定的中央已经知道蓝牙的地址)。因此,一个想法可能是间接宣传大量时间,而你没有一个可用的中央bd地址,当中央发现你的设备,你可以建立一个连接(初始连接将是耗时的原因,我在上面解释)。在那之后,每次你断开连接时,你都会直接向那个中心做广告,你会比无向广告程序更快地连接。但我要再说一遍定向广告很耗电,1。28秒后就会自动停止,没有任何广告数据(没有广告数据意味着你将不能连接到DSPS android & ios应用程序,你也将不得不重新配置580主机接受定向广告请求,你将必须知道你的中心的地址)。您可以使用或不使用安全性实现上述功能。根据您的设备的使用情况,以上可能是一种解决方案。此外,从我可以告诉你的是,你关心低功耗,你可以做的是保持无定向广告,并逐渐增加广告间隔,而没有活动(在一段时间内没有连接),或者, if there is a possibility you can place a button on the device to increase advertising interval so that the user can force a reconnection with no delays.
2.如果您在.intv_min和.intv_max中设置了MS_TO_BLESLOTS(10000)的值,则您的发布间隔将设置为10秒,这意味着设备将休眠约10秒,然后退出休眠模式并自动再次休眠。你不能通过advertising命令控制广告包的数量,你必须实现一个计数器,以计数从你的设备发出的广告消息。
3.按照规范,广告的最大值是10.24秒,如果你想要更多,你必须通过使用ke_timer实现一个自定义的广告方案。定时器可以以300秒(5分钟)为最大值,但你可以唤醒和重置定时器,并回到睡眠。
由于MT_dialog
2.因为我希望我的设备可以用电池工作3年,所以直接做广告不适合我
你说我可以“执行一个计数器来计算发出的广告信息”。
我认为解决我的问题是一个好主意,但我不知道在什么位置可以改变它。
**************************************
我试过改变它
a.close睡眠
b.open printf控制台
在app_easy_gap_undirected_advertsie_start()中添加一个adv_counter++
并编写一个arch_printf
但是我发现这个函数只执行一次。
奇怪的是,我的安卓应用也可以扫描它。还有其他的职位和职能吗
发广告?
3.如何实现自定义广告方案?
你能给我一个详细的描述或例子吗?
非常感谢
亲爱的对话框
我想用另一个定时器来解决上面提到的问题,把代码粘贴到这里
空白adv_timer_fsm(空白)
{
static uint8_t adv_state = ADV_INIT_STATE;
arch_printf(“adv_timer_fsm \ r \ n \ r \ n”);
开关(adv_state)
{
案例ADV_INIT_STATE:
arch_printf(“ADV_INIT_STATE \ r \ n \ r \ n”);
spss_env。Adv_tmr_hndl = app_easy_timer(10, spss_env. env);adv_timer_cb);
adv_state = ADV_MODIFY_STATE;
打破;
案例ADV_MODIFY_STATE:
arch_printf(“停止advtise \ r \ n \ r \ n”);
app_easy_gap_advertise_stop ();
spss_env。Adv_tmr_hndl = app_easy_timer(6000, spss_env. env)adv_timer_cb);/ /第一季度
adv_state = ADV_CYCLE_STATE;
打破;
案例ADV_CYCLE_STATE:
arch_printf(“ADV_CYCLE_STATE \ r \ n \ r \ n”);
default_advertise_operation ();
spss_env。Adv_tmr_hndl = app_easy_timer(300, spss_env. env)Q2 adv_timer_cb);
adv_state = ADV_MODIFY_STATE;
打破;
默认值:
打破;
}
}
我的问题是:
Q1: Q1位置的代码(上面的代码)是否可以停止广告并休眠60秒?60秒后,设备被唤醒
计时器的spss_env.adv_tmr_hndl
Q2: Q2位置的代码(上面的代码)这个位置的代码可以开始广告并继续3秒吗?(我已经将通告间隔修改为100,
这个值的最小值是多少?
我有一个测试,但结果不是很理想。当连接时,我的奴隶发送数据包给主人,主人有ack。我收到后
ack,我调用app_easy_gap_disconnect(spss_env.con_info.conidx),它有一点断开(实际上,我只确定user_on_disconnect已经执行)。但不久之后
它再次连接(我想让它休眠1分钟,并由计时器spss_env唤醒。Adv_tmr_hndl = app_easy_timer(6000, spss_env. env)adv_timer_cb);.
你能给我一个修改的建议吗?
非常感谢
嗨RandyYu,
我不明白你试图用上面的代码做什么。
我不知道您的广告消息的测量将如何帮助您连接更快,app_easy_gap_undirected_advertise_start()只执行一次,然后设备发布您设置的间隔。为了计算您已发出的广告消息,您可以遵循信标项目中的示例。请检查app_asynch_trm()函数中的实现,该实现将检查BLE的最后一个状态,如果它是BLE_END_EVT,并将增加app_advertise_counter,您可以使用这个实现来计数您的消息。
由于MT_dialog
我有改变如你说,但计数器不准确,我已经设置的MAX计数器= 20,但我有嗅探49。
嗨RandyYu,
我不确定比较与嗅探器是一个可靠的比较,据我所知,如果实现正确,方法是相当准确的,因为你是跟踪每个BLE事件的结束。只要记住,为了跟踪广告信息,你应该处于广告状态,如果不是,计数器也将测量相关事件。关于嗅探器与方法我已经提到,柜台将测量一次广告在每个频道(37、38、39)这将被视为3广告信息嗅探器,也嗅探器就我所知,不会显示广告信息如果有任何广告数据包碰撞。
由于MT_dialog