R_Z*_*Zee 9 android bluetooth raspberry-pi
我无法使用应用程序通过蓝牙将我的智能手机连接到我的覆盆子pi.
我的情况:
我正在开发一个基于覆盆子pi的蓝牙可控应用程序.我可以通过蓝牙连接到树莓派,并使用应用程序"蓝牙终端"通过RFCOMM插槽发送和接收数据.树莓派不断收听RFCOMM连接.
我的目标:
我想开发一个应用程序,用户可以通过蓝牙连接覆盆子pi.该应用程序应打开RFCOMM套接字,以便它可以与pi通信.
我的问题:
我的应用程序无法连接到覆盆子pi,因为我不知道覆盆子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();
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我点击按钮进行连接时,这是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)
Run Code Online (Sandbox Code Playgroud)
总结如下:
所以,为了能够从Android应用程序连接raspberry pi,我是否:
我真的想知道如何解决这个问题,所以任何帮助将不胜感激.
与您开始时的方式类似,蓝牙连接需要设备地址和服务UUID.
设备地址(例如:00:72:02:97:33:2C)可以从配对设备中获取(或通过允许发现),有关详细信息,请参阅Android示例应用程序.
UUID(例如:00001101-0000-1000-8000-00805F9B34FB)通常在使用特定标识符运行蓝牙服务的服务器部分上定义.
现在,如果您想避免使用最后一部分并且只想传达简单数据,您可以使用蓝牙串口依赖默认值.来自Android蓝牙文档:
提示:如果要连接蓝牙串行板,请尝试使用众所周知的SPP UUID 00001101-0000-1000-8000-00805F9B34FB.但是,如果您要连接到Android对等设备,请生成您自己的唯一UUID.
android示例BluetoothChat是如何处理2个Android设备之间的双向通信的一个很好的例子.
Android蓝牙文档 https://developer.android.com/guide/topics/connectivity/bluetooth.html
蓝牙聊天示例 https://developer.android.com/samples/index.html.请注意,您只需选择文件>新建>示例项目并在Android Studio中搜索蓝牙聊天即可检查此项目.
使用此Python示例可以找到在raspberry pi上启动此类服务的处理:http://blog.davidvassallo.me/2014/05/11/android-linux-raspberry-pi-bluetooth-communication/.只是在线提供的众多样本中的一个.此示例包含Android代码.
如果你想使用C++代码在raspberry Pi上实现这样的东西,我可以推荐来自http://people.csail.mit.edu/albert/bluez-intro/x502.html的文档.
该链接具有服务器和客户端的示例代码.由于这是使用RFCOMM规范和默认串行端口UUID,因此无需指定任何UUID.
如果你研究如何从Android连接到这个,你可能最终会找到BlueTerm安卓应用程序.这是一个开源应用程序,因此您可以在https://github.com/johnhowe/BlueTerm/tree/master/src/es/pymasde/blueterm找到所有来源.在那里你可以找到这个串口服务的UUID:
private static final UUID SerialPortServiceClass_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
Run Code Online (Sandbox Code Playgroud)
完整的BluetoothSerialService类是管理蓝牙连接的好方法,包括将消息处理回UI.
归档时间: |
|
查看次数: |
29253 次 |
最近记录: |