【发布时间】:2016-03-19 09:17:27
【问题描述】:
我无法使用应用程序通过蓝牙将智能手机连接到我的树莓派。
我的情况:
我正在开发一个基于树莓派的蓝牙可控应用程序。我能够通过蓝牙连接到树莓派,并使用应用程序“蓝牙终端”通过 RFCOMM 套接字发送和接收数据。树莓派一直在监听 RFCOMM 连接。
我的目标:
我想开发一个应用程序,用户可以在其中通过蓝牙连接树莓派。应用应打开 RFCOMM 套接字,以便与 pi 通信。
我的问题:
我的应用程序无法连接到树莓派,因为我不知道树莓派的 UUID,我认为这可能是问题所在。
我的代码:
我对 java 编程很陌生,如果你看到任何奇怪的东西,请纠正我。这是我正在尝试连接的方法。
public void BTConnect() {
final UUID MY_UUID = UUID.fromString("0000110E-0000-1000-8000-00805F9B34FB");
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
BluetoothSocket socket = null;
String RPi_MAC = "XX:XX:XX:XX:XX:XX";
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
// If there are paired devices
if (pairedDevices.size() > 0) {
// Loop through paired devices
for (BluetoothDevice device : pairedDevices) {
if (device.getAddress().equals(RPi_MAC)) {
try {
socket = device.createInsecureRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e0) {
Log.d("BT_TEST", "Cannot create socket");
e0.printStackTrace();
}
try {
socket.connect();
} catch (IOException e1) {
try {
socket.close();
Log.d("BT_TEST", "Cannot connect");
e1.printStackTrace();
} catch (IOException e2) {
Log.d("BT_TEST", "Socket not closed");
e2.printStackTrace();
}
}
}
}
}
}
当我点击按钮连接时,这是android studio的输出:
W/BluetoothAdapter: getBluetoothService() called with no BluetoothManagerCallback
D/BT_TEST: Cannot connect
W/System.err: java.io.IOException: read failed, socket might closed or timeout, read ret: -1
W/System.err: at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:599)
W/System.err: at android.bluetooth.BluetoothSocket.readInt(BluetoothSocket.java:610)
W/System.err: at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:333)
W/System.err: at com.example.gebruiker.soundslikepi.MainActivity.BTConnect(MainActivity.java:80)
W/System.err: at com.example.gebruiker.soundslikepi.MainActivity$1.onClick(MainActivity.java:39)
W/System.err: at android.view.View.performClick(View.java:4856)
W/System.err: at android.view.View$PerformClick.run(View.java:19956)
W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err: at android.os.Looper.loop(Looper.java:211)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5373)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
总结:
所以,为了能够从安卓应用程序连接树莓派,我是:
- 需要知道树莓派的 UUID 是什么,如果需要,我该如何找到?
- 需要在我的 Android 应用中使用不同的方法吗?
我真的很想知道如何解决这个问题,所以任何帮助都将不胜感激。
【问题讨论】:
-
我想知道您是否真的找到了解决问题的方法。我现在也有同样的需要;我需要通过蓝牙将我的 Android 应用程序连接到 Raspberry Pi。我正在使用 bluecove 蓝牙库。但我不知道如何获取 Raspberry Pi 的 UUID,也不知道在 Android 应用程序中应该如何处理它。你有什么想法吗?
-
不,我还没有找到解决方案。如果我找到了,我会更新这个主题
-
所以今天我决定继续尝试通过蓝牙连接我的树莓派和我的安卓手机......成功了!我用 uuid 再次尝试,我发现树莓派的 uuid i 是蓝牙设备的基本 uuid (0000XXXX-0000-1000-8000-00805F9B34FB),在 X 上具有 RFCOMM 特定的 16 位 uuid。我可以使用“sdptool browse local”在互联网和树莓派上找到它
-
我也在寻找类似的应用程序希望通过蓝牙在 RPi 和 Android 之间进行通信。您能否分享您的 RPi 侧面示例我已经检查了基于命令的解决方案以使用 RFCOMM 进行通信,但不确定如何将其集成到应用程序中。在 RPi 方面,您是否使用过任何库来处理数据通信?
标签: android bluetooth raspberry-pi