蓝牙设备改参数教程_修改蓝牙设备的名称

VID app具有一个修改当前与其连接的蓝牙设备名称的功能,以添加一些设备个性化的元素。

修改蓝牙设备的名称并不是一件困难的事情,按照手册规定的AT指令通过串口发送到蓝牙设备即可。不过手机要通过蓝牙连接的无线通信方式来修改蓝牙设备的名称,则并不简单。原因在于:手机发送的遵循AT指令格式的数据会被蓝牙当作普通数据内容而传送到单片机;

蓝牙设备处于连接的状态下,AT指令并不能完成对设备名称的修改。

解决办法:必须由单片机通过串口来进行AT指令的操作;

App发送携带有用户输入的自定义名称信息的命令给单片机;然后自动取消蓝牙连接;

单片机在解读手机发来的命令后,通过AT指令将蓝牙设备的名称修改为用户所输入的名称。

当中遇到了一个问题,使耗费了两天:

在确保单片机程序的正确性之后,

iOS源代码如下:

-(void) setDevice_Name {

[self Bluetooth_Send : command ]; //发送带有用户输入的自定义名称信息的命令command;

if ( sensor.activePeripheral.state == CBPeripheralStateConnected) { //判定是否为连接状态

[sensor.manager cancelPeripheralConnection : sensor.activePeripheral ] ; //取消连接

Sensor.activePeripheral = nil;

}

}

Ps:蓝牙连接及其它相关操作的代码直接引用了蓝牙模块供应商提供的例程,所以不必提供上来了。

现象是:成功修改蓝牙设备名称的机率极低!

跟踪单片机程序的运行发现:单片机并没有收到手机端发来的命令。

在修改代码之后,代码大意如下:

-(void)setDevice_Name {

[self Bluetooth_Send : command ]; //发送带有用户输入的自定义名称信息的命令command;

[NSTimer scheduledTimerWithInterval : 1.0f target : self selector : @selector(disconnectBLE) userInfo : nil repeats :NO]; //在延时1s后,执行disconnectBLE;

}

-(void)disconnectBLE {

if ( sensor.activePeripheral.state == CBPeripheralStateConnected) { //判定是否为连接状态

[sensor.manager cancelPeripheralConnection : sensor.activePeripheral ] ; //取消连接

Sensor.activePeripheral = nil;

}

}

成功实现了修改名称的功能。

作为非计算机/app开发专业人员,未能理解其中的原因。个人猜想为:程序并非在将command发送完成之后才执行取消连接。而是先把command读取到发送缓冲区,在另一线程中进行发送,而取消连接的操作在同步进行,导致command命令未能完整发出。

希望得到专业人士的指点。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值