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

怕忘

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

  • 首先,可以明确的是,与单片机进行通信的时候,会很明确的知道是有多少个数据;
    所以我们就可以根据其长度设置要存取的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的时候,可以尝试让线程sleep一下。

以上。

  • 11
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 51单片机是一款常用的单片机,它的灵活性高,具有多样化的编程方式和强大的控制能力,因此在许多控制系统中得到广泛应用。而HC-05是一种低成本、易于使用的蓝牙串口模块,它可以使51单片机之间通过无线数据传输实现通信,从而达到无需物理连接的效果。 具体来说,当我们需要两个或多个51单片机进行通信时,可以采用HC-05模块来实现。首先将HC-05模块接入到51单片机的串口中,并通过编程控制51单片机HC-05模块建立蓝牙连接。然后,在两个单片机之间实现数据传输,就可以实现无线通信了。 其中,数据传输可以采用多种方式实现,例如串口通信、I2C通信等。在传输数据时,需要注意数据格式的统一和错误处理方式的设置,以确保数据的准确传输和处理。 总之,通过使用HC-05模块,我们可以很方便地实现51单片机之间的无线通信,从而大大提高了系统的灵活性和可靠性。 ### 回答2: 51单片机是一种高性能、低功耗的单片机,可以广泛应用于各种嵌入式系统中。而HC-05则是一种基于蓝牙协议的无线串口模块,可以实现低成本、低功耗、短距离的数据传输。在嵌入式系统中,51单片机通过HC-05实现无线通信具有广泛的应用和广阔的市场前景。 首先,51单片机通过串口将需要传输的数据发送到HC-05HC-05则将数据通过蓝牙信号发送给接收端设备。接收端设备收到数据后,通过串口将数据传输到目标设备。这个过程中,无需连接任何电缆或线路,因此无线通信具有便捷、灵活、高效的特点。 其次,该方案具有可靠的数据传输能力。蓝牙协议使用的是加密技术以及一种错误控制码技术,保证了数据传输的安全性和可靠性。传输端和接收端可以通过协议栈的自动协商功能选择最佳速率,以实现最快的传输速度和最佳的性能表现。 此外,该方案还具有低功耗的特点。蓝牙协议采用了低功耗模式,可以有效降低功耗。同时,蓝牙使用高频率的无线电技术,使信号传输更加稳定,同时又保持低功耗的特点。这对于需要长时间运行且需要频繁数据传输的应用场景非常适合。 总之,51单片机通过HC-05实现无线通信具有广泛的应用前景和重要的意义。通过无线通信的方式,极大地提升了嵌入式系统的可扩展性、可移植性和高效性。因此,在嵌入式系统领域,应用无线通信技术已成为一种重要的趋势和发展方向。 ### 回答3: 51单片机作为一种基础的微型计算机控制芯片,使用广泛。在实际应用中,为了实现控制与数据的远程传输,需要进行无线通信。而hc-05模块则是一种低功耗蓝牙模块,可与51单片机结合实现无线通信。 在使用hc-05模块与51单片机进行无线通信时,需要先将模块与单片机连接。首先,需要将hc-05模块与电脑连接。打开串口助手软件,并将hc-05模块连接到电脑上,按输入AT命令模式的方式进行设置。然后,将hc-05模块与51单片机进行连接,在51单片机中开启串口,并设置相应的波特率。 在通信时,需要先将单片机中需要发送的数据通过串口发送给hc-05模块,在模块中进行蓝牙传输。接收端设备可以是手机,电脑等设备,需要打开对应软件进行接收。将接收到的数据再次通过蓝牙进行传输回hc-05模块,并通过串口传输给单片机单片机进行处理。 通过hc-05模块实现无线通信,可以大大简化传输过程,提高工作效率。相比有线传输,无线传输可以更加灵活,适应范围也更广。因此,hc-05模块与51单片机的结合成为了不少应用领域的首选方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值