2014-07-16 71 views
0

有没有人试过使用HM-10蓝牙模块?HM-10蓝牙模块 - BLE 4.0保持断开连接

我可以使用Android设备与它配对并传递预定义的PIN码。基于UART返回,配对成功(模块返回OK + CONN - 表示连接已建立)

但是,几秒钟后(2-3),UART接收到OK + LOST;意味着连接丢失。此外,LED开始闪烁(通常,当连接处于活动状态时,它保持点亮状态)

这是蓝牙一般情况下还是HM-10模块的正常行为。

这是该产品的网站:http://www.jnhuamao.cn/bluetooth.asp?ID=1

+0

我也有问题与BLE模块。我尝试将它配对。放入PIN码..终端回馈+ CONNECTED(我认为它的另一个固件)。比它不在列表中连接的设备。但在Android它说配对...(不在有界设备:() –

+0

什么是你的Android版本? –

+0

嗨Johan,即时通讯使用安卓4.0.4 – codex10

回答

0

是你能解决这个问题吗?如果没有,我几乎可以肯定问题在于固件版本。

如果您发送AT + VERS?在你的模块上,它响应什么版本?

+0

我们已经停止了BLE模块的开发,所以现在没有进展,一旦我们重新开始,我会尝试当我找到答案时,再次更新这个问题 – codex10

0

我不确定,但HM-10不支持rfcom。这意味着您必须使用GATT功能进行通信。 BLE的实体尽可能使用最小数据包,因此BLE不会始终保持连接并使用状态[属性]之类的东西。 所以,几行代码,例如,如何与BLE工作:
1.

BluetoothAdapter mBluetoothAdapter = mBluetoothManager.getAdapter(); 
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(DEVICE_ADDR); 

这是设备发起,同样喜欢用简单的蓝牙,其中DEVICE_ADDR是您的BLE的MAC(如何找到这个地址,你可以找到在谷歌或堆栈溢出,它的琐碎)

2. 

    BluetoothGattService mBluetoothGattService; 
    BluetoothGatt mBluetoothGatt = device.connectGatt(this, false, mGattCallback); 
    BluetoothGattCallback mGattCallback = new BluetoothGattCallback() { 
      @Override 
      public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { 
       if (newState == BluetoothProfile.STATE_CONNECTED) { 
        mBluetoothGatt.discoverServices(); 
       } 
      } 

      @Override 
      public void onServicesDiscovered(BluetoothGatt gatt, int status) { 
       if (status == BluetoothGatt.GATT_SUCCESS) { 
        List<BluetoothGattService> gattServices = mBluetoothGatt.getServices(); 

        for(BluetoothGattService gattService : gattServices) { 
         if("0000ffe0-0000-1000-8000-00805f9b34fb".equals(gattService.getUuid().toString())) 
         { 
          mBluetoothGattService = gattService; 
         } 
        } 
       } else { 
        Log.d(TAG, "onServicesDiscovered received: " + status); 
       } 
      } 
     }; 

那么,这是什么意思代码:如果u可以这部分代码看,我描述了如何GATT服务的发现。这项服务需要“属性”通信。 gattService.getUuid()几乎没有用于通信的uid(我的模块中有4个),其中一些用于RX,一些用于TX等。“0000ffe0-0000-1000-8000-00805f9b34fb”是用于通信的uuid之一为什么我检查它。 代码的最后一部分是消息发送:

BluetoothGattCharacteristic gattCharacteristic =   mBluetoothGattService.getCharacteristic(UUID.fromString("0000ffe1-0000-1000-8000-00805f9b34fb")); 
String msg = "HELLO BLE =)"; 
     byte b = 0x00; 
     byte[] temp = msg.getBytes(); 
     byte[] tx = new byte[temp.length + 1]; 
     tx[0] = b; 
for(int i = 0; i < temp.length; i++) 
      tx[i+1] = temp[i]; 

     gattCharacteristic.setValue(tx); 
     mBluetoothGatt.writeCharacteristic(gattCharacteristic); 

发送消息后含有坚持下去,你可以再发送消息,也可以关闭连接。 更多信息,你可以找到https://developer.android.com/guide/topics/connectivity/bluetooth-le.html。 PS:您的模块的MAC地址可以找到带有扫描器代码或AT cmd: 在我的固件AT + ADDR或AT + LADDR 关于UUIDs用法:不确定,但在我的情况下,我发现它与下一个AT + UUID [获取/设置系统SERVER_UUID] - >响应+ UUID = 0xFFE0,AT + CHAR [获取/设置系统CHAR_UUID] - 响应+ CHAR = 0xFFE1。这就是为什么我得出UUID,我必须使用fe“0000 [ffe0 /是从AT响应0xFFE0] -0000-1000-8000-00805f9b34fb”