请教关于HC05蓝牙速传模块中间无法传输数据的问题

练提琴的工程师 2016-07-20 11:09:50
最近在着手攻坚无人机的基于Arduino蓝牙模块与手机间的通信的技术点。本来一切都已经非常顺利了,可以实现了我需要的数据在手机和蓝牙模块间的传输,然后利用Arduino模块作为MCU进行数据的处理。但是最近新出现了一个问题,说明如下,急求各路大神帮忙:

在手机蓝牙与基于Arduino扩展出来的蓝牙模块进行连接(这里应该不算是配对)后,开始一段时间内,手机与模块间的通信一切正常,可以完全正确且完整地接收到手机传来的数据,但是在过了一段时间后,不知道为何,Arduino模块接收不到手机经蓝牙传来的数据了,检查了配对连接,手机app程序执行情况一切都是正常的,也就是说,从手机通过蓝牙发送数据、信道的存在性等方面,至少表面上看都是正常的,如果需要重新恢复,则需要完全断开连接后重新连接两个模块,才能恢复到最开始的正常情况。

时间非常紧迫,我现在连问题可能出在哪都没思路了,更别提解决问题了,所以急求论坛内各路大神帮忙指一条明路,万分感谢!

下面附上手机app通过蓝牙发出信息的一段代码:

/*这是一个连接按钮,通过点击,可以实现手机蓝牙与在Arduino上扩展的蓝牙模块的连接*/
private class ConnectButtonListener implements OnClickListener {
public void onClick(View v) {
if (adapter != null) {
//Toast.makeText(myContext, "本机支持蓝牙功能!", Toast.LENGTH_SHORT).show();
if (!adapter.isEnabled()) {
//如果蓝牙设备不可用的话,创建一个intent对象,该对象用于启动一个Activity,提示用户启动蓝牙适配器
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivity(intent);
}

Set<BluetoothDevice> devices = adapter.getBondedDevices();
if (devices.size() > 0) {
for (Iterator iterator = devices.iterator(); iterator.hasNext(); ) {
BluetoothDevice device = (BluetoothDevice) iterator.next();
Toast.makeText(myContext, device.getAddress(), Toast.LENGTH_SHORT);
Log.d("Bondedtag", device.getAddress());
Log.d("Bondedtag", device.getName());

if (connect_result) {
break;
}

UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
try {
bluetoothSocket = device.createRfcommSocketToServiceRecord(uuid);
bluetoothSocket.connect();
Log.d("mytag", "Connected!");
Toast.makeText(myContext, "已连接", Toast.LENGTH_SHORT).show();
connect_result = true;
} catch (IOException e) {
e.printStackTrace();
}
}
}
adapter.startDiscovery();
} else {
Toast.makeText(myContext, "本机不支持蓝牙功能!", Toast.LENGTH_SHORT).show();
}
}
}




/*这是一个Android里的进度条,模拟飞机的油门推杆,当进度条被改变时获取改变后的值,然后通过蓝牙发送给Arduino扩展的蓝牙模块*/
private OnSeekBarChangeListener verticalSeekBarChangeListener = new OnSeekBarChangeListener() {

@Override
public void onStopTrackingTouch(SeekBar seekBar) {

}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {

}

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
verticalText.setText(Integer.toString(progress) + "%");
Youmen = Integer.toString(progress) + "*";
//Log.v("stop", "Conn!");
//发送更新后的数据
try {
if (adapter.isEnabled() == false) {
Toast.makeText(myContext, "蓝牙未开启!", Toast.LENGTH_SHORT).show();
Log.v("stop", "Unopened!");
} else if (connect_result == false) {
Toast.makeText(myContext, "蓝牙未连接,请重试!", Toast.LENGTH_SHORT).show();
Log.v("stop", "Unconnected!");
} else {
/*下面就是通过蓝牙模块发送data变量的数据了*/
String data = Youmen;//+percent+"*"+angle+"*";
byte b[] = data.getBytes();
OutputStream outputStream = bluetoothSocket.getOutputStream();
outputStream.write(b);
Log.v("status","Send!");
Log.v("stop", "Connected!");
}
} catch (IOException e) {
}
}
};

只需各路大神看看,然后提出自己的想法,觉得可能是哪里有问题或者不稳定即可,不一定要解决方案,急!万分感谢!!!!!
...全文
926 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wonabi 2017-07-26
  • 打赏
  • 举报
回复
要建立TCP连接,应该在子线程中进行。
jimking845 2016-10-27
  • 打赏
  • 举报
回复
@u012137924 您好,长连接是什么,可否请教
山鹰1985 2016-08-03
  • 打赏
  • 举报
回复
引用 楼主 yuancr95 的回复:
最近在着手攻坚无人机的基于Arduino蓝牙模块与手机间的通信的技术点。本来一切都已经非常顺利了,可以实现了我需要的数据在手机和蓝牙模块间的传输,然后利用Arduino模块作为MCU进行数据的处理。但是最近新出现了一个问题,说明如下,急求各路大神帮忙: 在手机蓝牙与基于Arduino扩展出来的蓝牙模块进行连接(这里应该不算是配对)后,开始一段时间内,手机与模块间的通信一切正常,可以完全正确且完整地接收到手机传来的数据,但是在过了一段时间后,不知道为何,Arduino模块接收不到手机经蓝牙传来的数据了,检查了配对连接,手机app程序执行情况一切都是正常的,也就是说,从手机通过蓝牙发送数据、信道的存在性等方面,至少表面上看都是正常的,如果需要重新恢复,则需要完全断开连接后重新连接两个模块,才能恢复到最开始的正常情况。 !
连接方式有问题,你描述的现象很像是短连接,一段时间无反应后就断开了,需要重新连接.换个长连接试试.

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧