蓝牙模块hc-05向android app每隔10ms发送一组数据,在20多秒之后双方就无法继续通信
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
打开蓝牙的HCI log ,抓取hci log 看看通讯情况 ,hci log 可以用 wireshark 软件查看 hci log文件一般会保存SD卡目录下,也有的手机保持其他路径,可以找 /etc下的蓝牙配置文件查看保持路径