Android通过蓝牙与单片机(HC-05)进行通信,接收数据

来源:互联网 发布:收钱软件哪个好 编辑:程序博客网 时间:2024/06/05 07:10

怕忘

蓝字是链接,打开会有更多惊喜。

  • 首先,可以明确的是,与单片机进行通信的时候,会很明确的知道是有多少个数据;
    所以我们就可以根据其长度设置要存取的byte[]长度;
  • 其次,蓝牙的接收和发送试药建立在独立线程里面的;
    搜索和配对/通信(后来在某篇博客里面发现,说是和单片机通信的话可以直接连接,完了可以试试)
  • 再之,就是和单片机通信的时候,它发送的都是16进制的东西,所以要么转换,要么直接用byte[];
  • 最后,读取的时候,InputStream有read(),read(byte[] b),read(byte[] b,int off,int len),可以参考↓使用;
    read()和read(byte[] b)
    read(byte[] b,int off,int len)
        while(true){                        try {                                num = inputStream.read(buffer_z);//buffer_z和buffer_z_new都是1024                                n=0;                                for(i=0;i<num;i++){                                    buffer_z_new[n] = buffer_z[i];                                    n++;                                }                                String s =bytesToHexString(buffer_z_new);//因为单片机发出的是16进制的,直接读取会是乱码,于是进行了转换。                                smsg+=s.trim();                                if(inputStream.available()==0)break;//有时候会因为某些原因,会出现有数据但是位0的问题,可以尝试添加延时;                            } catch (IOException e) {                            e.printStackTrace();                        }                    }
public static String bytesToHexString(byte[] bytes) {        String result = "";        for (int i = 0; i < bytes.length; i++) {            String hexString = Integer.toHexString(bytes[i] & 0xFF);            if (hexString.length() == 1) {                hexString = '0' + hexString;            }            result += hexString.toUpperCase();        }        return result;    }

但是以上读取的时候,有时候会出现丢包的现象,后来再百般询问,浏览之后,得到的结论是:
如果ble需要对事件广播进行监听;如果只是普通蓝牙直接使用接口函数即可,但是需要使用循环(for)不断读一个字节的函数,不能直接读一串。

比如:

            int i = 0,size = 0;            byte[] oneByte = new byte[1];            for(i = 0; i< 64386;i++){                //读后面所有数据                size = inputStream.read(oneByte, 0, 1);                if (size != 1)                {                    return;                }                bufData[i] = oneByte[0];//将循环出来的每一个字节存放在总byte[]里面。            }

以上。

阅读全文
0 0
原创粉丝点击