[原创] 【KW41设计大赛】第五篇:BLE-UART之间双向传输的实现

zhaogong   2017-7-22 02:27 楼主
         由于时间比较紧迫,这篇就简单介绍一下BLE蓝牙-串口实现双向传输的方法吧。经过前一阵子的琢磨,目前个人还是实现了BLE-UART的双向传输的,因为官方提供的APP只能实现BLE-UART的单向传输,所以这里我还是专门做了个APP用来实现BLE-UART的双向传输测试的,感觉效果还不错咯。下面就简单的大致介绍一下吧:
         首先,是MCU系统驱动的创建和修改,直接的导入官方提供的串口调试例程wireless_uart 例程,如图:
                tu01.png
基本上都是从该例程修改而来的。下面我就大致说一下我主要修改的几个部分:
1,添加可发送通知和可读的特征值,经过一番研究,发现在例程中只能在电量反馈的服务下才比较容易的添加进相应的特征值,而它的位置在工程的source 文件下的gatt_db.h 库文件里,添加的格式如下:
                tu02.png
其中,红圈1gatt_db.h 为各个服务和特征的所在位置,而红圈2处为所添加的特征值。
2,在串口接收的回调函数里添加数据的处理代码,如图:
                tu03.png
上图的红圈1处为函数所在的源文件,即wireless_uart.c 这个源文件里,它同样是在source这个文件夹下,而串口接收数据的回调函数就是static void Uart_RxCallBack(void *pData) 这个函数,红圈2处为添加的主要处理代码,作用就是把串口接收的数据进行转移和缓存。
3,添加把接收到的串口数据发送到BLE客户端,即APP端的函数,如图:
                tu04.png
上图的红圈1处是添加代码所在的源文件,即tasks.c这个源文件里,它是在freertos 这个文件夹里,它是主要存放系统线程任务的地方。红圈2处是添加的主要代码,实现发送数据到APP端的功能,而代码添加的地方就是系统的一个空闲任务里,也就是在系统的空闲线程任务里处理数据的发送问题。
         其次,就是相应的APP端开发的问题了,本人对APP的开发也不是很熟,在这里就参照其它的例子,然后自己搞弄出一个来,比较简单。是通过eclipse 平台的Android 开发的一个基于4.0 BLE Android APP,由于这个不是这个项目的重点,源代码我就不说了,下面就说一下相关的调试流程吧:
1,把上面修改好的固件烧录到板子上,这个就不多说,具体可以参照我上几个贴子,烧完固件后,按下SW1(具体位置可以参考我以前的帖子,有介绍的)这个按键重启,看到RGB灯闪烁,然后按下SW4,看到板子上的RGB灯灭掉,改为旁边的红灯在闪烁就表示板子已经准备好等待连接。准备一部支持BLE的手机(判断手机支不支持BLE可以通过进入手机的蓝牙设置里选择搜索,看看手机能不能搜到板子,板子的名称是NXP_WU,如果能搜到就表示手机支持BLE功能,搜不到则表示手机不支持,那就要换手机测了),安装本人做的APP,然后点进去打开APP,打开后,如果手机的蓝牙没打开,会弹出窗口选项让你打开蓝牙,选打开,就进入到搜索设备的界面,其界面如下:
                        tu05.png
一般刚点进来,APP就会自动搜索BLE设备,并把它显示在列表中,如上图,可以看到刚才进入等待连接的板子已经被搜到了,又或者通过APP的右上角的菜单选项里选择搜索BLE设备来进行搜索设备,如图:
                         tu06.png
除了搜索BLE设备这个功能,我还添加了初始化手机蓝牙和清除列表的功能。搜索到设备后,就可以直接点击设备列表中的设备选项来跟设备进行连接,并且APP会跳转到通信的界面,其界面如下:
                         tu07.png
其中,最上面的长条按钮负责实现APP和设备的连接和断开,当连接成功时显示“断开”的字样,点击它就会断开连接并转为显示“连接”的字样,同样再点击就会连接设备并改变显示这样,一般点进来就会自动连接到设备,可以看到板子上的红灯停止闪烁并常亮,界面的两个主要区就是接收区和发送区了,接收区显示串口发送过来的字符,发送区则可以输入字符并发送到串口上,两个区都有清除的选项,点击发送区就可以通过手机的键盘输入字符,点击发送按钮就可以发送数据,点击右上角的“返回”或者点击手机的返回键都可以退出该界面并返回到上一级的搜索界面中。下面两图就展示了通信的效果:
                         tu08.png
               tu09.png
好了,这次就介绍到这里了,修改的工程我会放在帖子的后面,而APP则会把安装包放上来,有需要的小伙伴也可以拿去参考一下咯。接下就是最后的冲刺了,在这里也祝各位参赛的小伙伴顺利咯。拜了个拜。
下面补上相关的工程和APP:
基于MCUXpressoIDE的工程文件:
frdmkw41z_wireless_examples_bluetooth_wireless_uart_freertos_Test.rar (3.58 MB)
(下载次数: 134, 2017-7-22 02:18 上传)
测试用的APP:
mKw41zBleUartTool.apk (319.08 KB)
(下载次数: 12, 2017-7-22 02:21 上传)

回复评论 (10)

赞一个,看能不能用上
点赞  2017-7-22 15:33
引用: 传媒学子 发表于 2017-7-22 15:33
赞一个,看能不能用上

Thankyou!希望能帮到你咯!!
点赞  2017-7-23 13:45
“官方提供的APP只能实现BLE-UART的单向传输”怎么会只是单向呢?双向都是可以的呀,APP可以发到串口,串口也可以发送到APP呀。
点赞  2017-7-23 21:59
官方的也能双向的
点赞  2017-7-23 22:01
引用: bjemt 发表于 2017-7-23 21:59
“官方提供的APP只能实现BLE-UART的单向传输”怎么会只是单向呢?双向都是可以的呀,APP可以发到串口,串口 ...

我去!我回去用官方的再测了下,还真的是耶!不知道我当初是怎么搞错的咯!可能是我看到它哪个串口服务下只有一个写的特征值吧!!
点赞  2017-7-24 10:29
引用: lcdi 发表于 2017-7-23 22:01
官方的也能双向的

哈哈,我也是一脸蒙B,不知为什么会犯傻的咯。后面跟管理员沟通下改一下吧!!
点赞  2017-7-24 10:31
文件下不下来,不知道为啥
点赞  2017-7-24 10:39
引用: yangaichimantou 发表于 2017-7-24 10:39
文件下不下来,不知道为啥

我试了下,可以啊!我用的是360浏览器自带的下载插件的。
点赞  2017-7-24 11:24
引用: zhaogong 发表于 2017-7-24 11:24
我试了下,可以啊!我用的是360浏览器自带的下载插件的。

我现在也是懵逼,我测试只能单向,从APP到串口调试,反过来不行,奇怪。
点赞  2017-7-24 15:27
引用: yangaichimantou 发表于 2017-7-24 15:27
我现在也是懵逼,我测试只能单向,从APP到串口调试,反过来不行,奇怪。

真的!?我去,我也记得当初搞弄了一下,是只能单向的,不过,像我说的,现在重新测下,的确是可以双向的。
点赞  2017-7-24 17:26
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复