Я пытаюсь создать приложение для Android, которое подключается к двум модулям Bluetooth HC-05 (которые подключены к Arduino).
Я могу подключиться к ним обоим, и если я только отправляю Данные на один из них, все работает нормально, если я отправляю Данные на обоих, однако это может работать в течение некоторого времени, но это останавливает отправку на одно устройство,
На одном телефоне это приводит к сбою приложения, на другом телефоне ничего (без исключений или уведомлений о том, что соединение было прервано) не происходит.
Итак, я проверил Интернет, и в большинстве случаев он говорит, что вы можете подключиться к двум устройствам Bluetooth одновременно (например, здесь ).
Я не могу понять, чтоПричина этой ошибки есть.Но у меня есть несколько идей.Может быть, кто-то может тогда подтвердить, или знает реальную проблему или, что еще лучше, решение:)
Поскольку я использую два модуля Bluetooth HC-05, у них одинаковый UUID, что, как я полагаю, может быть проблематичным, поскольку этот UUID являетсяне уникален для одного устройства.Но я не уверен, что это проблема.Может быть, кто-то знает, как изменить UUID HC-05?
Обратите внимание, что я посылаю данные с произвольными интервалами на обе машины.Так что я думаю, что это может вызвать проблему.Это в какой-то момент приложение пытается отправить на два устройства одновременно, и это вызывает проблемы.Так что я подумываю о том, чтобы сделать несколько решений для этого.Но я не уверен, как.Может быть, какой-то стек, в который я помещаю Данные и устройство, на которое нужно отправить их, а затем я отправляю их Элемент за элементом с некоторой задержкой между ними.Таким образом, отправка данных несколько «синхронизирована».Однако я не знаю, является ли это хорошим решением, и я благодарен за любой совет, который я мог бы получить.
Так что сейчас я подключаюсь к таким устройствам:
public void connect(String mac){
Set<BluetoothDevice> bondedDevices = BluetoothAdapter.getDefaultAdapter().getBondedDevices();
for (BluetoothDevice devices : bondedDevices)
if (devices.getAddress().equals(mac)) {
this.device = devices;
break;
}
if (this.device == null) {
//some error handling
} else {
UUID id= UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
try {
this.socket = this.device.createRfcommSocketToServiceRecord(id);
this.socket.connect();
this.outputStream = this.socket.getOutputStream();
final InputStream st = this.socket.getInputStream();
//some more init stuff
} catch (Exception e) {
e.printStackTrace();
this.disconnect();
}
}
}
И я отправляюданные вроде этого (без лишнего кода):
byte[] send = new byte[9];
//fill Data
try {
this.outputStream.write(send);
this.outputStream.flush();
} catch (Exception e) {
//Displaying Toast with Error message
Toast.makeText(DirtyCode.appcont, e.getMessage(), Toast.LENGTH_LONG).show();
Log.e("SEND EXCEPTION:" + device.getName(), e.getMessage());
e.printStackTrace();
return false;
}
Так что я тоже думал, что мне может понадобиться как-то использовать BluetoothServerSocket.Но я не уверен в этом.
Соединение прекрасно работает только с одним подключенным устройством или с двумя подключенными устройствами, но только с отправкой на одно устройство (отправка очень случайных данных на второе работает обычно очень долго, прежде чем возникают проблемы).
Я пытался решить эту проблему долгое время, но не могу заставить ее работать, поэтому любая помощь творчески оправдана.