繁体   English   中英

带有android和raspberrypi的蓝牙

[英]bluetooth with android and raspberrypi

我要做的就是将我的andriod标签连接到raspberrypi。 我已经搜索过并且正在使用示例中找到的代码,但是仍然遇到麻烦。 当我在pi上运行python脚本并在我的android设备上使用Blueterm时,我可以在两者之间建立通信。 我什至可以发送和接收字符串。

但是,使用我自己的androaid应用程序时,我遇到了麻烦,尝试连接时遇到异常。 任何帮助将不胜感激。

python代码:

from bluetooth import *

server_sock=BluetoothSocket( RFCOMM )
server_sock.bind(("",PORT_ANY))
server_sock.listen(1)

port = server_sock.getsockname()[1]

uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee"

x = 0

while x<3:
        print "Waiting for connection on RFCOMM channel %d" % port

        client_sock, client_info = server_sock.accept()
        print "Accepted connection from ", client_info
        x = 1

        while x == 1:
                try:
                        data = client_sock.recv(1024)
                        if len(data) == 0: break
                        print "received [%s]" % data

                        if data == 'temp':
                                data = str(read_temp())+'!'
                        elif data == 'a':
                                data = 'A A A!'
                        elif data == 'b':
                                data = 'B B B'
                        else:
                                data = 'WTF!'
                                x = 5
                        client_sock.send(data)
                        print "sending [%s]" % data

                except IOError:
                        pass


except KeyboardInterrupt:

                        print "disconnected"

                        client_sock.close()
                        server_sock.close()
                        print "all done"

                        break

if x == 5:
        print "disconnected"
        client_sock.close()
        server_sock.close()
        print "all done"

Android代码:

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import java.io.IOException;
import java.util.Set;
import java.util.UUID;

public class MainActivity extends AppCompatActivity {

    Button tryBluetoothButton;
    BluetoothSocket mmSocket = null;
    BluetoothDevice mmDevice = null;
    BluetoothAdapter mBluetoothAdapter;

    public void tryBT(View view) {
        Log.i("myStuff", "Button Clicked");
        sendBtMsg("a");
    }

    public void sendBtMsg(String msg2send) {

        UUID uuid = UUID.fromString("94f39d29-7d6d-437d-973b-fba39e49d4ee");

        try {
            mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
            mmSocket.connect();
            Log.i("myStuff", "Conected OK!");

        } catch (IOException e) { }{

            Log.i("myStuff", "EXCEPTION THROWN");
            }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tryBluetoothButton = (Button) findViewById(R.id.tryBluetoothButton);

        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

        if (!mBluetoothAdapter.isEnabled()) {
            Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableBluetooth, 0);
            Log.i("myStuff", "Bluetooth Enabled");
        } else {
            Log.i("myStuff", "Bluetooth Already Enabled");
        }

        Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
        if (pairedDevices.size() > 0) {
            for (BluetoothDevice device : pairedDevices) {
                if (device.getName().equals("raspberrypi"))
                {
                    mmDevice = device;
                    Log.i("myStuff", "Device equals " + device.getName());
                    break;
                }
            }
        }
    }
}

运行应用程序时从Android Studio登录

01-20 16:33:42.983 8994-8994/paul.piconnect2 I/myStuff: Bluetooth Already Enabled
01-20 16:33:43.003 8994-8994/paul.piconnect2 I/myStuff: Device equals raspberrypi
01-20 16:33:48.889 8994-8994/paul.piconnect2 I/myStuff: Button Clicked
01-20 16:33:50.831 8994-8994/paul.piconnect2 I/myStuff: EXCEPTION THROWN
01-20 18:30:53.092 12714-12714/paul.piconnect2 I/myStuff: EXCEPTION THROWN
                                                      java.io.IOException: read failed, socket might closed or timeout, read ret: -1
                                                          at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:582)
                                                          at android.bluetooth.BluetoothSocket.readInt(BluetoothSocket.java:593)
                                                          at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:378)
                                                          at paul.piconnect2.MainActivity.sendBtMsg(MainActivity.java:35)
                                                          at paul.piconnect2.MainActivity.tryBT(MainActivity.java:25)
                                                          at java.lang.reflect.Method.invokeNative(Native Method)
                                                          at java.lang.reflect.Method.invoke(Method.java:515)
                                                          at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270)
                                                          at android.view.View.performClick(View.java:4633)
                                                          at android.view.View$PerformClick.run(View.java:19270)
                                                          at android.os.Handler.handleCallback(Handler.java:733)
                                                          at android.os.Handler.dispatchMessage(Handler.java:95)
                                                          at android.os.Looper.loop(Looper.java:146)
                                                          at android.app.ActivityThread.main(ActivityThread.java:5602)
                                                          at java.lang.reflect.Method.invokeNative(Native Method)
                                                          at java.lang.reflect.Method.invoke(Method.java:515)
                                                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
                                                          at dalvik.system.NativeStart.main(Native Method)

我一直在寻找解决方案,并将继续这样做。 我将树莓派和三星标签配对。 我什至将标签页视为受信任的设备。 我对python代码很满意,因为当我使用选项卡运行blueterm时,输入“ a”或“ b”时会得到预期的响应。 任何帮助都会很棒。 谢谢。

给定抛出异常并通过注释确认权限设置正确的异常,也许这是这些现有答案中已解决的问题:

IOException:读取失败,套接字可能已关闭-Android 4.3上的蓝牙

BluetoothSocket.connect()引发异常“读取失败”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM