В настоящее время я использую BLE Arduino Nano 33 для вычисления измерения угла из IMU и добавления этих значений к характеристикам Bluetooth c в рамках услуги. Я создаю сервис и характеристики c, используя библиотеку ArduinoBLE:
BLEService angleService("1826");
BLEFloatCharacteristic rollBLE("2A57", BLERead | BLENotify);
В моей настройке я задаю имя устройства, сервис и характеристики c. Первоначально я записываю значение 0 в характеристику c:
BLE.setLocalName("acsAssist");
BLE.setAdvertisedService(angleService);
angleService.addCharacteristic(rollBLE);
BLE.addService(angleService);
rollBLE.writeValue(0);
BLE.advertise();
В моем l oop, после выполнения моих вычислений, я соответственно изменяю значение характеристики c:
rollBLE.writeValue(posiRoll); // posiRoll is my calculation
Когда я использую стороннее приложение, такое как nrfConnect, на моем Android устройстве, я могу найти свое устройство и подключиться к нему. Служба и характеристики c, которые я определил, присутствуют, и значение изменяется, как и ожидалось:
Вот вывод из приложения nrfConnect
Теперь я пытаюсь вручную подключиться к этому устройству в приложении Android, которое я создаю, чтобы я мог отобразить это изменяющееся значение на экране для просмотра пользователем. Я включаю в свой манифест все следующие разрешения:
<uses-feature android:name="android.hardware.bluetooth" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Я начинаю с проверки того, что на используемом пользователем устройстве есть адаптер Bluetooth и он включен:
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) { // Bluetooth not supported
Toast.makeText(getActivity(), "This device does not support Bluetooth! Use a Bluetooth enabled device.", Toast.LENGTH_LONG).show();
}
if (!bluetoothAdapter.isEnabled()) { // If adapter is not enabled, request to enable it from within the app
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, 1);
}
if (bluetoothAdapter.isDiscovering()) {
bluetoothAdapter.cancelDiscovery();
}
Поскольку я знаю адрес MA C arduino, я пытаюсь получить устройство, используя этот адрес MA C. Когда я это делаю, я могу просматривать такие атрибуты, как имя устройства и адрес. Тем не менее, когда я пытаюсь просмотреть UUID в Arduino, я получаю «ноль». Следующий код:
BluetoothDevice arduino = bluetoothAdapter.getRemoteDevice("E5:A5:53:32:BD:7C");
Log.i("DEVICES", String.valueOf(arduino.getName()));
Log.i("DEVICES", String.valueOf(arduino.getAddress()));
Log.i("DEVICES", String.valueOf(arduino.getUuids()));
производит вывод в logcat:
02-11 12:09:02.862 29503-29503/com.seniorproject.acsAssistApp I/DEVICES: acsAssist
02-11 12:09:02.862 29503-29503/com.seniorproject.acsAssistApp I/DEVICES: E5:A5:53:32:BD:7C
02-11 12:09:02.868 29503-29503/com.seniorproject.acsAssistApp I/DEVICES: null
Я пытался выяснить, как подключить мое приложение к arduino и просмотреть сервисы, которые Я создал, но я не знаю, как это сделать. Все руководства, вопросы и ответы и документация, которые я пытался найти, связанные с этим, оставили меня безнадежным и растерянным. Любое руководство о том, как это сделать, будет высоко оценено.
PS: Я прошу прощения, если мое форматирование для этого представления плохое. Я впервые задаю вопрос о переполнении стека. Я также совершенно новый новичок с Arduino и Android Development.