VID 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命令未能完整發出。
希望得到專業人士的指點。
新聞熱點
疑難解答