Модуль Bluetooth HM-10 - BLE 4.0 продолжает терять соединение

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

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

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

Это нормальное поведение для bluetooth в целом или для модуля HM-10.

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


person codex10    schedule 16.07.2014    source источник
comment
У меня тоже проблемы с модулем BLE. Я пытаюсь соединить его. Вставьте пин-код .. Терминал отдайте + CONNECTED (думаю это другая прошивка). Его нет в списке подключенных устройств. Но в android он сказал сопряжение ... (не в ограниченных устройствах :()   -  person Johan Hoeksma    schedule 13.09.2014
comment
Какая у вас версия андроида ??   -  person Johan Hoeksma    schedule 13.09.2014
comment
Привет, Йохан, я использую Android 4.0.4   -  person codex10    schedule 15.09.2014
comment
Хм. Хорошо, может попробовать с каким-нибудь телефоном с 4.4. В нем исправлены некоторые ошибки (по словам Google). Думаю, я тоже закажу HM-10.   -  person Johan Hoeksma    schedule 15.09.2014


Ответы (1)


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

person once2go    schedule 07.09.2015