修改蓝牙设备的名称
时间:2023-01-14 22:00:00
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未能完全发出命令。
希望得到专业人士的指导。