目录
蓝牙接收问题的解决思路
https://blog.csdn.net/weixin_42619971/article/details/107298406直接看成功案例
上文中提到蓝牙无法正常接收到字符,可能是因为蓝牙控件配置过低。通过查找相关的资料,我提出了一种可以解决蓝牙接收字符串问题的方法。就是采用另一个蓝牙组件,也就是低功耗蓝牙组件。
在功能方面,这个蓝牙组件要比普通的蓝牙组件更为全面,用法也更为多变。它的主要功能是可以输出字符串,并且也可以监听数据。与此同时,在输出数据方面,它还可以输出浮点型数据,这是普通蓝牙无法难以实现的功能。
在接收数据方面,他有着服务UUID,特征UUID。通过上面两个特征量可以准确的获取很多的有用信息。在数据处理方面它可以接收整型数据短整型数据字节数组以及列表它均可以进行处理。
由此可见它的功能是非常全面的。为此本着以测试这个低功耗蓝牙组建的能力,我们尝试进行组建下面一个功能的APP。
一、APP界面设计
1、首先是APP界面的设置,这部分没什么好说的.如下图。
就是把需要用到的按钮、文本、标签,根据个人的需要放置到合适的位置上即可。这里简单的放置了搜索蓝牙、连接蓝牙、断开连接、发送的按钮,以及接收和发送的文本显示和用来显示搜索到的蓝牙设备的下拉框,最后加入BluetoothLE组件。这样简单的APP界面就设计完成。
二、逻辑部分
总体情况如下:
思路:整体的思路是扫描蓝牙设备,将找到的设备的地址和名称送至下拉框中,然后根据下拉框中得到的蓝牙设备的地址进行连接。进行连接后就是进行数据的读取和发送的操作。数据的发送和读取需要两个很重要的参数,分别是服务UUID和特征UUID,这两个参数是蓝牙用来识别数据的一个信使。
2.1搜索蓝牙设备
屏幕在初始化事件中,对蓝牙连接成功的提示标签进行初始化。接着是调用开始搜索按钮的按下事件,在事件中调用蓝牙组件中的开始扫描功能并调用下拉框的显示列表。
在打开扫描后,当扫描到蓝牙设备时,会自动调用蓝牙组件中的找到设备事件,在事件中将找到的蓝牙设备的设备信息以字符串的形式放到下拉框中显示。此时的下拉框处于打开的状态,可以对框中的内容进行选择,也就是选择要连接的设备。当选择完成后,在选择完成事件中调用蓝牙组件中的停止扫描功能。(在打开扫描后,在完成扫描时要记得停止扫描,不然会一直扫描占用系统资源)
2.2连接蓝牙设备
连接蓝牙设备需要蓝牙设备的地址,蓝牙设备的地址则以字符串的形式保存在下拉框中。但是扫描时得到的信息不只是地址信息,还有设备的名称和信号强度。而连接所需的地址这需要通过内置块的文本组件中的一个功能将字符串的前17长度的字符取出就是蓝牙设备的地址。这里取字符串的前面是因为地址信息在字符串的前面。而长度17,是因为地址的长度是17。然后就是把断开连接的事件也加上。2数据的发送和接收
2.3数据接收
在连接成功后,在连接成功的事件中调用蓝牙组件中的监听接收字符串数据(蓝牙组件中有其它数据类型得到接收监听,这里选择字符串类型),监听是否接收到数据,当接收到数据时就会自动调用收到字符串数据事件,在此事件中,将接收到的数据送到文本框中,这就完成了数据的接收。接着是在连接和断开连接的事件中增加提示文本“已连接”和“断开连接”。这个部分需要注意的是监听事件选择字符串数据类型,在收到事件中也要选择字符串数据类型。
2.4数据接收
发送部分,在发送按钮的按下事件中调用蓝牙组件的输出字符串数据功能,将输入文本框中的内容发送出去。这里要注意的是,如果需要发送的数据也被本次编写的APP也接收到,则发送和接收部分的特征UUID需要相同。
三、总结
这个低功耗蓝牙组件是解决数据接收问题的一个好工具,但不幸的是,这个组件设计出来的APP不能够和HC-50蓝牙模块连接,具体情况尚在分析中,知道原因的小伙伴可以在下方评论,下周我给大家解惑。