BLE-NRF51822教程8-动态广播
本讲接收如何实现动态广播。
教程基于 9.0 sdk中的 Uart例子。
实现动态广播的方法是 广播->停止广播->修改参数->重启广播
所以我们通过一个定时器来周期性的 关闭广播然后再修改广播数据之后再开启广播。
Sdk 9.0中的广播搞了好几个模式,做的有点麻烦,所以我对他做了比较大的改动。
首先 在main.c中 中的advertising_init函数需要改动。
主要修改还添加了红色部分。将 flag 改为了GENERAL。后面又将广播超时设置为0从而实现无线广播。
去掉了根据广播模式来设置广播数据的函数以及对扫描响应数据的设置。
void advertising_init(void)
{
uint32_t err_code;
ble_advdata_t advdata;
ble_advdata_t scanrsp;
memset(&advdata,0, sizeof(advdata));
advdata.name_type = BLE_ADVDATA_FULL_NAME;
advdata.include_appearance = false;
advdata.flags =BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;
staticble_advdata_manuf_data_t manuf_data;
staticuint8_t mydata = 0; //这里用的是静态数据
//这里做的动态广播就是每次调用这个函
//数,广播数据中的厂商定义字段都会加1
manuf_data.company_identifier= 0xffaa;
manuf_data.data.size= 1;
manuf_data.data.p_data= &mydata;
mydata++; //每次调用后加1
advdata.p_manuf_specific_data= &manuf_data;
err_code= ble_advdata_set(&advdata, NULL);
APP_ERROR_CHECK(err_code);
}
然后是启动广播函数。 Main 函数中用的是ble_advertising_start。
我们这里不用。直接实现一个自己的简单函数
void myadv_start(void){
ble_gap_adv_params_tadv_params;
adv_params.interval =1600; //这里广播间隔设置为 1s
adv_params.timeout = 0;//这里设置0和上面的flag配合实现无线广播
adv_params.type =BLE_GAP_ADV_TYPE_ADV_IND;
adv_params.channel_mask.ch_37_off= 0;
adv_params.channel_mask.ch_38_off= 0;
adv_params.channel_mask.ch_39_off= 0;
adv_params.type = BLE_GAP_ADV_TYPE_ADV_IND;
adv_params.p_peer_addr= NULL;
adv_params.fp = BLE_GAP_ADV_FP_ANY;
adv_params.p_whitelist= NULL;
sd_ble_gap_adv_start(&adv_params);
}
之后我们做一个定时器。定时器的作用是以2s为周期 来关闭修改广播参数然后启动广播
在main 函数中做如下修改,创建一个 2s定时器 my_timer,并且开启它
int main(void)
{
uint32_t err_code;
bool erase_bonds;
uint8_t start_string[] = START_STRING;
app_timer_id_tmy_timer;
// Initialize.
APP_TIMER_INIT(APP_TIMER_PRESCALER, APP_TIMER_MAX_TIMERS, APP_TIMER_OP_QUEUE_SIZE, false);
uart_init();
app_timer_create(&my_timer,APP_TIMER_MODE_REPEATED,
my_timer_handler);
buttons_leds_init(&erase_bonds);
ble_stack_init();
gap_params_init();
services_init();
advertising_init();
conn_params_init();
app_timer_start(my_timer,APP_TIMER_TICKS(2000,APP_TIMER_PRESCALER), NULL);
myadv_start(); //这里用的自己定义的启动广播函数
for (;;)
{
power_manage();
}
}
然后实现自己的定时器的溢出处理函数
void my_timer_handler(void *p_contex){
int i =50;
sd_ble_gap_adv_stop(); //关广播
advertising_init(); //修改厂商自定义字段中的数据
while(i--);
myadv_start(); //开启广播
}
这里做的动态广播是动态修改广播数据中的厂商自定义字段。每次调用
advertising_init 函数的时候厂商自定义字段的值都会递增。在advertising_init函数中有注释说明
到这里动态广播要做的事已经做完了。
不过在uart例子中还需要做一个改动,我们创建了一个自己的timer,不过uart例子中定义的 允许使用的最大的 timer数就是它已经使用的数量,所以我们再添加自己的timer会出错。
修改办法:找到main.c文件中的APP_TIMER_MAX_TIMERS宏将其增大1就可以了
之后烧录程序就能看到广播数据中的厂商自定义字段在动态改变了

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP在现代化进程中仍然重要,因为它支持大量网站和应用,并通过框架适应开发需求。1.PHP7提升了性能并引入了新功能。2.现代框架如Laravel、Symfony和CodeIgniter简化开发,提高代码质量。3.性能优化和最佳实践进一步提升应用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。

PHP中使用clone关键字创建对象副本,并通过\_\_clone魔法方法定制克隆行为。1.使用clone关键字进行浅拷贝,克隆对象的属性但不克隆对象属性内的对象。2.通过\_\_clone方法可以深拷贝嵌套对象,避免浅拷贝问题。3.注意避免克隆中的循环引用和性能问题,优化克隆操作以提高效率。

PHP适用于Web开发和内容管理系统,Python适合数据科学、机器学习和自动化脚本。1.PHP在构建快速、可扩展的网站和应用程序方面表现出色,常用于WordPress等CMS。2.Python在数据科学和机器学习领域表现卓越,拥有丰富的库如NumPy和TensorFlow。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

WebStorm Mac版
好用的JavaScript开发工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

Atom编辑器mac版下载
最流行的的开源编辑器