Модуль Bluetooth HM-10 - BLE 4.0 теряет связь

Кто -нибудь пробовал использовать модуль Bluetooth HM-10?

Я могу подключиться к нему с помощью устройства Android и передать предварительно определенный PIN-код. Основываясь на возврате UART, соединение успешно (модуль возвращает OK+CONN - означает, что соединение установлено)

Однако через несколько секунд (2-3) UART получает OK+LOST; означает, что связь была потеряна. Кроме того, светодиод начинает мигать (обычно, когда соединение активно, оно горит)

Это нормальное поведение для блютуса вообще или модуля HM-10.

Это веб-сайт продукта: http://www.jnhuamao.cn/bluetooth.asp?ID=1

2 ответа

Удалось ли вам решить эту проблему? Если нет, то я почти уверен, что проблема в версии прошивки.

Если вы отправите AT+VERS? на ваших модулях, с какой версией он отвечает?

Я не уверен, но HM -10 не поддерживает rfcom. Это означает, что вы должны использовать функциональность GATT для общения. Сущность BLE - это использование минимального пакета данных, насколько это возможно, поэтому BLE не поддерживает соединение все время и использует что-то вроде состояния (атрибутов). Итак, несколько строк кода, например, как работать с BLE:
1.

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

Это инициирование устройства, так же, как и с простым Bluetooth, где DEVICE_ADDR - это MAC вашего BLE(как найти этот адрес вы можете найти в Google или переполнении стека, это тривиально)

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() имеет несколько uuids для связи (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 Об использовании UUID: не уверен, но в моем случае я нахожу его с помощью следующего AT+UUID [Получить / Установить систему SERVER_UUID] -> Ответ +UUID=0xFFE0, AT+CHAR [Получить / установить систему CHAR_UUID] - Ответ +CHAR=0xFFE1. Вот почему я делаю вывод, что UUID, который я должен использовать, например: "0000[ffe0/ равно 0xFFE0 из ответа AT]-0000-1000-8000-00805f9b34fb"

Другие вопросы по тегам