蓝牙模块hc-05向android app每隔10ms发送一组数据,在20多秒之后双方就无法继续通信

发布于 2022-09-06 05:10:12 字数 2219 浏览 33 评论 0

hc-05和app显示处于连接状态,但相互之间发送消息已经接收不到,想问一下有没有做过碰到类似问题的,求指点?
补充一下,刚开始接收数组长度设置为16,双方只能相互发消息维持20秒,然后再相互发消息就都收不到了,将数组长度设为1024后,就没有这个问题出现,所以,是不是接收数组长度太小,无法及时处理接收的数据,然后造成了阻塞,形成了双发发的信息都不能被传递?这个只是我的猜想,求大神解答

另外,刚开始设置为16长度,是因为我们自定义协议的收发数据一帧只有9个字节,而且是不断在发,APP只要拿到一帧就好,剩下的就不管了,所以当时觉得接收数组不用定义太大。

接收的byte数组大小设置为多大合适?

/ 接收数据的线程 /
private class ConnectedThread extends Thread {

    private final BluetoothSocket mmSocket;
    private final InputStream mmInStream;
    private final OutputStream mmOutStream;
    
    public ConnectedThread(BluetoothSocket socket, String socketType) {
        Log.e(TAG, "create ConnectedThread: " + socketType);
        mmSocket = socket;
        InputStream tmpIn = null;
        OutputStream tmpOut = null;

        // Get the BluetoothSocket input and output streams
        try {
            tmpIn = socket.getInputStream();
            tmpOut = socket.getOutputStream();
        } catch (IOException e) {
            Log.e(TAG, "temp sockets not created", e);
        }

        mmInStream = tmpIn;
        mmOutStream = tmpOut;
        mState = STATE_CONNECTED;
    }

    @Override
    public void run() {
        int bytes;
        int i = 0;
        byte[] buffer = new byte[1024];
        CustomPacket packet = new CustomPacket();
        IOException exception = null;

        // Keep listening to the InputStream while connected
        while (mState == STATE_CONNECTED) {
      

            try {
               
                bytes = mmInStream.read(buffer);
                float[] value = packet.unpack(buffer);

                Message msg = new Message();
                msg.obj = value;
                msg.arg1 = BluetoothChatService.STATE_CONNECTED;
                msg.what = Constants.MESSAGE_READ;
                msg.setTarget(mHandler);
                msg.getTarget().sendMessage(msg);

            } catch (IOException e) {
                exception = e;
                Log.e(TAG, "disconnected", e);
                connectionLost();
                break;
            }
        }
        if(exception != null){
            //重新连接
            connect(mDevice,true);
        }
    }

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

能否归途做我良人 2022-09-13 05:10:12

打开蓝牙的HCI log ,抓取hci log 看看通讯情况 ,hci log 可以用 wireshark 软件查看 hci log文件一般会保存SD卡目录下,也有的手机保持其他路径,可以找 /etc下的蓝牙配置文件查看保持路径

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文