有人试过使用HM-10蓝牙模块吗?
我可以使用 Android 设备与它配对并传递预定义的 PIN。根据UART返回,配对成功(模块返回OK+CONN - 表示连接建立)
然而,几秒钟后(2-3),UART收到OK+LOST;表示连接丢失。此外,LED 开始闪烁(通常,当连接处于活动状态时,它会保持亮起)
这是一般蓝牙还是 HM-10 模块的正常行为。
有人试过使用HM-10蓝牙模块吗?
我可以使用 Android 设备与它配对并传递预定义的 PIN。根据UART返回,配对成功(模块返回OK+CONN - 表示连接建立)
然而,几秒钟后(2-3),UART收到OK+LOST;表示连接丢失。此外,LED 开始闪烁(通常,当连接处于活动状态时,它会保持亮起)
这是一般蓝牙还是 HM-10 模块的正常行为。
我不确定,但 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);
}
}
};
那么,这段代码是什么意思:如果你可以从这部分代码中看到,我描述了 GATT 服务是如何找到的。“属性”通信需要此服务。gattService.getUuid() 很少有用于通信的 uuid(我的模块中有 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 地址可以通过 ble 扫描代码或 AT cmd:在我的固件 AT+ADDR 或 AT+LADDR 关于 UUID 使用:不确定,但在我的情况下,我使用下一个 AT+UUID [Get /设置系统 SERVER_UUID] -> 响应 +UUID=0xFFE0, AT+CHAR [获取/设置系统 CHAR_UUID] - 响应 +CHAR=0xFFE1。这就是为什么我得出结论,我必须使用 fe “0000 [ffe0/is 0xFFE0 from AT response]-0000-1000-8000-00805f9b34fb”的 UUID