【求助】 Android蓝牙与单片机蓝牙模块通信

ymkoko 2012-11-08 01:38:57
现在通过connect方法已经与单片机的蓝牙模块连接的上了,并且通过socket取得了输出输入流。根据下位机(单片机)的规定,android手机必须向下位机发送‘A’ 字符,下位机若接收得到‘A’字符的话就返回‘D’字符,并自动启动血压测量仪,不断返送相关的测量数据给android手机。

我是这样发送字符‘A’给下位机的:

String target_address=00:15:83:12:17:86 //下位机蓝牙模块的地址
String uuid = "00001101-0000-1000-8000-00805F9B34FB";
BluetoothAdapter bluetoothAdapter=BluetoothAdapter.getDefaultAdapter();
BluetoothDevice bluetoothDevice=bluetoothAdapter.getRemoteDevice(target_address);
BluetoothSocket clientSocket;
OutputStream os = null;
InputStream is = null;

new Thread(new Runnable() {
@Override
public void run()
{
try
{
clientSocket = bluetoothDevice.createInsecureRfcommSocketToServiceRecord(UUID.fromString(uuid));
clientSocket.connect();
is = clientSocket.getInputStream();
os = clientSocket.getOutputStream();
}
catch (IOException e) {e.printStackTrace();}
}
}).start();

//读取来自下位机的内容
new Thread(new Runnable() {
@Override
public void run()
{
try
{
while (true)
{
byte[] buffer = new byte[1024];
int bytes=0;
// Read from the InputStream
if ((bytes = is.read(buffer)) > 0) {
byte[] buf_data = new byte[bytes];
for (int i = 0; i < bytes; i++) {
buf_data[i] = buffer[i];
Log.i("read from MCU :", buf_data[i]+"");}
}
}
}
catch (IOException e) {e.printStackTrace();}
}
}).start();


try {
byte msg=65;
os.write(msg);
os.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


但是试了很多次都不成功,接收不到下位机返回的字符‘D’

这是下位机的通信协议,我不知道是不是要根据这个来发送数据,求高手指点,感激不尽!

串口通讯协议
1.约定
将手机方称为上位机,将血压计方统称下位机。
数据格式均采用十六进制码。
2.通信过程描述
通信采用上位机准备好,下位机发送方式。
每次运行时,上位机对每一个下位机均发送握手命令,下位机
接收正确回送握手成功。上位机据此来确定下位机的状态(是否已联
机)。
3.通信数据帧格式
1)起始符:标识一次发送的开始1字节,为FFH。
2)数据帧序号:记录数据帧个数,长度2字节。
3)波形数据:2字节。
4)电压信号数据:2字节。
5)结束符0AH。
数据帧长度为8字节。采用一组数据发送3次,无校验。
4.握手命令 0x0A,0x0D :
上位机发送0X0A,下位机接收到返回0X0D即握手成功。
5.波特率选用38400;采样率100Hz。


...全文
2497 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
一步远方 2015-03-11
  • 打赏
  • 举报
回复
楼主解决了吗?
ImSeekbar 2014-11-17
  • 打赏
  • 举报
回复
波特率可以设置的?
狗蛋好活儿 2013-12-05
  • 打赏
  • 举报
回复
都是建蓝牙socket,我的单片机蓝牙就无法连接,一直卡这边,能扫描到,但连接不上,我觉得应该是单片机蓝牙模块的问题,这没有打开服务端的socket,不知我说的是否正确,请指教
狗蛋好活儿 2013-12-05
  • 打赏
  • 举报
回复
引用 9 楼 zhanshanyou 的回复:
楼主,你好 问下,你那个手机与蓝牙配对是自动的吗?如何避免那个配对对话框弹出? 谢谢!
这个不村在提示的问题,因为单片机蓝牙模块无法操作,它的这个配对的过程是自动的
zhansy_2013 2013-10-25
  • 打赏
  • 举报
回复
楼主,你好 问下,你那个手机与蓝牙配对是自动的吗?如何避免那个配对对话框弹出? 谢谢!
炸斯特 2013-09-07
  • 打赏
  • 举报
回复
楼主,这个问题解决没有,能不能分享一下你的代码,
fire_fire_fire 2013-05-06
  • 打赏
  • 举报
回复
按照说法来说,上位机发送一个指令到外设,外设返回D,同时打开外设,是不是你发送过去指令外设没有收到?因为从逻辑上来说,手机只要指令发送,外设收到,那么就会打开机器,你现在是指令发送了,没有收到回复,并且机器也没有打开,那有可能是外设并没有收到指令,你的连接没有成功。 另外外设匹配方面如果有多个外设的话最好还是用外设ID或者蓝牙地址来匹配,能保证连接的唯一性。 如果只有一个外设要连接的话,用外设的名称就可以了。
jiazylr 2013-05-06
  • 打赏
  • 举报
回复
现在遇到同样问题了,望楼主帮忙一哈,,,本人QQ:349216360..感激不尽啊
fluke 2012-12-04
  • 打赏
  • 举报
回复
建议楼主把异常贴出来看看。 从你的代码来看,两个线程分别进行初始化和收数据,并没有先后顺序,所以收数据的时候流对象都可能没初始化好。 另外不确定是否已经配对。 建议也看一下bluetoothchat例子。
ymkoko 2012-11-09
  • 打赏
  • 举报
回复
每日一顶,等到高手为止!!
面包里的代码 2012-11-08
  • 打赏
  • 举报
回复
坐等学习知识
zhuawang 2012-11-08
  • 打赏
  • 举报
回复
学习,等待高人来解
ymkoko 2012-11-08
  • 打赏
  • 举报
回复
求高人指点 感激不尽!

80,351

社区成员

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

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